with open(pdf,'rb') as fin:
reader = PyPDF2.PdfFileReader(fin)
new_pdf = PyPDF2.PdfFileWriter()
for i in range(reader.numPages):
new_pdf.addPage(reader.getPage(i))
out_file = pdf if not create_copy else self._new_copy(pdf)
with open(out_file,'wb') as fout:
new_pdf.write(fout)
Ceci fonctionne comme prévu lors de l'écriture d'une copie.Pourquoi avoir besoin d'instructions imbriquées pour le lecteur et l'auteur?
Maintenant, nous allons passer les trois dernières lignes de la with
:
with open(pdf,'rb') as fin:
reader = PyPDF2.PdfFileReader(fin)
new_pdf = PyPDF2.PdfFileWriter()
for i in range(reader.numPages):
new_pdf.addPage(reader.getPage(i))
out_file = pdf if not create_copy else self._new_copy(pdf)
with open(out_file,'wb') as fout:
new_pdf.write(fout)
Cela crée un pdf avec la bonne quantité de pages, mais toutes les pages sont vides, même lors de l'écriture à un nouveau fichier. (Notez que déplacer le new_pdf = ...
, aussi, ne change rien)
Pourquoi? Et que puis-je faire à ce sujet? Parce que je m'attends à devoir déplacer ces trois lignes sur le premier with
, éventuellement, afin de fournir un support d'écrasement. (À moins que je ne crée une copie de toute façon puis renommez, ce que je veux éviter.)
Est-ce que cela fonctionne vraiment dans le premier cas d'avoir le même fichier ouvert à la fois pour lire et pour écrire "sinon create_copy"? –
@AndreasDeak bien sûr que non. – User1291
Je ne peux que deviner ici, mais peut-être 'addPage' ne copie pas vraiment la page dans' new_pdf' mais seulement une référence au fichier original, et ce fichier est fermé à la fin de 'with'. –