标签: pypdf

为什么 PyPDF2.PdfFileWriter 忘记我对文档所做的更改?

我正在尝试修改 PDF 文件中的文本。文本可以位于Tj或类型的对象中BDC。我找到了正确的对象,如果我在更改它们后直接读取它们,它们会显示更新的值。

但如果我将完整的页面传递给 PdfFileWriter,更改就会丢失。我可能正在更新副本而不是真实的对象。我查了一下id(),结果不一样。有人知道如何解决这个问题吗?

from PyPDF2 import PdfFileReader, PdfFileWriter
from PyPDF2.generic import TextStringObject, NameObject, ContentStream
from PyPDF2.utils import b_

reader = PdfFileReader("some.pdf")
writer = PdfFileWriter()

for page_idx in range(0, 1):

    # Get the current page and it's contents
    page = reader.getPage(page_idx)

    content_object = page["/Contents"].getObject()
    content = ContentStream(content_object, reader)

    for operands, operator in content.operations:

        if operator == b_("BDC"):

            operands[1][NameObject("/Contents")] = TextStringObject("xyz")

        if operator == b_("Tj"):

            operands[0] = TextStringObject("xyz")

    writer.addPage(page)


# Write the stream
with …
Run Code Online (Sandbox Code Playgroud)

python pdf pdf-generation pypdf python-3.x

6
推荐指数
1
解决办法
3432
查看次数

如何使用python提取图像和图像BBox坐标?

我正在尝试使用图像的 BBox 坐标提取 PDF 中的图像。

我尝试使用 pdfrw 库,它正在识别图像对象,并且它有一个名为媒体框的属性,其中有一些坐标,我不确定这些是否是正确的 bbox 坐标,因为对于某些 pdf,它显示类似这样的内容 ['0', ' 0', '684', '864'] 但图像不是从页面开头开始的,所以我不认为它是 bbox

我尝试使用 pdfrw 使用以下代码

import pdfrw, os
from pdfrw import PdfReader, PdfWriter
from pdfrw.findobjs import page_per_xobj
outfn = 'extract.' + os.path.basename(path)
pages = list(page_per_xobj(PdfReader(path).pages, margin=0.5*72))
writer = PdfWriter(outfn)
writer.addpages(pages)
writer.write()
Run Code Online (Sandbox Code Playgroud)

如何获取图像及其 bbox 坐标?

示例 pdf :https://drive.google.com/open? id=1IVbj1b3JfmSv_BJvGUqYvAPVl3FwC2A-

python pypdf pdf-extraction pdfrw

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

如何在Python 3中删除pdf中的注释

我最初的目标是删除 PDF 页面上大量的白边。

然后我发现使用下面的代码缩放页面就可以达到这个目的,但是注释没有缩放。

import PyPDF2

# This works fine
with open('old.pdf', 'rb') as pdf_obj:
    pdf = PyPDF2.PdfFileReader(pdf_obj)
    out = PyPDF2.PdfFileWriter()
    for page in pdf.pages:
        page.scale(2, 2)
        out.addPage(page)
    with open('new.pdf', 'wb') as f: 
        out.write(f)

# This attempts to remove annotations
with open('old.pdf', 'rb') as pdf_obj:
    pdf = PyPDF2.PdfFileReader(pdf_obj)
    page = pdf.pages[2]
    print(page['/Annots'], '\n\n\n\n')
    page.Annots = []
    print(page['/Annots'])
Run Code Online (Sandbox Code Playgroud)

有没有办法去掉注释?或者任何可以帮助我摆脱白边的建议。

python pypdf python-3.x

6
推荐指数
1
解决办法
3770
查看次数

将边界框中的pdf文本直接提取到python中

我正在尝试在给定的边界矩形内提取 pdf 的文本。据我所知,有一些用于 pdf 抓取的工具,例如 pdfminer、pypdf 和 pdftotext。我已经尝试了所有 3 个方法,到目前为止,我只获得了 pdftotext 的代码,用于从给定的边界框中提取文本。该代码看起来像这样:

s = "pdftotext -x %d -y %d -w %d -h %d"
s = s%(<various inputs into my function>)
cmd = [s, pdf_path,
           text_out]
subprocess.call(cmd)
Run Code Online (Sandbox Code Playgroud)

但是,这会输出/写入一个文本文件。我想立即使用该文本,这意味着我不想打开一个文本文件来检索该边界框中的任何单词,因为我将为 10,000 多个文档执行此操作,并打开那么多文件可能是一种痛苦。我基本上是从 python 脚本运行命令行提示符,所以我认为实际上没有办法解决这个问题,但我不确定。由于 pdfminer 和 pypdf 是实际的 python 包,我可以获取它们的文本,但它们似乎没有任何方法在给定的像素限制内提取文本。

进一步说明 - 我希望专门在 python 中执行此操作,因为我有大量针对同一个总体项目的其他代码。

python pdf text-extraction pypdf pdfminer

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

使用 PDF 注释更改字体类型/大小

我正在将数据写入带有命名字段的 PDF,然后更改这些字段的属性以使其只读。这很棒,但我也希望能够操纵文本,更改字体大小,甚至字体本身。

