我正在使用 python 裁剪 pdf 页面。一切正常,但如何更改页面大小(宽度)?
这是我的裁剪代码:
input = PdfFileReader(file('my.pdf', 'rb'))
p = input.getPage(1)
(w, h) = p.mediaBox.upperRight
p.mediaBox.upperRight = (w/4, h)
output.addPage(p)
Run Code Online (Sandbox Code Playgroud)
当我裁剪页面时,我也需要调整它们的大小,我该怎么做?
我正在使用的代码接收一个 .pdf 文件,并输出一个 .txt 文件。我的问题是,如何创建一个循环(可能是 for 循环),该循环在以“.pdf”结尾的文件夹中的所有文件上一遍又一遍地运行代码?此外,如何在每次循环运行时更改输出,以便每次都可以编写一个与输入文件同名的新文件(即 1_pet.pdf > 1_pet.txt、2_pet.pdf > 2_pet.pdf)。 txt等)
这是到目前为止的代码:
path="2_pet.pdf"
content = getPDFContent(path)
encoded = content.encode("utf-8")
text_file = open("Output.txt", "w")
text_file.write(encoded)
text_file.close()
Run Code Online (Sandbox Code Playgroud) 我正在尝试获取存储在 AWS 中的 S3 存储桶之一中的 pdf 文件,并获取其一些元数据,例如页数和文件大小。我成功从 S3 存储桶获取 pdf 文件,在调用 print(obj) 时获取此文件
s3.Object(bucket_name='somebucketname', key='somefilename.pdf')
Run Code Online (Sandbox Code Playgroud)
使用 PyPDF2.PdfFileReader() 时,我尝试使用原始文件、UTF-8 解码文件和 ISO-8859-1 解码文件。ISO-8859-1 解码文件是唯一不会引发异常的文件,但是当尝试将其作为参数传递到 PdfFileReader 时,我收到错误,并且此回溯
Traceback (most recent call last):
File "s3_test.py", line 18, in <module>
pdfFile = PdfFileReader(parse3)
File "/usr/local/lib/python3.6/site-packages/PyPDF2/pdf.py", line 1081, in __init__
fileobj = open(stream, 'rb')
ValueError: embedded null byte
Run Code Online (Sandbox Code Playgroud)
我是否使用了错误的编码类型来解码此 pdf 文件,或者是否像 pdfFileReader 的第一个参数必须是文件路径之类的其他内容?有没有一种更简单的方法来访问 S3 pdf 对象的元数据,而无需费力去实现?
Python脚本
import boto3
from PyPDF2 import PdfReader
s3 = boto3.resource('s3')
obj = s3.Object(bucket_name, itemname)
parse3 = obj.get()['Body'].read().decode("ISO-8859-1")
pdfFile = PdfReader(parse3)
Run Code Online (Sandbox Code Playgroud) 我一直在尝试使用 PyPDF2 和 Reprortlab 创建 pdf。我需要绘制一个包含大量文本的流畅段落。问题是段落的大小可能会有所不同。我想保持所有页面的段落左上角(段落开头)固定。问题是当我在固定位置(画布上的 x,y)绘制段落时,左下角保留在该位置(x,y)。我猜这是 ReportLab 的默认行为。是否有调整或解决方法可以从左上角而不是左下角开始段落,以便段落从同一位置开始,而不管段落的大小?
我正在尝试编写一个将pdf拆分为单独页面的函数。从这个SO答案。我复制了一个简单的函数,该函数将pdf拆分为单独的页面:
def splitPdf(file_):
pdf = PdfFileReader(file_)
pages = []
for i in range(pdf.getNumPages()):
output = PdfFileWriter()
output.addPage(pdf.getPage(i))
with open("document-page%s.pdf" % i, "wb") as outputStream:
output.write(outputStream)
return pages
Run Code Online (Sandbox Code Playgroud)
但是,这会将新的PDF写入文件,而不是将新PDF的列表作为文件变量返回。因此,我将行更改output.write(outputStream)为:
pages.append(outputStream)
Run Code Online (Sandbox Code Playgroud)
但是,当尝试在页面列表中写入元素时,出现了ValueError: I/O operation on closed file。
有人知道我如何将新文件添加到列表中并返回它们,而不是将它们写入文件吗?欢迎所有提示!
我有一个 PDF 文件(A4,纵向布局),我想将其中的每一页分成一半的高度。输出文档也应该是A4和纵向布局,但每页的下半部分需要为空白。
我看到了/sf/answers/1102038941/但不明白如何使用 mediaBox 添加空格。
我正在尝试将两个 PDF 文件中的页面合并为单个页面的 PDF。所以我尝试了下面使用 PyPDF2 的代码:
from PyPDF2 import PdfFileReader,PdfFileWriter
import sys
f = sys.argv[1]
k = sys.argv[2]
print f,k
file1 = PdfFileReader(file(f, "rb"))
file2 = PdfFileReader(file(k, "rb"))
output = PdfFileWriter()
page = file1.getPage(0)
page.mergePage(file2.getPage(0))
output.addPage(page)
outputStream = file("join.pdf", "wb")
output.write(outputStream)
outputStream.close()
Run Code Online (Sandbox Code Playgroud)
它生成一个文件和一个页面,其中包含文件 1 中第 1 页的内容,但我没有从文件 2 的第 1 页中找到任何数据。好像没有合并。
我尝试使用 Python 和 PyPDF2 包来阅读 PDF 文档。目标是读取pdf中的所有书签,并构建一个以书签页码为键、书签标题为值的字典。
除了这篇文章之外,互联网上没有太多关于如何实现它的支持。其中发布的代码不起作用,我不是 python 专家来纠正它。PyPDF2的阅读器对象有一个名为outlines的属性,它为您提供所有书签对象的列表,但书签没有页码,并且遍历该列表并不困难,因为书签之间没有父/子关系。
我在下面分享我的代码来阅读 pdf 文档并检查轮廓属性。
import PyPDF2
reader = PyPDF2.PdfFileReader('SomeDocument.pdf')
print(reader.numPages)
print(reader.outlines[1][1])
Run Code Online (Sandbox Code Playgroud) 我的脚本生成 PDF ( PyPDF2.pdf.PdfFileWriter object) 并将其存储在变量中。我需要在脚本中进一步处理它file-like object。但现在我必须先将其写入硬盘。然后我必须将其作为文件打开才能使用它。
为了防止这种不必要的写入/读取操作,我找到了许多解决方案 -StringIO等等BytesIO。但我找不到什么可以帮助我解决我的情况。
据我了解 - 我需要“转换”(或写入RAM)PyPDF2.pdf.PdfFileWriter object才能file-like object直接使用它。
或者还有另一种方法完全适合我的情况?
更新 - 这是代码示例
from pdfrw import PdfReader, PdfWriter, PageMerge
from PyPDF2 import PdfFileReader, PdfFileWriter
red_file = PdfFileReader(open("file_name.pdf", 'rb'))
large_pages_indexes = [1, 7, 9]
large = PdfFileWriter()
for i in large_pages_indexes:
p = red_file.getPage(i)
large.addPage(p)
# here final data have to be written (I would like to avoid that)
with open("virtual_file.pdf", 'wb') as tmp:
large.write(tmp) …Run Code Online (Sandbox Code Playgroud) 我下载了一个 pdf 文件,其中所有其他页面都是空白的,我想删除空白页。我可以在 pdf 工具(Adobe Acrobat、Preview.app、PDFPen 等)中手动执行此操作,但由于它有数百页,我希望执行更自动化的操作。有没有办法在 python 中做到这一点?