我正在使用 python ReportLab canvas 生成带有水印的覆盖文档,以将其合并到源 pdf 文档中(使用PyPDF2)。最近,我遇到了包含旋转页面的文档的问题(pdf 中的页面对象存在 /Rotate 键)。该文档在设备和打印机上看起来没问题。但结果(合并)文档包含针对源文档旋转的水印。
所以源页面的 pdf 结构如下:
6 0 obj
<</Length 45>>
stream
q
1 0 0 1 2 4 cm
799 0 0 603 0 0 cm
/x5 Do
Q
endstream
endobj
7 0 obj
<</Type/Page/Parent 1 0 R
/Resources << /XObject << /x5 5 0 R >> >>
/MediaBox [0 0 792 612]
/Rotate 270/Contents 6 0 R
>>
endobj
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,页面旋转了 270 度。
我使用类似的脚本来生成和合并水印和源页面:
6 0 obj
<</Length 45>>
stream …Run Code Online (Sandbox Code Playgroud) 在PyPDF2中,如何为pdf文件的每一页添加页脚?我必须做类似的事情吗
page5 = reader.pages[4]
page5.mediabox.right = page5.mediabox.right / 4
page5.mediabox.top = page5.mediabox.top / 4
writer.add_page(page5)
Run Code Online (Sandbox Code Playgroud)
或者有预定义的页脚功能吗?
我面临着向 PDF 添加注释的任务。具体来说,任务是在文件的开头添加一个便签框,并在便签框中添加几行文本。
我需要对大量 PDF 重复执行此操作,因此我希望在 Python 中以编程方式执行此操作。
我已经检查过这个 SOF 线程,但似乎它提出了一个不同的问题,因为它将文本添加到 PDF 中而不是在评论中。
PDF 支持文档版本。这意味着当前文档可以保持不变,我们只需添加信息即可更改文档的内容和呈现方式。该功能对于验证过去数字签名中文档的外观和完整性特别有用。
为了更好地理解我的意思,请查看图 #5 中的PDF 中的数字签名 - Adobe文档。
我已经看过很多来自 pypdf 和其他 python 库的文档和示例,它们将内容添加到 PDF 文件。但是,只要我看过pypdf 的所有示例,就会从一个文件中获取内容并将内容重建到另一个文件中。我们可以在不丢失或破坏最新版本的数字签名的情况下做到这一点吗?
您是否知道一种原始复制过去版本并重用过去版本的对象来构建新文档版本的方法?
或者有没有办法直接修改文档?我的意思是,加载一个用于读写的文档。
其他 pypdf / PyPDF2 示例可以找到:
正如您将看到的,它们都重建了从PdfReader(以前称为 PdfFileReader)读取 PDF 并使用PdfWriter(以前称为 PdfFileWriter)写入的 PDF。我的意思是,他们需要类似PdfStamper java 类的东西,带有一个可选的布尔附加参数,该参数将尊重以前的内容并增量更新现有的 PDF。
我有一个函数可以从 PDF 文件中获取页面,并使用(PIL Fork)PyPDF2将第一页转换为 png(或 jpg)Pillow
from PyPDF2 import PdfFileWriter, PdfFileReader
import os
from PIL import Image
import io
# Open PDF Source #
app_path = os.path.dirname(__file__)
src_pdf= PdfFileReader(open(os.path.join(app_path, "../../../uploads/%s" % filename), "rb"))
# Get the first page of the PDF #
dst_pdf = PdfFileWriter()
dst_pdf.addPage(src_pdf.getPage(0))
# Create BytesIO #
pdf_bytes = io.BytesIO()
dst_pdf.write(pdf_bytes)
pdf_bytes.seek(0)
file_name = "../../../uploads/%s_p%s.png" % (name, pagenum)
img = Image.open(pdf_bytes)
img.save(file_name, 'PNG')
pdf_bytes.flush()
Run Code Online (Sandbox Code Playgroud)
这会导致错误:
OSError:无法识别图像文件<_io.BytesIO对象位于0x0000023440F3A8E0>
我发现一些线程有类似的问题(PIL open() 方法不适用于 BytesIO),但我看不出我在这里错在哪里,因为我已经pdf_bytes.seek(0)添加了。 …
我正在创建一个 python 脚本来编辑 PDF 中的文本。
我有这个 Python 代码,它允许我将文本添加到 PDF 文件的特定位置。
import PyPDF2
import io
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
import sys
packet = io.BytesIO()
# create a new PDF with Reportlab
can = canvas.Canvas(packet, pagesize=letter)
# Insert code into specific position
can.drawString(300, 115, "Hello world")
can.save()
#move to the beginning of the StringIO buffer
packet.seek(0)
new_pdf = PyPDF2.PdfFileReader(packet)
# read your existing PDF
existing_pdf = PyPDF2.PdfFileReader(open("original.pdf", "rb"))
num_pages = existing_pdf.numPages
output = PyPDF2.PdfFileWriter()
# add the "watermark" …Run Code Online (Sandbox Code Playgroud) 我尝试在 Python 3 中使用 PyPDF2 模块,但无法显示“页面大小”属性。我想知道扫描为 PDF 文件之前纸张尺寸是多少。
像这样的东西:
import PyPDF2
pdf=PdfFileReader("sample.pdf","rb")
print(pdf.getNumPages())
Run Code Online (Sandbox Code Playgroud)
但我正在寻找另一个Python函数而不是例如getNumPages()...
下面的命令打印某种元数据,但不显示页面大小:
pdf_info=pdf.getDocumentInfo()
print(pdf_info)
Run Code Online (Sandbox Code Playgroud) 在python 3中,我有一个各种格式的图像列表(pdf、png、jpg、gif),我将它们全部合并到一个多页pdf中。
使用PyPDF2,可以合并 PDF 文件。但不支持 png、jpg 等。此处对此进行了很好的介绍:
合并 PDF 文件
使用img2pdf,可以将 png、jpg 等图像类型转换为 PDF 并进行合并。但是,它不支持输入 PDF 文件。此处:
从图像列表创建 PDF
因此,由于我可以将 PDF、PNG、JPG 作为输入,因此我习惯这样处理它:
from PyPDF2 import PdfFileMerger
import img2pdf
if not ext == 'pdf':
with open("output.pdf", "wb") as f:
f.write(img2pdf.convert(images))
else:
merger = PdfFileMerger()
for pdf in images:
merger.append(pdf)
merger.write("output.pdf")
Run Code Online (Sandbox Code Playgroud)
问题是:我是否需要这 2 个库来将一系列图像(包括 PDF)合并到一个 PDF 中?换句话说,是否有一个库可以将任何图像(包括 PDF)作为输入,并将它们全部合并为一个 PDF?
是否可以contents of footers and headers of a page在从中提取文本时从 pdf 文件中排除 。因为这些内容是最不重要的并且几乎是多余的。
注意:为了从 .pdf 文件中提取文本,我在 python 版本 = 3.7 上使用 PyPDF2 包。
如何在 PyPDF2 中排除页脚和页眉的内容。任何帮助表示赞赏。
代码片段如下:
import PyPDF2
def Read(startPage, endPage):
global text
text = []
cleanText = " "
pdfFileObj = open('C:\\Users\\Rocky\\Desktop\\req\\req\\0000 - gamma j.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
num_pages = pdfReader.numPages
print(num_pages)
while (startPage <= endPage):
pageObj = pdfReader.getPage(startPage)
text += pageObj.extractText()
startPage += 1
pdfFileObj.close()
for myWord in text:
if myWord != '\n':
cleanText += myWord …Run Code Online (Sandbox Code Playgroud) 我想通过 PyPDF2 将 pdf 文件转换为文本,但转换后的文本看起来与 PDF 文件不同。具体来说,PDF 中的一行被分解为文本中的多行,单词也可能被分解。附件是 PDF 和我通过以下代码获得的文本文件。有人能帮我解决这个问题吗?
from PyPDF2 import PdfFileReader
def extract_pdf_text(file_path=""):
reader = PdfFileReader(file_path)
text = ""
# Loop over all the pdf pages.
for page in reader.pages:
text = text + page.extractText()
return text
pdf_text = extract_pdf_text("PDF file path")
Run Code Online (Sandbox Code Playgroud)