根据PDF文档,/DA应该控制文本,所以我尝试设置;

NameObject('/DA'): TextStringObject("font: bold italic Courier 80pt;")

然而,这根本不会操纵文本。

下面是用于添加数据然后操作字段的代码,除了字体设置之外,它工作得很好。

我还尝试使用/DS标志来设置字体,这也没有影响。

        pdf_reader = PdfFileReader(
            open(full_certificate_path, "rb"), strict=False
        )
        pdf_writer = PdfFileWriter()

        data_dict = {
            'field1': event.title,
            'field2': user.name,
            'field3': strfdelta(
                completion_time,
                "{hours}:{minutes}:{seconds}"
            ),
        }

        pdf_writer.addPage(
            pdf_reader.getPage(0)
        )

        try:
            # Add data to a page
            page = pdf_writer.getPage(0)
            pdf_writer.updatePageFormFieldValues(page, data_dict)

            for j in range(0, len(page['/Annots'])):
                writer_annot = page['/Annots'][j].getObject()
                writer_annot.update({
                    # Q: Text justification
                    # 0: left
                    # 1: centre
                    # 2: right
                    NameObject("/Q"): NumberObject(1),
                    # Default: …
Run Code Online (Sandbox Code Playgroud)

python pypdf

6
推荐指数
1
解决办法
1909
查看次数

PyPDF2 错误“AES 算法需要 PyCryptodome”

我有数百个 PDF 文件,我需要设置密码。我尝试使用 pyPDF2 来执行此操作,但出现错误:“DependencyError:AES 算法需要 PyCryptodome”。

我尝试用谷歌搜索任何其他模块,例如 pikepdf,但我只找到了如何使用它来破解密码,而不是实际设置密码。

有什么想法如何处理吗?我在该行收到错误:“ input_pdf = PdfFileReader(in_file)

file = directory + '\\passwords.xlsx'  

df = pd.read_excel(file)
df['PDF'] = df.iloc[:,[0]] + '.pdf'

df = df.to_dict('records')
for i in df:
    filename = i['PDF']
    password = i['Password']

    with open(filename, "rb") as in_file:
        input_pdf = PdfFileReader(in_file)

    output_pdf = PdfFileWriter()
    output_pdf.appendPagesFromReader(input_pdf)
    output_pdf.encrypt(password)

    with open(filename, "wb") as out_file:
        output_pdf.write(out_file)
Run Code Online (Sandbox Code Playgroud)

python pypdf pikepdf

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

python和pyPdf - 如何从页面中提取文本,以便在行之间有空格

目前,如果我使用pyPdf和extractText()创建一个pdf页面的页面对象,那么会发生的是将这些行连接在一起.例如,如果页面的第1行显示"hello"而第2行显示"world",则从extractText()返回的结果文本是"helloworld"而不是"hello world".有谁知道如何解决这个问题,或者有解决方案的建议?我真的需要文本在行之间有空格,因为我正在对这个pdf文本进行文本挖掘,并且行之间没有空格导致它....

python formatting text pypdf

5
推荐指数
1
解决办法
4794
查看次数

根据大纲分割pdf

我想使用pyPdf基于轮廓分割pdf文件,其中轮廓中的每个目的地引用pdf中的不同页面.

示例大纲:

main       --> points to page 1
  sect1    --> points to page 1
  sect2    --> points to page 15
  sect3    --> points to page 22

pyPdf中很容易迭代文档的每个页面或文档大纲中的每个目标; 但是,我无法弄清楚如何获取目的地所指向的页码.

有人知道如何找到大纲中每个目的地的参考页码吗?

python pdf pypdf

5
推荐指数
1
解决办法
3270
查看次数

如何使用pyPdf合并两个横向pdf页面

我在使用pyPdf合并两个PDF文件时遇到问题.当我运行以下代码时,水印(page1)看起来很好,但page2已顺时针旋转90度.

有什么想法发生了什么?

出了什么问题的例子

from pyPdf import PdfFileWriter, PdfFileReader

# PDF1: A4 Landscape page created in photoshop using PdfCreator, 
input1 = PdfFileReader(file("base.pdf", "rb"))
page1 = input1.getPage(0)

# PDF2: A4 Landscape page, text only, created using Pisa (www.xhtml2pdf.com)
input2 = PdfFileReader(file("text.pdf", "rb"))
page2 = input2.getPage(0)

# Merge
page1.mergePage(page2)

# Output
output = PdfFileWriter()
output.addPage(page1)
outputStream = file("output.pdf", "wb")
output.write(outputStream)
outputStream.close()
Run Code Online (Sandbox Code Playgroud)

python pdf-generation landscape pypdf

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

使用python查找搜索字符串在pdf文档中的哪个页面

我可以使用哪些python包来找出特定"搜索字符串"所在的页面?

我查看了几个python pdf包但无法弄清楚应该使用哪一个. PyPDF似乎没有这个功能,而PDFMiner似乎对这样简单的任务来说过分了.有什么建议?

更精确:我有几个PDF文档,我想提取字符串"Begin"和字符串"End"之间的页面.

python pdf pypdf

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