标签: pypdf

在Python中调整pdf页面大小

我正在使用 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)

当我裁剪页面时,我也需要调整它们的大小,我该怎么做?

python pdf pypdf

3
推荐指数
1
解决办法
2万
查看次数

如何一次将我的 python 代码应用于文件夹中的所有文件,以及如何为每个后续输出文件创建一个新名称?

我正在使用的代码接收一个 .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)

python parsing naming for-loop pypdf

3
推荐指数
1
解决办法
4230
查看次数

PyPDF2 和从 S3 解码 pdf 文件的问题

我正在尝试获取存储在 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)

python pdf amazon-s3 pypdf amazon-web-services

3
推荐指数
1
解决办法
7153
查看次数

如何在画布上从上到下绘制一个段落?

我一直在尝试使用 PyPDF2 和 Reprortlab 创建 pdf。我需要绘制一个包含大量文本的流畅段落。问题是段落的大小可能会有所不同。我想保持所有页面的段落左上角(段落开头)固定。问题是当我在固定位置(画布上的 x,y)绘制段落时,左下角保留在该位置(x,y)。我猜这是 ReportLab 的默认行为。是否有调整或解决方法可以从左上角而不是左下角开始段落,以便段落从同一位置开始,而不管段落的大小?

python reportlab pypdf

3
推荐指数
1
解决办法
5119
查看次数

如何在Python中“写入变量”而不是“写入文件”

我正在尝试编写一个将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

有人知道我如何将新文件添加到列表中并返回它们,而不是将它们写入文件吗?欢迎所有提示!

python pdf io outputstream pypdf

2
推荐指数
2
解决办法
3094
查看次数

PyPdf:将每页一分为二,用空格填充

我有一个 PDF 文件(A4,纵向布局),我想将其中的每一页分成一半的高度。输出文档也应该是A4和纵向布局,但每页的下半部分需要为空白。

我看到了/sf/answers/1102038941/但不明白如何使用 mediaBox 添加空格。

pdf pypdf

2
推荐指数
1
解决办法
1447
查看次数

PyPDF2 - 合并两个不同 PDF 文件的页面不起作用

我正在尝试将两个 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 pdf pdf-generation pypdf

2
推荐指数
1
解决办法
8529
查看次数

读取 PDF 文档中的所有书签,并使用书签的页码和标题创建字典

我尝试使用 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)

pypdf python-3.x

2
推荐指数
2
解决办法
1万
查看次数

将 PDF 转换/写入 RAM 作为类似文件的对象,以便进一步使用它

我的脚本生成 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)

python pypdf python-3.x

2
推荐指数
1
解决办法
3125
查看次数

如何使用 python 删除 pdf 的所有其他页面?

我下载了一个 pdf 文件,其中所有其他页面都是空白的,我想删除空白页。我可以在 pdf 工具(Adobe Acrobat、Preview.app、PDFPen 等)中手动执行此操作,但由于它有数百页,我希望执行更自动化的操作。有没有办法在 python 中做到这一点?

python pdf pypdf

2
推荐指数
1
解决办法
1132
查看次数