解决PDF 转图片时丢文字的一种可能方式

问题

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • 如何使用Python进行PDF图片识别OCR

    使用场景 使用图片识别可以快速提取图片中的信息,方便高效. Python并不能直接对PDF进行识别,所以如果是识别PDF的话,需要先将PDF转化为图片,然后再进行识别. 必备工具 Python 可以安装3.7及以上版本 tesseract-ocr 下载地址: https://github.com/UB-Mannheim/tesseract/wiki 使用最新版本即可 需要用到的库 pip install pillow pip install opencv-python pip install f

  • 利用python将图片版PDF转文字版PDF

    图片版PDF无法复制,转化成文字版的PDF后使用更方便. 我们需要用到python3.6,pypdf2,ghostscript,PythonMagick,百度文字识别服务和pdfkit. 安装 安装python3.6 略 安装ghostscript https://ghostscript.com/download/gsdnld.html 安装wkhtmltopdf https://wkhtmltopdf.org/downloads.html pip安装PyPDF2,ghostscript,bai

  • Python提取PDF内容的方法(文本、图像、线条等)

    1.安装PDFminer3k 使用pip 命令安装 pip install pdfminer3k 2.编写测试 你可以在这里获得官方参考:PDFMiner 如果你不喜欢看英文的官方文档,这里的翻译也许对你有帮助:中文PDFMiner文档 下面的程序,我拓展了官方给出的例子,你可以通过这个例子统计出来你的pdf文件一共包含哪些内容,比如文本框,曲线,图片等 #!/usr/bin/python # -*- coding: utf-8 -*- __author__ = 'yooongchun' imp

  • 解决PDF 转图片时丢文字的一种可能方式

    问题 Python 中 PDF 转图片一般用的是 pdf2image.有时我们会发现 PDF 转出来的图片都是空白,或者缺失了一些字,具体表现就是一些应该有字的区域是空白. 由于某些原因我不能把出现问题的文件放上来,不过大致就是这个情况. 主要的代码如下: images = pdf2image.convert_from_path('/path/to/pdf', output_folder='images/', fmt='jpg') 运行时可能会发现代码没有任何异常,但是结果不对. 分析和解决 其

  • android实现图片闪烁动画效果的两种实现方式(实用性高)

    大家在使用APP的时候,有的APP在点击语音搜索界面后,会出现一个小话筒,小话筒会类似雷达似得在闪烁,表示正在倾听你说话的内容(这个大家可以参照微软的必应APP),那么问题来了,这种动画效果是如何实现的呢?其实实现这种动画效果有很多种方法,最常见的是两种:第一种就是插入n张图片进行切换已达到如此目的,第二种就是通过改变一张图片的透明度来达到闪烁的效果.下面就分别讲一下通过这两种方法如何实现. 第一种:通过n张图片之间切换实现动画效果 这种方法的原理很简单,利用handler的延时机制在子线程中完

  • Android的ImageButton当显示Drawable图片时就不显示文字

    很多人对 Android提供的ImageButton有个疑问,当显示Drawable图片时就不会再显示文字了,其实解决的方法有三种: 第一种:就是图片中就写入文字,但是这样解决会增加程序体积,同时硬编码方式会影响多国语言的发布. 第二种:解决方法很简单,通过分析可以看到ImageButton的 layout,我们可以直接直接继承,添加一个TextView,对齐方式为右侧即可实现ImageButton支持文字右侧显示. 第三种:更简洁效率的方法:使用Button ,然后设定Button 的 and

  • 解决html-jquery/js引用外部图片时遇到看不了或出现403的问题

    解决方法如下所示: <script type="text/javascript"> function showImg(url) { var frameid = 'frameimg' + Math.random(); window.img = '<img id="img" style="width: 100%;height: auto" src=\'' + url + '?' + Math.random() + '\' />

  • js实现鼠标悬停图片上时滚动文字说明的方法

    本文实例讲述了js实现鼠标悬停图片上时滚动文字说明的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: <html> <title>js实现鼠标悬停图片上时的滚动文字说明</title> <body> <SCRIPT LANGUAGE="JavaScript"> <!-- Begin function showtip2(current,e,text){   if (document.all&&a

  • .net生成缩略图及水印图片时出现GDI+中发生一般性错误解决方法

    复制代码 代码如下: System.Drawing.Image OldImage = null;  oldImage = System.Drawing.Image.FromFile(ImageUrl); 使用该方法读取图片时.导致图片文件被死锁无法释放资源,导置重写资源时出现一般性错误.   解决方法将代码改成以下代码 复制代码 代码如下: Bitmap oImage = new Bitmap(ImageUrl);//从图片文件中读取图片流 Bitmap OldImage = new Bitma

  • php实现图片上传时添加文字和图片水印技巧

    本文实现的功能特别适用于一些商城和图片站中,分享了图片在上传时添加文字和图片水印的技巧,供大家参考,具体内容如下 1. water.class.php <?php header('Content-Type:text/html;charset=utf-8'); /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose

  • 解决betterScroll在vue中存在图片时,出现拉不动的问题

    1.先写一个图片加载的方法 class ImgLoadClass { static preloadImages = (arr) => { //已经加载完的图片数量 let loadeImage = 0 //存放图片的数组 let newImages = [] //处理存入字符串,取得src部分 //let arr = str.match(/src="(.+)"\s{1}/g) //返回一个promise对像 return new Promise((resolve,reject)=

  • 快速解决mysql导数据时,格式不对、导入慢、丢数据的问题

    如果希望一劳永逸的解决慢的问题,不妨把你的mysql升级到mysql8.0吧,mysql8.0默认的字符集已经从latin1改为utf8mb4,因此现在UTF8的速度要快得多,在特定查询时速度提高了1800%! 但是如果时间等不及,就先用下面的办法快速解决一下. 问题一:格式不对(常出现时间格式不对的情况): 方法1:将excel文件另存为csv,再导入数据库: 方法2:导入的第一步时,默认编码方式是65001(UTF-8),可以尝试选择[10008 (MAC - Simplified Chin

  • Python实现文字pdf转换图片pdf效果

    目录 前言 思路 代码展示 前言 为什么会做这个? 因为我们把word转化为pdf,wps默认转化为文字pdf,而图片pdf要会员. 网上确实也有网站可以实现免费的,但是未必安全. 思路 我看了网上的很多代码,都是先把文字pdf先转化为图片,然后再组装成pdf文档.我的思路也是这样的. 但是我和他们很大的不一样就是,我不需要先把图片保存起来再提取,而我只需要把图片的信息先存起来,再输出pdf. 代码展示 先安装依赖 pip install PyMuPDF 输入文件列表 import os imp

随机推荐