{"id":412,"date":"2020-10-10T21:34:20","date_gmt":"2020-10-11T01:34:20","guid":{"rendered":"http:\/\/www.compdigitec.com\/labs\/?p=412"},"modified":"2020-10-10T21:35:22","modified_gmt":"2020-10-11T01:35:22","slug":"concatenating-pdfs-while-padding-extending-odd-length-pdfs","status":"publish","type":"post","link":"http:\/\/www.compdigitec.com\/labs\/2020\/10\/10\/concatenating-pdfs-while-padding-extending-odd-length-pdfs\/","title":{"rendered":"Concatenating PDFs while padding\/extending odd-length PDFs"},"content":{"rendered":"<p>When concatenating PDFs to consolidate print jobs, it is nice to have single-page or PDFs with odd numbers of pages to not have to share sides with another unrelated document.<\/p>\n\n\n\n<p>There is a short script available at <a href=\"https:\/\/unix.stackexchange.com\/questions\/66418\/how-can-i-merge-pdf-files-so-that-each-file-begins-on-an-odd-page-number\">https:\/\/unix.stackexchange.com\/questions\/66418\/how-can-i-merge-pdf-files-so-that-each-file-begins-on-an-odd-page-number<\/a> ; however, it does not appear to be updated for PyPDF2. So here is an update for Python3 and PyPDF2.<\/p>\n\n\n<p>Prep:<\/p>\n<pre><pre class=\"brush: bash; title: ; notranslate\" title=\"\">sudo apt install python3-pypdf2<\/pre><\/pre>\n\n\n<pre><code>\n#!\/usr\/bin\/env python3\n# Inspired from https:\/\/unix.stackexchange.com\/a\/66455\n\nimport copy\nimport sys\nfrom PyPDF2 import PdfFileWriter, PdfFileReader\n\ndef main():\n    if len(sys.argv) < 2:\n        print(\"No input PDFs specified\", file=sys.stderr)\n        return 1\n\n    pdf_writer = PdfFileWriter()\n    output_page_number = 0\n    alignment = 2           # to align on even pages\n\n    # So we can close the file objects later.\n    # https:\/\/stackoverflow.com\/questions\/44375872\/pypdf2-returning-blank-pdf-after-copy\n    file_objects = []\n\n    for filename in sys.argv[1:]:\n        # Store the file object for closing\n        f = open(filename, 'rb')\n        file_objects.append(f)\n\n        # Open the input PDF\n        pdf_reader = PdfFileReader(f)\n\n        # Add input pages\n        for page in pdf_reader.pages:\n            pdf_writer.addPage(page)\n            output_page_number += 1\n\n        # Add filler pages\n        while output_page_number % alignment != 0:\n            pdf_writer.addBlankPage()\n            output_page_number += 1\n\n    # Write output PDF while input files are still open.\n    pdf_writer.write(sys.stdout.buffer)\n\n    # Close open files.\n    while len(file_objects) > 0:\n        file_objects.pop().close()\n\n    return 0\n\nsys.exit(main())\n<\/code><\/pre>","protected":false},"excerpt":{"rendered":"<p>When concatenating PDFs to consolidate print jobs, it is nice to have single-page or PDFs with odd numbers of pages to not have to share sides with another unrelated document. There is a short script available at https:\/\/unix.stackexchange.com\/questions\/66418\/how-can-i-merge-pdf-files-so-that-each-file-begins-on-an-odd-page-number ; however, it does not appear to be updated for PyPDF2. So here is an update for [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[881,883,885,884,718,882,886,639],"_links":{"self":[{"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/posts\/412"}],"collection":[{"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/comments?post=412"}],"version-history":[{"count":0,"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/posts\/412\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/media?parent=412"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/categories?post=412"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.compdigitec.com\/labs\/wp-json\/wp\/v2\/tags?post=412"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}