【问题标题】:Merge 2 PDF's in 16 page segments在 16 页段中合并 2 个 PDF
【发布时间】:2021-05-16 21:49:39
【问题描述】:

我有 2 个 PDF 来自拆分由 32 页签名组成的 2-up 文档。这意味着一个 PDF 有第 1-16、33-48、65-80.... 页,而另一个有第 17-32、49-64、81-96....页。

如何使用 Python 合并两者,遍历每个 16 页的片段?用 1-16, 17-32, 33-48, 49-64 获得最终组合的 PDF .....

我可以逐页迭代它们,我可以将一个完整的 PDF 一个接一个地合并,等等。但似乎无法获得按段合并的正确方法。

第一个操作是使用外部软件(Xerox Freeflow Core)完成的,我有 4 个文件,其中 16 页序列分为偶数/奇数页,我将它们加入迭代:

import itertools as itt
import sys
import PyPDF2 as PDF
def main():
fbase = sys.argv[1]

pdf_out = PDF.PdfFileWriter()

with open(fbase + "_odd.pdf", 'rb') as f_odd:
    with open(fbase + "_even.pdf", 'rb')  as f_even:
        pdf_odd = PDF.PdfFileReader(f_odd)
        pdf_even = PDF.PdfFileReader(f_even)

        for p in itt.chain.from_iterable(
            itt.zip_longest(
                pdf_odd.pages,
                (pdf_even.pages),
            )
        ):
            if p:
                pdf_out.addPage(p)

        with open(fbase + ".pdf", 'wb') as f_out:
            pdf_out.write(f_out)

return 0
if __name__ == "__main__":

if len(sys.argv) != 2:
    print("Wrong number of arguments!")
    sys.exit(1)

sys.exit(main())

之后我得到了上面提到的 2 个文件。如果我可以遍历 16p 段而不是逐页迭代,上面的代码对我有用。

有什么线索吗?

谢谢

【问题讨论】:

    标签: python merge pypdf


    【解决方案1】:

    知道了! 以防万一有人需要类似的东西,这对我有用:

    import sys
    
    import PyPDF2 as PDF
    
    
    def main():
    fbase = sys.argv[1]
    
    all_pages = []
    with open(fbase + "_odd.pdf", 'rb') as f_odd:
        with open(fbase + "_even.pdf", 'rb')  as f_even:
            pdf_odd = PDF.PdfFileReader(f_odd)
            pdf_even = PDF.PdfFileReader(f_even)
            size_odd = len(pdf_odd.pages)
            size_even = len(pdf_even.pages)
            slice_idx = list(range(0,size_odd,16))
            zip_pdfs = list(zip(pdf_odd.pages, pdf_even.pages))
            for slice16_odd, slice16_even in [(pdf_odd.pages[el:el+16],
                                               pdf_even.pages[el:el+16])
                                              for el in slice_idx]:
                all_pages.extend(slice16_odd)
                all_pages.extend(slice16_even)
            if size_odd > slice_idx[-1]:
                all_pages.extend(slice16_odd[slice_idx[-1]:])
            if size_even > slice_idx[-1]:
                all_pages.extend(slice16_even[slice_idx[-1]:])
    
    
            if any(all_pages):
                pdf_out = PDF.PdfFileWriter()
                for page in all_pages:
                    pdf_out.addPage(page)
                with open(fbase + ".pdf", 'wb') as f_out:
                    pdf_out.write(f_out)
    
    return 0
    if __name__ == "__main__":
    
    if len(sys.argv) != 2:
        print("Wrong number of arguments!")
        sys.exit(1)
    
    sys.exit(main())
    

    还是谢谢...

    BR

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 2013-03-04
      • 2011-05-04
      • 2014-10-16
      • 2019-12-08
      • 2012-06-16
      相关资源
      最近更新 更多