解决PDF 转图片时丢文字的一种可能方式
作者:secsilm 发布时间:2022-06-12 18:29:38
问题
Python 中 PDF 转图片一般用的是 pdf2image。有时我们会发现 PDF 转出来的图片都是空白,或者缺失了一些字,具体表现就是一些应该有字的区域是空白。
由于某些原因我不能把出现问题的文件放上来,不过大致就是这个情况。
主要的代码如下:
images = pdf2image.convert_from_path('/path/to/pdf', output_folder='images/', fmt='jpg')
运行时可能会发现代码没有任何异常,但是结果不对。
分析和解决
其实 pdf2image 底层默认使用的是 pdftoppm 来转图片,我们可以直接使用其来测试有问题的 PDF,会发现输出了一些警告:
除 pdftoppm 外,pdf2image 在两种情况下会使用 pdftocairo 来转图片,具体是:
当要转成 tif/tiff 格式时
当 transparent=True(默认为 False)且要转成 png/tif/tiff 时
Missing language pack for 'Adobe-GB1' mapping
很明显是缺失了语言包。
而且字缺失,自然而然想到的是字体缺失,即系统中没有 PDF 中的字体。
我们需要找到对应的字体,然后安装上。
一般来说,Linux 系统中,直接复制相应的字体文件到 /usr/share/fonts/ 目录下即可,可以使用 fc-list :lang=zh-cn 来查看当前系统有哪些中文字体。
对于中文来说,Noto CJK 字体可以覆盖所有的字,可以尝试下载安装此字体,有些系统可能自带。
有了字体,你再试的时候可能会发现还是不行,因为你还需要另一个东西:poppler-data。
这个东西是干嘛用的?根据作者的描述:
This package consists of encoding files for use with poppler. The encoding files are optional and poppler will automatically read them if they are present. When installed, the encoding files enables poppler to correctly render CJK and Cyrrilic properly. While poppler is licensed under the GPL, these encoding files have different license, and thus distributed separately.
大致就是这个包里是一些编码文件,可以让 poppler 正确渲染 CJK 文字。
我们可以通过 apt 来安装:
sudo apt install poppler-data
然后再次尝试,应该就可以成功转成正常的图片了。
总结一下,你需要两个东西:
正确的字体文件
poppler-data
Reference
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://secsilm.blog.csdn.net/article/details/105414151
猜你喜欢
- 有时候我们的爬虫程序添加了代理,但是我们不知道程序是否获取到了ip,尤其是动态转发模式的,这时候就需要进行检测了,以下是一种代理是否伪装成功
- 如下所示:希望可以从对admin提交的密码加密,并验证电话号码均为数字。查看admin.pyfrom django.contrib impo
- 基于OpenCV2.4.8和 python 2.7实现简单的手势识别。以下为基本步骤 1.去除背景,提取手的轮廓2. RGB->YUV
- 0 写在前面josephus问题是数据结构教材中的一个常见实例,其问题可以描述为:设nnn个人围坐一圈,现在要求从第kkk个人开始报数,报到
- 你是不是在学习python的时候在使用虚拟机系统进行开发,来回切换很是不方便,那么今天给大家推荐一个pycharm强大的功能。接下来我们利用
- 某天在群内有同学问到,在python下我用input或者raw_input都得输入完后回车才能获取到输入的值,那如何实现任意键退出暂停等功能
- 在默认的情况下,MySQL搜索不区分大小写(但某些字符集始终区分大小写,如czech)。这意味着,如果你使用col_name LIKE
- 维护脚本一例,写得有点乱,只是作为一个实例,演示如何快速利用工具快速达到目的:应用到:shell与python数据交互、数据抓取,编码转换#
- 1. 背景 Scrapy 是一个通用的爬虫框架,但是不支持分布式,Scrapy-redis是为了更方便地实现Scrapy分布式爬取,而提供了
- 离群检测 与 新奇检测很多应用场景都需要能够确定样本是否属于与现有的分布,或者应该被视为不同的分布。离群检测(Outlier detecti
- 在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。但是,从前面Stude
- python用正则表达式提取中文Python re正则匹配中文,其实非常简单,把中文的unicode字符串转换成utf-8格式就可以了,然后
- 除了3天就会失效的临时素材外,开发者有时需要永久保存一些素材,届时就可以通过本接口新增永久素材。最近更新,永久图片素材新增后,将带有URL返
- TXT文本文件,WORD文档点击后弹出另存为对话框,然后保存下载,而不是在浏览器中打开的asp实现方法,使用了asp中的stream对象,同
- 最近帮朋友做了点东西,最后需要将结果在网页中展示,这就需要搭建个服务器,做几个网页把数据信息展示出来。网上找了一下,阿里腾讯都有租服务器的业
- 可以让我们将数据用表格的方式展示出来安装方式pip install PrettyTable测试是否安装成功使用方法与对比增加一条数据先简单的
- 本文实例讲述了使用coverage统计python web项目代码覆盖率的方法。分享给大家供大家参考,具体如下:在使用python+sele
- ctrl + r => 输入drivers回车 => etc/hosts , 用记事本打开它,在 127.0.0.1 local
- reflow是个神奇的东西,之前Realazy说到过这个reflow,我摘出其中的重点:在CSS规范中有一个渲染对象的概念,通常用一个盒子(
- 目录需求描述步骤分析和前置知识代码实现写在最后需求描述手上现有若干份财务分析报告的Word文档,如下:每一份Word文档中的内容如下:为了方