如何从原始分辨率和格式中提取pdf文档中的所有图像?(意思是提取tiff为tiff,jpeg为jpeg等,无需重新采样).布局是不重要的,我不在乎是源图像位于页面上.
我正在使用python 2.7,但如果需要可以使用3.x.
如果我有1000多个pdf文件需要合并成一个pdf,
input = PdfFileReader()
output = PdfFileWriter()
filename0000 ----- filename 1000
input = PdfFileReader(file(filename, "rb"))
pageCount = input.getNumPages()
for iPage in range(0, pageCount):
output.addPage(input.getPage(iPage))
outputStream = file("document-output.pdf", "wb")
output.write(outputStream)
outputStream.close()
Run Code Online (Sandbox Code Playgroud)
执行上面的代码时input = PdfFileReader(file(filename500+, "rb"))
,
错误消息:
IOError: [Errno 24] Too many open files:
我认为这是一个错误,如果没有,我该怎么办?
我有一些代码可以从pdf文件中读取.有没有办法在Windows上使用Pypdf,Python 2.6在pdf文件(而不是页面)中逐行读取?
以下是阅读pdf页面的代码:
import pyPdf
def getPDFContent(path):
content = ""
num_pages = 10
p = file(path, "rb")
pdf = pyPdf.PdfFileReader(p)
for i in range(0, num_pages):
content += pdf.getPage(i).extractText() + "\n"
content = " ".join(content.replace(u"\xa0", " ").strip().split())
return content
Run Code Online (Sandbox Code Playgroud)
更新:
通话代码是这样的:
f= open('test.txt','w')
pdfl = getPDFContent("test.pdf").encode("ascii", "ignore")
f.write(pdfl)
f.close()
Run Code Online (Sandbox Code Playgroud) 我一直在我们的项目中使用camelot,但是自两天以来我收到了以下错误消息。当尝试运行以下代码片段时:
import camelot
tables = camelot.read_pdf('C:\\Users\\user\\Downloads\\foo.pdf', pages='1')
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
DeprecationError: PdfFileReader is deprecated and was removed in PyPDF2 3.0.0. Use PdfReader instead.
Run Code Online (Sandbox Code Playgroud)
我检查了这个文件,它确实使用 pdfFileReader: c:\ProgramData\Anaconda3\lib\site-packages\camelot\handlers.py
我以为我可以指定PyPDF2的版本,但是当我安装camelot时它会自动安装(因为该库是camelot使用的)。您认为有什么解决方案可以手动指定PyPDF2的版本吗?
如何从Python中提取PDF文件中的文本?
我尝试了以下方法:
import sys
import pyPdf
def convertPdf2String(path):
content = ""
pdf = pyPdf.PdfFileReader(file(path, "rb"))
for i in range(0, pdf.getNumPages()):
content += pdf.getPage(i).extractText() + " \n"
content = " ".join(content.replace(u"\xa0", u" ").strip().split())
return content
f = open('a.txt','w+')
f.write(convertPdf2String(sys.argv[1]).encode("ascii","xmlcharrefreplace"))
f.close()
Run Code Online (Sandbox Code Playgroud)
但结果如下,而不是可读文本:
728;~˚!""˘˙˝˛˛˛˛〜˘˛˙"˘"〜#$˙˚%&˘˛〜'˙% ˝˛˙~~'#$%&('%$&))$ $ +%#, - .+ &&˝())˝) ˝+ ,, - ./ 012)(˝)*˝+, - 3˙/ 0245)6#57 + 82,55)6#57 +,+ 2,+ /!#!!&˘˘1"%˘20˛˛307%4!˘"6˛ ˝˝&/&4"9%6%4%4&5˘2)˘˘˛%:6(
目前我正在考虑使用pyPdf进行一些PDF合并,但有时输入的顺序不正确,所以我正在研究每页的页面编号,以确定它应该进入的顺序(例如,如果有人将一本书分成20页10页PDF,我想把它们重新组合在一起).
我有两个问题 - 1.)我知道有时页码存储在文档数据的某个地方,因为我看到在Adobe上呈现的PDF类似于[1243](10 of 150),但我读过这种文件到pyPDF我找不到任何表明页码的信息 - 这个存储在哪里?
2.)如果avenue#1不可用,我想我可以遍历给定页面上的对象以尝试查找页码 - 可能是它自己的对象中有一个数字.但是,我似乎无法找到任何明确的方法来确定对象的内容.如果我跑:
pdf.getPage(0).getContents()
Run Code Online (Sandbox Code Playgroud)
这通常会返回:
{'/Filter': '/FlateDecode'}
Run Code Online (Sandbox Code Playgroud)
或者它返回IndirectObject(num,num)对象的列表.我真的不知道如何处理其中任何一个,据我所知,它没有真正的文档.熟悉这种事情的人是否能指出我正确的方向?
有没有办法从pdf文档中提取图像(使用PyPDF2库)?也可以将一些图像替换为另一个图像(例如用PIL生成或从文件加载)?
我能够从pdf对象树中获取EncodedStreamObject并获得编码流(通过调用getData()方法),但看起来它只是原始内容,没有任何图像标题和其他元信息.
>>> import PyPDF2
>>> # sample.pdf contains png images
>>> reader = PyPDF2.PdfFileReader(open('sample.pdf', 'rb'))
>>> reader.resolvedObjects[0][9]
{'/BitsPerComponent': 8,
'/ColorSpace': ['/ICCBased', IndirectObject(20, 0)],
'/Filter': '/FlateDecode',
'/Height': 30,
'/Subtype': '/Image',
'/Type': '/XObject',
'/Width': 100}
>>>
>>> reader.resolvedObjects[0][9].__class__
PyPDF2.generic.EncodedStreamObject
>>>
>>> s = reader.resolvedObjects[0][9].getData()
>>> len(s), s[:10]
(9000, '\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc')
Run Code Online (Sandbox Code Playgroud)
我已经仔细研究过PyPDF2,ReportLab和PDFMiner解决方案,但没有找到类似我正在寻找的东西.
任何代码示例和链接都将非常有用.
我已经使用命令pip install pydf成功安装了pyPdf模块但是当我使用import命令使用模块时,我收到以下错误:
enC:\Anaconda3\lib\site-packages\pyPdf\__init__.py in <module>()
1 from pdf import PdfFileReader, PdfFileWriter
2 __all__ = ["pdf"]
ImportError: No module named 'pdf'
Run Code Online (Sandbox Code Playgroud)
我该怎么办?我也安装了pdf模块,但错误仍然没有消失.
我想知道是否有人有任何编程与.pdf文件工作的经验.我有一个.pdf文件,我需要将每个页面裁剪到一定的大小.
快速搜索谷歌后,我找到了python的pyPdf库,但我的实验失败了.当我更改页面对象上的cropBox和trimBox属性时,结果不是我预期的,并且看起来非常随机.
有没有人有这方面的经验?代码示例将非常受欢迎,最好是在python中.
作为一个新手......我在安装pyPDF2模块时遇到了困难.我已经下载了.我在哪里以及如何安装(setup.py)所以我可以在python解释器中使用模块?