Ghostscript 将PDF文件转换成PNG图片 问题一二
由于项目需求,需要将原来的PDF文档转换成图片文件,在网上找了一些PDF转图片的方法;测试了几个后,都有这样或那样的问题
1、PDFLibNet.dll,这个类型最初还是挺好用的,能转图片和HTML,但现在好象已经不再更新了;而且转换时(部分文档)会出现文字丢失的问题
2、Adobe Acrobat X Pro,这个太大,还需要注册激活;且网上找到的代码在WEB方式下不太好用,需要建个服务或命令行程序来作为中间件调用
3、Ghostscript,这个看网上也有比较多的演示代码,不多,也比较适合我的要求,于是着重测试它了
但在网上的演示代码,需要用到PDFBOX,IKVM等DLL文件(PDFBOX好象也很长时间没更新了),但演示代码中却只需要用到一个得到PDF页数的操作;测试下来,感觉有点多余
Ghostscript,可以直接输出所有的PDF页面;如果需要输出指定页时,才需要用到PDF页数这个数据。
所以,只需要在服务器上安装Ghostscript就可以了;不过,在这里需要提出来的是,测试下的9.00版以上的感觉不是很好用,8.71版不错,挺好用的
9.00及以上版本,对于字体的处理好象还存在BUG或是我自己没配置好(通过修改:lib/cidfmap)文档
在测试中,字体不能正常加载处理;
Substituting font Times-Bold for TimesNewRomanPS-BoldMT.
Loading NimbusRomNo9L-Medi font from %rom%Resource/Font/NimbusRomNo9L-Medi... 2432860 1126845 2423648 1025245 3 done.
Loading a TT font from C:/WINDOWS/fonts/simsun.ttc to emulate a CID font SimSun ... Done.
Substituting font Times-Roman for TimesNewRomanPSMT.
Loading NimbusRomNo9L-Regu font from %rom%Resource/Font/NimbusRomNo9L-Regu... 3770200 2395423 2776248 1391721 3 done.
轩换文档时依然出现文字丢失的情况
后来换成8.71版,再进行测试:
修改:lib/cidfmap:
在% Substitutions节下方追加(下面的内容只是针对我在测试中不能正常转换的文档设置,修改后,文档转换成功):
/MicrosoftYaHei << /FileType /TrueType /SubfontID 0 /CSI [(GB1) 2] /Path (C:/WINDOWS/fonts/msyh.ttf) >> ;
/LucidaSansUnicode << /FileType /TrueType /SubfontID 0 /CSI [(GB1) 2] /Path (C:/WINDOWS/fonts/msyh.ttf) >> ;
运行结果:
Loading a TT font from C:/WINDOWS/fonts/msyh.ttf to emulate a CID font MicrosoftYaHei ... Done.
**** Warning: Pattern stream has unbalanced q/Q operators (too many q's)
Loading a TT font from C:/WINDOWS/fonts/msyh.ttf to emulate a CID font LucidaSansUnicode ... Done.
生成的图片文字正常,原来不能正常转换的PDF文档都能正确的转换成图片了,文字未出现丢失的情况
在实际的操作中,我去除了PDFBOX的DLL文档引用,因为项目中已经引用了itextsharp.dll,它是可以得到分页数的。
#region PdfToImages
/// <summary>
/// PDF 转 PNG,需要事先安装<c>GhostScript</c>
/// </summary>
/// <param name="pdfFile">PDF文档路径</param>
/// <param name="imgPath">图片存储文件夹路径</param>
public static void PdfToImages(string pdfFile, string imgPath)
{
//如果文档不存在
if (!FileHelper.FileExists(pdfFile))
{
return;
} int pageCount = Utils.GetPdfPageCount(pdfFile); //如果文档为空
if (pageCount == 0)
{
return;
} //转换成的图片文件
//生成文件名规则 %d 表示以数据进行标号
//%03d 表示001.png,002.png
string imgFile = string.Concat(imgPath, "%d.png"); string bin = System.Web.Configuration.WebConfigurationManager.AppSettings["GhostScriptBin"];
string exe = @"gswin32c.exe";
string arguments = System.Web.Configuration.WebConfigurationManager.AppSettings["GhostScriptArguments"]; using (System.Diagnostics.Process proc = new System.Diagnostics.Process())
{
try
{
proc.StartInfo.FileName = string.Concat(bin, exe);
proc.StartInfo.WorkingDirectory = bin;
proc.StartInfo.Arguments = string.Concat(arguments, " -sOutputFile=\"", imgFile, "\" \"", pdfFile, "\"");
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardInput = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
proc.ErrorDataReceived += new DataReceivedEventHandler(PdfToImages_ErrorDataReceived);//重定向错误输出
proc.OutputDataReceived += new DataReceivedEventHandler(PdfToImages_OutputDataReceived);//重定向输出
proc.Start();
proc.BeginErrorReadLine();//此行不加的话,可能有些PDF文档会转换失败
proc.BeginOutputReadLine();
//等待退出
proc.WaitForExit(int.MaxValue);
}
finally
{
proc.Close();
}
}
}
Ghostscript 将PDF文件转换成PNG图片 问题一二的更多相关文章
- 15个最好的PDF转word的在线转换器,将PDF文件转换成doc文件
PDF是一种文件格式,包含文本,图像,数据等,这是独立于操作系统的文件类型.它是一个开放的标准,压缩,另一方面DOC文件和矢量图形是由微软文字处理文件.该文件格式将纯文本格式转换为格式化文档.它支持几 ...
- 怎样将PDF文件转换成Excel表格
PDF文件怎样转换成Excel表格呢?因为很多的数据信息现在都是通过PDF文件进行传输的,所以很多时候,信息的接受者都需要将这些PDF文件所传输的数据信息转换成Excel表格来进行整理,但是我们应该怎 ...
- PDF文件转换成Excel表格的操作技巧
我们都知道2007以上版本的Office文档,是可以直接将文档转存为PDF格式文档的.那么反过来,PDF文档可以转换成其他格式的文档吗?这是大家都比较好奇的话题.如果可以以其他格式进行保存,就可以极大 ...
- mpp文件转换成jpg图片,可以用pdf文件做中转站
用project软件做了一个表,发现不能转换成图片,先把mpp文件转换成pdf文件,然后用PS打开pdf文件,存储为jpg格式就行了
- java 库 pdfbox 将 pdf 文件转换成高清图片方法
近期需要将 pdf 文件转成高清图片,使用库是 pdfbox.fontbox.可以使用 renderImageWithDPI 方法指定转换的清晰度,当然清晰度越高,转换需要的时间越长,转换出来的图片越 ...
- 结合Vim ghostscript 将源代码文件转换成语法高亮的pdf格式文档
step 1: 安装ghostscript (debian 环境, 其他环境自行google) sudo apt-get install ghostscript step 2: 用Vim生成ps文件 ...
- nodejs将PDF文件转换成txt文本,并利用python处理转换后的文本文件
目前公司Web服务端的开发是用Nodejs,所以开发功能的话首先使用Nodejs,这也是为什么不直接用python转换的原因. 由于node对文本的处理(提取所需信息)的能力不强,类似于npm上的包: ...
- 使用icepdf将pdf文件转换成照片(以及隐藏的一个bug)
首先引入依赖: <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox ...
- 如何用ABBYY把PDF如何转换成HTML
将PDF转换成HTML网页格式,是快速打造专业级网站的方法之一.当用户找到了非常详实的PDF资料,打算将之制作成为网页格式时,如果重新开发往往需要耗费大量的时间,可是又不知道怎么样才可以将PDF文件转 ...
随机推荐
- spring cloud 自定义ribbon客户端
一.自定义Ribbon客户端-[方式一]配置类 1.1.自定义负载规则 增加RibbonConfiguration.java配置类 public class RibbonConfiguration { ...
- ThreadLocal用法详解和原理
一.用法 ThreadLocal用于保存某个线程共享变量:对于同一个static ThreadLocal,不同线程只能从中get,set,remove自己的变量,而不会影响其他线程的变量. 1.Thr ...
- Selenium+PhantomJS使用时报错原因及解决方案
问题 今天在使用selenium+PhantomJS动态抓取网页时,出现如下报错信息: UserWarning: Selenium support for PhantomJS has been dep ...
- python 装饰器(1)
# 装饰器,对一个函数打扮 # def foo():# print("foo")# foo# foo()# def test1():# print('-----1-----')# ...
- UEditor黑白名单配置
在网上找了很多,都不对.自己尝试,代码如下: 在new UEditor之前加上: Object.assign(window.UEDITOR_CONFIG.whitList, { filling: [' ...
- WPF多屏最大化
如果计算机存在多个显示器,这时设置wpf窗口为最大化,窗口只能在主显示器中实现最大化,如果想要实现窗口拉伸至多屏,需要获取所有显示器分辨率之和.这时用到了System.Windows.SystemPa ...
- (原创)C# 压缩解压那些事儿
吐槽: 搜狗推广API的报告服务太坑爹了!!! 搜狗推广API的报告服务太坑爹了!!! 搜狗推广API的报告服务太坑爹了!!! 搜狗的太垃圾了,获取下来的压缩包使用正常方式无法解压!!没有专门的API ...
- 标准C语言实现基于TCP/IP协议的文件传输
TCP/IP编程实现远程文件传输在LUNIX中一般都采用套接字(socket)系统调用. 采用客户/服务器模式,其程序编写步骤如下: 1.Socket系统调用 为了进行网络I/O,服务器和客户机两 ...
- Codeforces 886E Maximum Element 组合数学 + dp
我们定义dp[ i ]表示长度为 i 的序列, 最后没有一个==k的时候返回的方案数, 也就是最后强制返回 i 的方案数. 我们能得到dp方程 dp[ i ] = sum(dp[ i - j - ...
- 51Nod1367 完美森林 贪心
原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1367.html 题目传送门 - 51Nod1367 题意 有一棵N个点的树,树中节点标号依次为0,1 ...