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();
                }
            }
        }
时间: 2024-09-27 04:40:08

Ghostscript 将PDF文件转换成PNG图片 问题一二的相关文章

将pdf文件转换成jpg图片

平时办公中经常会用PDF格式传递一些文档资料,PDF格式虽然可以在很多平台中打开,但是也是需要安装对应的阅读工具,而有些时候文档信息是需要用图片的方式进行发送的,那么如果要把PDF文件转换成图片的该怎么操作呢? 处理PDF文件的格式转换一般都是用PDF转换工具来操作的,转换成图片也是可以的.用转换工具将PDF文件转换成的图片是jpg格式,图片的的大小和PDF文件的每个页面大小是等比例的. 打开转换工具后在PDF转换成其他文件选项中选择文件转图片.接着将要转换成图片的文件添加到转换器中,对于加密文

怎样将PDF文件转换成jpg图片的方法

有些情况下需要将文档内容转为图片进行保存.与PDF文件一样,jpg格式的图片是一种与平台无关的通用的图片格式.适合用来传输和存储.所以一般将PDF转换成的图片都是jpg格式的. 虽然一般截图也是jpg格式的,但是通过截图的方式来将PDF文档的页面一个个转换成图片是需要用更多的时间的,而且图片质量难以保证.页面较大的文档截取的图片可能会使图片内容不清晰. 通过pdf转换成jpg软件来将文件转换成图片也是一种较好的方法.转换的图片与原文档的页面大小相同,并且输出的图片是jpg格式的. 用转换工具转换

PDF转换技巧之怎样把PDF文件转换成图片?

PDF如何转换成图片:有很多小伙伴在工作中都会遇到一些文件转换的问题,每次遇到这些问题都会很头痛,不知道用什么方法可以更快的转换完成,尤其是遇到PDF要转换成图片这类的问题,这就需要一个比较专业的转换器可以节省很多时间. 那么,如何把PDF文件转换成图片?方法是什么?推荐使用迅捷PDF转换器,这是一款专业的PDF转换软件,功能齐全.操作简单.下面就一起来看看它是如何实现PDF转图片的吧! 第一步:打开下载安装好的PDF转换器进入首页,在首页的左边功能栏里可以看到PDF转换器的默认功能: 第二步:

简单快速有效地将PDF文件转换成Word

写论文的时候需要大段地引用知网下载下来的前人论文内容,但是数据库的论文下载下来大部分几乎都是pdf格式的,所以这成了让人很头疼的事情,后来经过方法的寻找,我发现了一款很有用的转换器软件,解决了我的一大烦恼. 这款软件名字叫做迅捷pdf转换器,是一款最快捷的PDF文件转换到Word文档工具,它可以帮助用户生成一个与原PDF文件一模一样的Word格式文档,而这个文档完好地保留了原有排版及所有元素.如文字.图片.链接.图表.表格.样式等都可以很好的保留在Word文档中,接下来用户就可以很方便的修改或重

教你用多种方法将pdf文件转换成jpg

我们在工作中经常会遇到pdf与word.excel.jpg等格式文件的转换,可是怎样才能把两种文件转换的完整有效呢?下面小编就pdf与jpg这两种格式来讲一下它们是如何转换的! pdf文件转换成jpg都有哪些方法? pdf文件转换成jpg有很多种方法,这里我们介绍最简单的三种,第一种是使用Adobe acrobat另存为jpg图片:另一种是在线将pdf转换成jpg; 还有一种方法可以使用第三方软件迅捷pdf转换器将pdf转换成jpg. 一.使用Adobe acrobat另存为jpg图片 用Ado

如何将一批pdf文件转换成jpg文件

从事设计行业,经常需要从网络上搜集一些图片素材,可是当我们下载的素材是pdf格式的时候,我们该怎么办呢?是不是需要将pdf格式转换成jpg或其它图片格式时才可以加以运用呢?今天小编与大家分享的技巧就是:如何将一批pdf文件转换成jpg文件.    工具/原料  pdf转jpg工具:http://pan.baidu.com/s/1o7ddEcU 方法/步骤  1.首先我们需要从网络上下载一个pdf转jpg工具,同时将它安装在自己的电脑中,并创建快捷方式. 2.双击快捷方式进入工具——选择“pdf图

怎么手动把pdf文件转换成word

怎么手动把pdf文件转换成word 刚上大学的时候以为毕业论文很好写,就相当于写作文一样.四年过去了,当我面对这5000字的 毕业论文时,感觉就不那么简单了.索性直接从网上搜索资料,再进行改写吧.方法倒是好的.可是谁料网上的资料大部分都是pdf格式的,不能进行行编辑.同 学告诉我只能将它转换成word格式再编辑.可是怎么将pdf转换成word文字? 方法一:用Office 2003中的Microsoft Office Document Imaging组件把PDF文件转换成word,也就是用wor

pdf转换成word转换器免费版是一款功能强大好用的pdf文件转换成word文件的软件

pdf转换成word转换器免费版是一款功能强大好用的pdf文件转换成word文件的软件,界面简单,功能稳定,支持批量转换,操作起来非常方便,支持多种流行文档格式之间转换.完美支持pdf文件转换成word文档,转换后可再次编辑,支持图文混合排版,支持表格转换,支持批量转换,操作简单.pdf转换成word转换器免费不限页数可以很好的转换原来pdf文档中的文字.图片.表格 .超链接.布局,使其转换成的word文档排版与原有文档一样.pdf转换成word转换器是一款小巧.方便且免费的pdf转Word工具

15个最好的PDF转word的在线转换器,将PDF文件转换成doc文件

PDF是一种文件格式,包含文本,图像,数据等,这是独立于操作系统的文件类型.它是一个开放的标准,压缩,另一方面DOC文件和矢量图形是由微软文字处理文件.该文件格式将纯文本格式转换为格式化文档.它支持几乎所有的操作系统. PDF和DOC转换期权具体地址的用户想从PDF数据的完美格式编辑Word文档更新文本和图像传输的转换需要. 有无数的工具和服务提供在线执行用户的转换,在这篇文章中,我们已经编制了一份清单15最好的PDF到DOC转换器将帮助您将您的PDF文件,以在各种不同的格式,如xls,RTF,