arrange.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. # SPDX-FileCopyrightText: 2026 geisserml <geisserml@gmail.com>
  2. # SPDX-License-Identifier: Apache-2.0 OR BSD-3-Clause
  3. import pypdfium2._helpers as pdfium
  4. from pypdfium2._cli._parsers import parse_numtext
  5. def attach(parser):
  6. parser.add_argument(
  7. "inputs",
  8. nargs = "+",
  9. help = "Sequence of PDF files.",
  10. )
  11. parser.add_argument(
  12. "--pages",
  13. nargs = "+",
  14. default = [],
  15. help = "Sequence of page texts, definig the pages to include from each PDF. Use '_' as placeholder for all pages."
  16. )
  17. parser.add_argument(
  18. "--passwords",
  19. nargs = "+",
  20. default = [],
  21. help = "Passwords to unlock encrypted PDFs. Any placeholder may be used for non-encrypted documents.",
  22. )
  23. parser.add_argument(
  24. "--output", "-o",
  25. required = True,
  26. help = "Target path for the output document",
  27. )
  28. def main(args):
  29. args.pages = [None if p == "_" else parse_numtext(p) for p in args.pages]
  30. for _ in range(len(args.inputs) - len(args.pages)):
  31. args.pages.append(None)
  32. for _ in range(len(args.inputs) - len(args.passwords)):
  33. args.passwords.append(None)
  34. dest_pdf = pdfium.PdfDocument.new()
  35. for in_path, pages, password in zip(args.inputs, args.pages, args.passwords):
  36. with pdfium.PdfDocument(in_path, password=password) as src_pdf:
  37. dest_pdf.import_pages(src_pdf, pages=pages)
  38. dest_pdf.save(args.output)