微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将PDF转换为图像的省时方法

如何解决将PDF转换为图像的省时方法

上下文:

我有正在处理的 PDF 文件。 我正在使用 ocr 从这些文档中提取文本,为了能够做到这一点,我必须将我的 pdf 文件转换为图像。 我目前使用 convert_from_path 模块的 pdf2image 函数,但时间效率非常低(9 页 pdf 需要 9 分钟)。

问题:

我正在寻找一种方法来加速此过程或另一种将我的 PDF 文件转换为图像的方法

附加信息:

我知道函数中有一个 thread_count 参数,但经过多次尝试后,它似乎没有任何区别。

这是我正在使用的整个函数

def pdftoimg(fic,output_folder):
# Store all the pages of the PDF in a variable 
pages = convert_from_path(fic,dpi=500,output_folder=output_folder,thread_count=9,poppler_path=r'C:\Users\vincent\Documents\PDF\poppler-21.02.0\Library\bin') 

image_counter = 0

# Iterate through all the pages stored above 
for page in pages: 
    filename = "page_"+str(image_counter)+".jpg"
    page.save(output_folder+filename,'JPEG') 
    image_counter = image_counter + 1
    
for i in os.listdir(output_folder):
    if i.endswith('.ppm'):
        os.remove(output_folder+i)

Link 到 convert_from_path 引用。

解决方法

我使用另一个名为 fitz 的模块找到了该问题的答案,该模块是对 MuPDF 的 Python 绑定。

首先安装 PyMuPDF:

文档可以在 here 中找到,但对于 Windows 用户来说相当简单:

pip install PyMuPDF

然后导入 fitz 模块:

import fitz
print(fitz.__doc__)

>>>PyMuPDF 1.18.13: Python bindings for the MuPDF 1.18.0 library.
>>>Version date: 2021-05-05 06:32:22.
>>>Built for Python 3.7 on win32 (64-bit).

打开您的文件并将每个页面保存为图像:

get_pixmap() 方法接受允许您控制图像(变化、分辨率、颜色...)的不同参数,因此我建议您将文档 here 标记为红色。

def convert_pdf_to_image(fic):
    #open your file
    doc = fitz.open(fic)
    #iterate through the pages of the document and create a RGB image of the page
    for page in doc:
        pix = page.get_pixmap()
        pix.save("page-%i.png" % page.number)

希望这对其他人有帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?