pdf_merge.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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.name]
  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. folder2 = folder[26:]
  35. for r in reports:
  36. print(folder2 + "/" + r)
  37. pdf_merge(cfg.cognos11.reportoutput_dir + "/" + folder2, r, config)
  38. def get_config_json(config, config_dir):
  39. if config == "":
  40. return None
  41. if config.startswith("{"):
  42. return json.loads(config)
  43. config_file = f"{config_dir}/merge/{config}.json"
  44. if not Path(config_file).exists():
  45. return None
  46. with open(config_file, "r") as frh:
  47. return json.load(frh)
  48. if __name__ == "__main__":
  49. merge_reports_in_folder(config.Config())