PyPDF2写入功能会损坏PDF文件

时间:2018-11-29 12:04:36

标签: python pdf pypdf2

我有一个加密PDF的功能。我对不同的文档多次使用它,因此每次都使用一个不同的文件在一个循环中执行它。我使用PyPDF2包,每次该函数执行以下操作:

def manual_encrypting(folder_path, file_name):

  # creates a new pdf_writer and a pdf_reader
  pdf_writer = PdfFileWriter()
  pdf_reader = PdfFileReader(folder_path + "/" + file_name)

  # creates an output file to save a new, encrypted file
  output_pdf = folder_path + "/english/secured documents/" + file_name

  # iterates through and saves all pages of this tutorial
  for page in range(pdf_reader.getNumPages()):
          pdf_writer.addPage(pdf_reader.getPage(page))

  #encrypts a PDF
  pdf_writer.encrypt(user_pwd='', owner_pwd='some_password', 
                         use_128bit=True)

  #and the last step, it writes to a new file to output_pdf
  with open(output_pdf, 'wb') as fh:
          pdf_writer.write(fh)

此功能处理的第一个文件是完美的所有加密文件,保存在正确的位置。该行中的第二个文件也已处理,加密和保存,但已损坏,我无法使用Adobe Reader打开它(错误消息“打开此文档时出错。该文件已损坏,无法修复”)。该程序完全崩溃,并且计算机声音很大。等了足够长的时间后,我得到退出代码3489660927。

问题出在pdf_writer.write(fh) 100%。问题是,为什么?在将PDF分为17个部分之前,我使用了完全相同的语法,并且它运行良好,所有文件都已启动并运行。

我的调试是这样的:

  • 我检查了这是否是文件的问题,但是用其他文件替换后,问题没有消失
  • 我在写作之前和之后添加了一些印刷品,以检查哪些值存储在不同的变量中。这些行是这样的:

    with open(output_pdf, 'wb') as fh:
        print("I'm getting in")
        print(fh)
        print(output_pdf)
        print(pdf_writer)
        pdf_writer.write(fh)
        print("I'm getting out")
    

其输出是这样的(对于两次迭代,该函数处于循环中):

I'm getting in
<_io.BufferedWriter name='C:/Users/marta.pozaroszczyk/Desktop/script/Manuals/00/english/secured tutorials/2D-0-Gen-Info.pdf'>
C:/Users/marta.pozaroszczyk/Desktop/script/Manuals/00/english/secured tutorials/2D-0-Gen-Info.pdf
<PyPDF2.pdf.PdfFileWriter object at 0x000001D2E39A6780>
I'm getting out
the end of manual_encrypting function
I'm getting in
<_io.BufferedWriter name='C:/Users/marta.pozaroszczyk/Desktop/script/Manuals/X2D-2-Reference.pdf'>
C:/Users/marta.pozaroszczyk/Desktop/script/Manuals/X2D-2-Reference.pdf
<PyPDF2.pdf.PdfFileWriter object at 0x000001D2E4FCEFD0>
[Finished in 10.0s]

因此,如您所见,变量每次都会获得不同的值。然后它在pdf_writer.write(fh)行之前崩溃,并且之后的打印没有产生。我必须强行停止该程序(因此,在10秒钟内完成)。这很奇怪,因为此功能中的第一个文件可以正常工作,但是第二个文件(任何第二个文件)会损坏它。

有人知道如何进行吗?它使我永远陷入困境。谢谢!

0 个答案:

没有答案