pdf_merge.py 2.4 KB

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