我正在使用 python,我想将两个 PDF 页面合并为一个页面。我的目的是将这两页合并为一个而不是两个 PDF。有什么办法可以将两个PDF一张一张合并起来吗?我不想合并这两个。在不重叠的情况下,有什么办法可以将它们结合起来吗?
我正在尝试将多个 PDF 文档合并为一个。然而,这些文档有不同的来源,其中一些是在计算机中创建的,其中一些是使用不同的扫描仪/软件扫描的。在加入之前,我将它们全部缩放到 A4 尺寸。
我的问题是某些文档显示正常,但当我检查方向时,文档看起来好像已旋转。
例如,对于此处的此文档,它在浏览器和 Acrobat Reader 中显示“正常”,但如果我使用 PyPDF2 获取信息:
from PyPDF2 import PdfReader
reader = PdfReader(path)
for page in reader.pages:
orientation = page.get('/Rotate')
print(f"Document: {path}")
print(f" Orientation: {orientation}")
print(f" mediabox: {page.mediabox}")
print(f" artbox: {page.artbox}")
print(f" bleedbox: {page.bleedbox}")
print(f" cropbox: {page.cropbox}")
print(f" trimbox: {page.trimbox}")
Run Code Online (Sandbox Code Playgroud)
我得到:
Orientation: 90
mediaBox: RectangleObject([0, 0, 792, 542])
artBox: RectangleObject([0, 0, 792, 542])
bleedBox: RectangleObject([0, 0, 792, 542])
cropBox: RectangleObject([0, 0, 792, 542])
trimBox: RectangleObject([0, 0, 792, 542])
Run Code Online (Sandbox Code Playgroud)
这很烦人,因为在后续步骤中,我向文档添加页码,但由于方向,它们都被放置错误。
请注意,页面显示正确,只是它们仅具有错误的方向数据。如果我尝试设置旋转页面的方向,例如
Orientation: 90 …Run Code Online (Sandbox Code Playgroud) 为了从多页 PDF 中获取单个字符串,我这样做:
import PyPDF2
pdfFileObject = open('sample.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObject)
count = pdfReader.numPages
for i in range(count):
page = pdfReader.getPage(i)
output = page.extractText()
output
Run Code Online (Sandbox Code Playgroud)
结果是来自单个页面(文档中的最后一页)的字符串 - 正如PyPDF2 文档中应有的那样。我应用这种方法是因为我读过一些人建议它阅读整个 PDF,但这对我来说不起作用。
显然,这是一个基本操作,对于我缺乏经验,我提前表示歉意。我尝试了其他解决方案,如 Tika、PDFMiner 和 Textract,但 PyPDF 似乎是迄今为止唯一让我满意的解决方案。
任何帮助,将不胜感激。
更新:
按照建议,我将 an 定义output为一个列表,然后将所有页面附加到它(正如我所想的)循环中,如下所示:
for i in range(count):
page = pdfReader.getPage(i)
output = []
output.append(page.extractText())
Run Code Online (Sandbox Code Playgroud)
结果是列表中的单个字符串,例如['sample content from the last page of PDF']
PyPDF2 有时会因解密某些 PDF 文件而失败,我正在尝试使用pikepdf解密它们 ,但出现此错误:在恢复损坏的文件时无法找到预告片字典 有什么想法吗?
我尝试向 PDF 文件的每一页添加水印。我的 PDF 文件有 58 页,但我的输出文件仅包含 PDF 文件的最后一页。
这是我的代码:
from PyPDF2 import PdfFileReader, PdfFileWriter
watermark_pdf = PdfFileReader("watermark.pdf")
watermark_page = watermark_pdf.getPage(0)
reader = PdfFileReader("original_document.pdf")
for page in reader.pages:
page.mergePage(watermark_page)
output = PdfFileWriter()
output.addPage(page)
with open("watermarked_document.pdf", "wb") as fp:
output.write(fp)
Run Code Online (Sandbox Code Playgroud)
请告诉我如何为所有页面添加水印。
我一直在努力用 Python 阅读 PDF 中的文本。
我需要的是 PyPDF2 来查找给定的字符串并返回放置在该字符串旁边的参考号。
这就是我正在尝试的代码:
import os
import shutil
import PyPDF2
from PyPDF2 import PdfFileWriter, PdfFileReader
jobpath = r"C:\Scrpts\scr\testPDF"
for files in os.listdir(jobpath):
if files.endswith('.pdf'):
filename = os.path.join(jobpath, files)
with open(filename, 'rb') as pageObj1:
pdfReader1 = PyPDF2.PdfFileReader(pageObj1)
pdfReader1._override_encryption = True
pageObj1 = pdfReader1.getPage(0)
text1 = pageObj1.extractText()
refNum = text1.partition("Reference")
text1 = refNum[2]
text1 = text1[0:30]
a = 'Reference'
b = '\n'
text1 = text1.split(a)[-1].split(b)[0]
refNum = text1
print(filename + ' ' + refNum)
Run Code Online (Sandbox Code Playgroud)
但这会产生多余的空白错误:
PdfReadWarning: Superfluous …Run Code Online (Sandbox Code Playgroud) pypdf==3.11.0与以前的版本一样,返回偶尔插入单个空格的文本字符串。但是 Windows 搜索和 Adobe 阅读器中的“查找”功能会发现纯正的文本,并且如果您尝试查找插入了额外空格的文本字符串,则找不到该文本。
这里记录一个代码示例:
from pypdf import PdfReader
reader = PdfReader(path)
for page in reader.pages:
text = page.extract_text()
lines = text.splitlines()
Run Code Online (Sandbox Code Playgroud)
Acrobat reader 显示的 PDF 页面包含以下行:
HERMES INVESTMENT MGMT US SMID Equity L Hgd Acc(英镑)
pypdf提取的文本reader为:
HERMES INVESTMEN T MGMT US SMID Equity L Hgd Acc (英镑)
我理解从 PDF 中提取连续文本的困难,但是,这就是我的观点,在 Acrobat Reader 中搜索“INVESTMENT MGMT”会找到该字符串,而搜索“INVESTMEN T MGMT”则找不到该字符串。并且,使用 Windows 资源管理器搜索工具得到相同的结果。
如果 Windows Search 可以读取没有多余空格的字符串,为什么 pypdf 不能?
我想用Python自动生成预订确认PDF文件.大多数内容将是静态的(即徽标,预订条款,电话号码),以及一些动态位(日期,成本等).
从用户方面来说,最简单的方法是从包含静态内容的PDF文件开始,然后使用python添加动态部分.这是一个简单的过程吗?
通过进行一些搜索,似乎我可以使用reportlab创建内容,并使用pyPdf将PDF合并在一起.这是最好的方法吗?还是有一种我还没有遇到的非常时髦的方式?
谢谢!
(刮互联网网站转换成PDF类的一部分)应该合并使用pypdf网页生成的PDF文件可以不明白这了这个功能.
这是方法代码:
def mergePdf(self,mainname,inputlist=0):
"""merging the pdf pages
getting an inputlist to merge or defaults to the class instance self.pdftomerge list"""
from pyPdf import PdfFileWriter, PdfFileReader
self._mergelist = inputlist or self.pdftomerge
self.pdfoutput = PdfFileWriter()
for name in self._mergelist:
print "merging %s into main pdf file: %s" % (name,mainname)
self._filestream = file(name,"rb")
self.pdfinput = PdfFileReader(self._filestream)
for p in self.pdfinput.pages:
self.pdfoutput.addPage(p)
self._filestream.close()
self._pdfstream = file(mainname,"wb")
self._pdfstream.open()
self.pdfoutput.write(self._pdfstream)
self._pdfstream.close()
Run Code Online (Sandbox Code Playgroud)
我一直收到这个错误:
File "c:\tmp\easy_install-iik9vj\pyPdf-1.13-py2.7-win32.egg.tmp\pyPdf\pdf.py", line 264, in write
self._sweepIndirectReferences(externalReferenceMap, self._root)
File "c:\tmp\easy_install-iik9vj\pyPdf-1.13-py2.7-win32.egg.tmp\pyPdf\pdf.py", line 339, in …Run Code Online (Sandbox Code Playgroud) 这是我正在使用的代码
import os
import decimal
from pyPdf import PdfFileReader
path = r"E:\python\Real Python\Real Python\Course materials\Chapter 8\Practice files"
inputFileName = os.path.join(path,"Pride and Prejudice.pdf")
inputFile = PdfFileReader(file(inputFileName,"rb"))
print "Number of pages:", inputFile.getNumPages()
print "Title:", inputFile.getDocumentInfo().title
Run Code Online (Sandbox Code Playgroud)
现在,当我运行此代码时,我收到一个错误:模块'对象'没有属性'Number'
当我运行上面的代码时,我获取了整个输出的屏幕截图,包含错误和所有内容.所以,请看看,让我知道什么是错的?

pypdf ×10
python ×9
pdf ×3
decimal ×1
django ×1
merge ×1
module ×1
pikepdf ×1
python-3.11 ×1
python-3.x ×1
reportlab ×1
whitespace ×1