pdf_merge.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import config
  2. from PyPDF2 import PdfMerger
  3. from pathlib import Path
  4. import re
  5. import json
  6. def pdf_merge(base_dir: str, report_name, config=None):
  7. if config is None:
  8. config = {"_0": []}
  9. report_prefix = re.sub(r"\[([^\]]+)\]", "", report_name)
  10. if report_prefix[-2:] == "__":
  11. report_prefix = report_prefix[:-1]
  12. for suffix, entries in config.items():
  13. target = f"{base_dir}/{report_prefix}{suffix}.pdf"
  14. if Path(target).exists():
  15. Path(target).unlink()
  16. pdfs = [f for f in Path(base_dir).glob(report_prefix + "*.pdf")]
  17. pdfs.sort(key=lambda f: f.stat().st_mtime)
  18. if len(entries) > 0:
  19. pdfs = [f for e in entries for f in pdfs if e + ".pdf" in f]
  20. if len(pdfs) > 0:
  21. with PdfMerger() as merger:
  22. for pdf in pdfs:
  23. merger.append(pdf)
  24. merger.write(target)
  25. def get_reports(reports_file, folder):
  26. with open(reports_file, "r") as frh:
  27. reports = json.load(frh)
  28. return [r["name"] for r in reports if r["path"].startswith(folder)]
  29. def merge_reports_in_folder(
  30. cfg: config.Config, folder="Team Content/ReportOutput", config=None
  31. ):
  32. reports = get_reports(cfg.cognos11.reports_file, folder)
  33. print(folder)
  34. for r in reports:
  35. print(r)
  36. pdf_merge(cfg.cognos11.reportoutput_dir, r, config)
  37. def get_config_json(config, config_dir):
  38. if config == "":
  39. return None
  40. if config.startswith("{"):
  41. return json.loads(config)
  42. config_file = f"{config_dir}/merge/{config}.json"
  43. if not Path(config_file).exists():
  44. return None
  45. with open(config_file, "r") as frh:
  46. return json.load(frh)
  47. if __name__ == "__main__":
  48. merge_reports_in_folder(config.Config())