gpt4 book ai didi

python - 用于间接对象提取的 pyPdf

转载 作者:太空狗 更新时间:2023-10-29 18:27:07 27 4
gpt4 key购买 nike

按照这个例子,我可以将所有元素列成一个pdf文件

import pyPdf
pdf = pyPdf.PdfFileReader(open("pdffile.pdf"))
list(pdf.pages) # Process all the objects.
print pdf.resolvedObjects

现在,我需要从 pdf 文件中提取一个非标准对象。

我的对象是一个名为 MYOBJECT 的对象,它是一个字符串。

我关心的python脚本打印的一 block 是:

{'/MYOBJECT': IndirectObject(584, 0)}

pdf文件是这样的:

558 0 obj
<</Contents 583 0 R/CropBox[0 0 595.22 842]/MediaBox[0 0 595.22 842]/Parent 29 0 R/Resources
<</ColorSpace <</CS0 563 0 R>>
/ExtGState <</GS0 568 0 R>>
/Font<</TT0 559 0 R/TT1 560 0 R/TT2 561 0 R/TT3 562 0 R>>
/ProcSet[/PDF/Text/ImageC]
/Properties<</MC0<</MYOBJECT 584 0 R>>/MC1<</SubKey 582 0 R>> >>
/XObject<</Im0 578 0 R>>>>
/Rotate 0/StructParents 0/Type/Page>>
endobj
...
...
...
584 0 obj
<</Length 8>>stream

1_22_4_1 --->>>> this is the string I need to extract from the object

endstream
endobj

如何遵循 584 值来引用我的字符串(当然在 pyPdf 下)?

最佳答案

pdf.pages 中的每个元素都是一个字典,因此假设它在第 1 页,pdf.pages[0]['/MYOBJECT'] 应该是该元素你要。

您可以尝试单独打印它,或者在 python 提示符下使用 helpdir 戳它以获取有关如何获取所需字符串的更多信息

编辑:

收到 pdf 副本后,我在 pdf.resolvedObjects[0][558]['/Resources']['/Properties']['/MC0']['/MYOBJECT '] 并且可以通过 getData() 检索值

下面的函数提供了一种更通用的方法来解决这个问题,通过递归查找有问题的键

import types
import pyPdf
pdf = pyPdf.PdfFileReader(open('file.pdf'))
pages = list(pdf.pages)

def findInDict(needle,haystack):
for key in haystack.keys():
try:
value = haystack[key]
except:
continue
if key == needle:
return value
if type(value) == types.DictType or isinstance(value,pyPdf.generic.DictionaryObject):
x = findInDict(needle,value)
if x is not None:
return x

answer = findInDict('/MYOBJECT',pdf.resolvedObjects).getData()

关于python - 用于间接对象提取的 pyPdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/436474/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com