我有一个名为"myFile.pdf"的pdf文件。我想使用pyPdf来反转它的页面顺序。怎么做?
from pyPdf import PdfFileWriter, PdfFileReader
output_pdf = PdfFileWriter()
with open(r'input.pdf', 'rb') as readfile:
input_pdf = PdfFileReader(readfile)
total_pages = input_pdf.getNumPages()
for page in xrange(total_pages - 1, -1, -1):
output_pdf.addPage(input_pdf.getPage(page))
with open(r'output.pdf', "wb") as writefile:
output_pdf.write(writefile)
range(total_pages, 0, -1)
是否更有意义呢?
这样你最终甚至可以在迭代的任何时候通过页码访问页面,而不会引起混淆。 - Sammeeey感谢您分享建议。我使用了它们并进行了一些编辑,使选择和保存文件时的界面更具图形化。对于这一切我都是新手,我的改动可能不够有效或干净,但它对我很有用,所以我想分享。
from PyPDF2 import PdfFileWriter, PdfFileReader
import tkinter as tk
from tkinter import filedialog
import ntpath
import os
output_pdf = PdfFileWriter()
# grab the location of the file path sent
def path_leaf(path):
head, tail = ntpath.split(path)
return head
# graphical file selection
def grab_file_path():
# use dialog to select file
file_dialog_window = tk.Tk()
file_dialog_window.withdraw() # hides the tk.TK() window
# use dialog to select file
grabbed_file_path = filedialog.askopenfilename()
return grabbed_file_path
# file to be reversed
filePath = grab_file_path()
# open file and read
with open(filePath, 'rb') as readfile:
input_pdf = PdfFileReader(readfile)
# reverse order one page at time
for page in reversed(input_pdf.pages):
output_pdf.addPage(page)
# graphical way to get where to select file starting at input file location
dirOfFileToBeSaved = path_leaf(filePath)
locationOfFileToBeSaved=filedialog.asksaveasfilename(initialdir=dirOfFileToBeSaved, initialfile='name of reversed file.pdf',title="Select or type file name and location", filetypes=[("pdf files", "*.pdf")])
# write the file created
with open(locationOfFileToBeSaved, "wb") as writefile:
output_pdf.write(writefile)
# open the file when done
os.startfile(locationOfFileToBeSaved)
In [1]: import pyPdf
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-1-bba5a42e9137> in <module>
----> 1 import pyPdf
c:\temp\envminecart\lib\site-packages\pyPdf\__init__.py in <module>
----> 1 from pdf import PdfFileReader, PdfFileWriter
2 __all__ = ["pdf"]
ModuleNotFoundError: No module named 'pdf'
__all__
assignment above the import
fixes this specific problem, but other SyntaxError
s due to Python 2 syntax then pop up.)import
语句更改为PyPDF2
并将xrange
更改为range
,然后进行pip install PyPDF2
即可。from PyPDF2 import PdfFileWriter, PdfFileReader
output_pdf = PdfFileWriter()
with open(r'input.pdf', 'rb') as readfile:
input_pdf = PdfFileReader(readfile)
total_pages = input_pdf.getNumPages()
for page in range(total_pages - 1, -1, -1):
output_pdf.addPage(input_pdf.getPage(page))
with open(r'output.pdf', "wb") as writefile:
output_pdf.write(writefile)
reversed
迭代页面:from PyPDF2 import PdfFileWriter, PdfFileReader
output_pdf = PdfFileWriter()
with open('input.pdf', 'rb') as readfile:
input_pdf = PdfFileReader(readfile)
for page in reversed(input_pdf.pages):
output_pdf.addPage(page)
with open('output.pdf', "wb") as writefile:
output_pdf.write(writefile)
我不知道这个.pages
集合在原始的pyPdf
中是否可用,但可以争论的是,在这一点上它并不真正重要。
from pypdf import PdfWriter, PdfReader
output_pdf = PdfWriter()
with open(r'input.pdf', 'rb') as readfile:
input_pdf = PdfReader(readfile)
total_pages = len(input_pdf.pages)
for page in range(total_pages - 1, -1, -1):
output_pdf.add_page(input_pdf.pages[page])
with open(r'output.pdf', "wb") as writefile:
output_pdf.write(writefile)