3

これを表現する最善の方法はよくわかりませんが、私がやりたいことは、pdf ファイルを読み取り、さまざまな変更を加えて、変更した pdf を元のファイルに保存することです。現在、変更された pdf を別のファイルに保存することはできますが、新しいファイルを作成するのではなく、元のファイルを置き換えようとしています。

これが私の現在のコードです:

from pyPdf import PdfFileWriter, PdfFileReader

output = PdfFileWriter()
input = PdfFileReader(file('input.pdf', 'rb'))
blank = PdfFileReader(file('C:\\BLANK.pdf', 'rb'))

# Copy the input pdf to the output.
for page in range(int(input.getNumPages())):
    output.addPage(input.getPage(page))

# Add a blank page if needed.
if (input.getNumPages() % 2 != 0):
    output.addPage(blank.getPage(0))

# Write the output to pdf.
outputStream = file('input.pdf', 'wb')
output.write(outputStream)
outputStream.close()

別のファイル名に変更すると、正常outputStreamに動作しますが、入力ファイルがまだ使用されているため、上書き保存できません。ストリームを試みまし.close()たが、エラーも発生していました。

これにはかなり単純な解決策があると感じていますが、それを見つけることができませんでした。

ありがとう!

4

3 に答える 3

8

一時出力ファイルの名前をいつでも古いファイルに変更できます。

import os
f = open('input.pdf', 'rb')
# do stuff to temp.pdf
f.close()
os.rename('temp.pdf', 'input.pdf')
于 2010-04-30T18:30:10.817 に答える
3

ストリームを close() しようとしたが、エラーが発生したと言いましたか? PdfFileReader オブジェクトを削除して、誰もストリームにアクセスできないようにすることができます。そして、ストリームを閉じます。

from pyPdf import PdfFileWriter, PdfFileReader

inputStream = file('input.pdf', 'rb')
blankStream = file('C:\\BLANK.pdf', 'rb')
output = PdfFileWriter()
input = PdfFileReader(inputStream)
blank = PdfFileReader(blankStream)

...

del input # PdfFileReader won't mess with the stream anymore
inputStream.close()
del blank
blankStream.close()

# Write the output to pdf.
outputStream = file('input.pdf', 'wb')
output.write(outputStream)
outputStream.close()
于 2010-04-30T18:48:28.777 に答える
1

PDFが十分に小さい場合(プラットフォームによって異なります)、すべてを読み込んでファイルを閉じ、データを変更してから、すべてを同じファイルに書き戻すことができます.

于 2010-04-30T18:55:07.483 に答える