`
qqdwll
  • 浏览: 131233 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

介绍几款PDF转图片的开源工具

阅读更多
    最近项目中有个需求需要把PDF转成一张图。经过调查,有三款比较流行的Java开源软件有这个功能。但在使用过程中, 它们的区别还是很大的。 下面对这三款软件Pdf-renderer, PDFBox 和JPedal做一个简单的介绍。

    首先, 这三个工具的定位是不同的。
    PDF-Renderer是早日Sun公布的一个开源项目, 它主要目的是方便用户展示PDF文档。 通过解析PDF文档, 使用户能够在自己的应用中查看, 预览,绘制PNG和合并到3D的场景中。 
    PDFBox是Java实现的PDF文档协作类库,提供PDF文档的创建、处理以及文档内容提取功能。 它还包含比较多的命令方式方便用户处理PDF。 它的强大功能是处理解析PDF文档。而且业界使用是比较广泛和稳定的。
    JPedal是IDRsolutions公司的一个产品。 而这个产品在PDF解析和PDF展示中都有着比较专业的表现。JPedal只开源其中的一小部分功能。 其中PDF转图片的功能是在LGPL下面的。

    从上面的定位来看, PDF-Renderer应该是比较吻合我们的要求的。下面分别从图片质量, 效率方面来简单的做个比较。
    下面是三款工具从PDF中转成的图片:


                                            PDF-renderer
   


                                                  PDFbox



                                                Jpedal


从图片质量上来看, 除了PDBbox有条线没有成功画出来后, 基本上差不多(当然, 在像素上PDFbox是最高的)。 但他们之间的转化效率还是差别很大的。 在转化效率上, 经过测试表现不如意的是PDFBox,其次是Jpedal. 最好的是PDF_renderer. 在我的测试中PDF-renderer的转化效率大约是Jpedal的两三倍。 而Jpedal的转化效率大约是PDFbox的3倍多。

但是, 经过一定量文档的测试, 发现很多PDF文档是不能被PDF-renderer处理的。 一个主要原因是PDF-renderer的字体不全。 而PDFbox有自己的字体包, 在不能转化时, 会转化到默认字体处理。目前测试中, 还没碰到PDFbox和Jpedal不能处理的文档。 由于PDFbox有时候, 不能正确的扑捉的表格线, 所以我们这次的项目中选择使用Jpedal. 除了Jpedal是家商业公司的产品外, 似乎没有不用的理由。

      在项目使用过程中, 由于我们使用多线程批量转化。 出现过内存溢出的问题。 特别是使用PDFbox时候, 它需要的内存会更多。这里顺便简单谈下自己是怎样追踪解决内存溢出的问题。也许大家有更好的办法, 热烈欢迎大家给我意见。

      首先, 可能大家自然的会想到利用jvisualvm,装个插件就可以动态的观察内存使用情况。 甚至随时可以把线程堆栈,CPU和内存快照弄出来。但如果是在大的应用系统中, 内存本来就很吃紧,开个 jvisualvm基本上就死在那里不动了。 这里想到的就是利用gc log 和内存溢出后的堆栈信息来处理。
      在JVM启动中,加入下面的配置参数
-verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:D:/java/gc/gc.log -XX:+HeapDumpOnOutOfMemoryError

打开gc的详细log并写入到一个单独文件中。 其中HeapDumpOnOutOfMemoryError的配置, 会在内存溢出时候写一个java_pidXXXX.hprof的文件到jvm启动的第地方。 利用Eclipse Memory Analysis插件,打开这个文件后, 我们可以获得到内存溢出时候的内存堆栈信息。 其中有个Leak Suspects 功能, 把认为最有可能导致内存溢出的objece分析出来。如下图:


从图中可以发现, 有两个比较可疑的地方。 第二个正是我们转图片用的。 然后我们就可以去改进我们的代码。

上面我们还提到过gc日志文件。 通过分析gc日志, 我们大概可以了解到JVM堆内存使用情况。 这里介绍一个taobao人开发的查看gc日志的工具。 很小很好用。http://code.google.com/p/gclogviewer/ 现在的版本只能画图, 下个版本除了画图的性能提高外,还会增加调优的建议。下面是我改动代码前后的两个gc图。


从这个图中, 可以看出内存一直在涨, 直至崩溃。


这是改动代码后的一个图:

这个图, 内存趋于稳定了。 但转化过程中, 一直处于Full GC. 应用暂停很严重。 幸好这是在后台的一个数据订正程序。性能优化还有很多可以做。
  • 大小: 304 KB
  • 大小: 169.9 KB
  • 大小: 222.4 KB
  • 大小: 31.1 KB
  • 大小: 66.2 KB
  • 大小: 69.3 KB
0
3
分享到:
评论
2 楼 jinxiongyi 2012-05-10  
你好,jpedal  pdf转换图片的 画质,怎么提高。。我转完发现不够清晰呀
1 楼 qqdwll 2011-09-21  
转图片消耗的内存还是不小。 有时间得找找有没有更好的办法, 把内存降下来。 否则多开几个线程。 很危险。

相关推荐

    pdf转word工具(本人见过的最好用的pdf2word工具)

    pdf转word工具(本人见过的最好用的pdf2word工具),图片什么的都可以转,并且转的很好!

    图片转PDF工具源码.rar

    本源码是一个采用winform进行开发的图片转PDF的工具源码,欢迎下载。菜单功能:1、选择需要转换的图片路径2、选择转换之后目的地的路径3、点击转换即可注意事项:开发环境为Visual Studio 2010,使用.net 2.0开发。

    Java中Excel转图片工具包(纯java)

    有时候我们客户需求需要将Excel文件转成图片推送给客户,由于Excel貌似不能直接转成图片,该工具包实现思路为先将Excel转成pdf,再由PDF转成图片。内附效果图,jar包,代码

    图片转PDF的好工具FreePic2Pdf

    软件基于开源代码实现,运行时不需要任何第三方软件或控件的支持。当然如果要浏览制作出来的PDF文件,您的机器上必须安装Adobe PDF Reader等PDF阅读软件。  总之, 在缺省情况下,FreePic2Pdf考虑的优先顺序为:...

    OFD转换PDF、IMG、SVG、HTML工具JAR包

    PDF转换: 通过对OFD的文档进行解析,使用 Apache Pdfbox生成并转换OFD中的元素为PDF内的元素实现PDF的转换。 图片转换: 通过对OFD的文档进行解析,采用java.awt绘制图片,支持转换为PNG、JPEG图片格式。 SVG矢量...

    图片合并转换为PDF文件

    由于工作中有同事需要把多张图片合并为一个PDF文件,在网上下载的软件或者要收费或者有病毒,因此空闲时间用C#写了一个小工具合并图片为PDF文件。 采用比较便于普通用户开箱即用的.NET 2.0框架(windows7自带),...

    java操作wordpdf图片生成图片水印

    大哥 还是大姐不要再删了 我要崩溃了 我上传的资源就是有关于javaja操作wordpdf图片生成图片水印的 一些相关资料而已

    Aspose, word、excel、PPT 转PDF文件jar包加工具类

    实现word、excel、PPT 转PDF文件功能。去插件水印,添加word、excel、pdf 文字与图片水印功能。执行转化方法前会分别先执行loadLicense()、getLicenseExcel()、getLicensePpt() 加载license.xml文件,不会出现插件...

    Java开源工具iText生成PDF简单实例

    主要介绍了Java开源工具iText生成PDF简单实例,本文给出了3段代码实例,讲解创建一个简单PDF文件,在PDF中添加表格以及在PDF中添加图片,需要的朋友可以参考下

    开源、免费 PDF 补丁丁 v1.0.0.4084 多功能PDF工具箱 便携版【0积分】

    制作PDF文件:合并已有PDF文件或图片,生成新的PDF文件。合并后的PDF文档带有原文档的书签,还可挂上新书签(或根据文件名生成),新书签文本和样式可自定义。 拆分或合并PDF文件,并保留原文件的书签或挂上新的书签...

    PDF压缩c#版本

    基于Spire.Pdf,用于pdf中图片压缩,运行要求:X64系统,12G以上内存

    使用wkhtmltox将HTML富文本生成Pdf(wkhtmlpdf)和图片SpringBoot代码项目示例

    1、此Java项目利用开源工具包wkhtmltopdf及SpringBoot框架将富文本转换为PDF和Image实战示例。 2、有丰富的示例文件,包括将url转image/pdf,将html转image/pdf。 3、提供有Postman接口配置文件,助您快速掌握并高效...

    Java实现HTML页面转PDF解决方案

    而目前开源的组件中,Itext的确是一个First Choice,如果各位单纯是做把图片转成PDF或者自己写了Velocity或者FreeMarker模板生成了HTML是非常推荐直接用Itext来进行的。而如果,大家像我这样已经有前人写好了HTML...

    PDF在线预览,类似百度文库

    1、先下载PDF2SWF开源软件(可以百度搜索下载),安装完成后有用到的所有工具。 2、利用pdf2swf.exe将PDF转换为swf文件,再将swf文件合并分页。 3、PDF是中文的还需要下载中文语言包 附件中只是C#代码实现PDF转SWF的...

    PDG文件批量转换PDF

    因为这样会比较方便你管理,要是你突然想把图片和PDG文件分开存放时你还要再来一遍PDG转图片多麻烦啊! 第3步的参数设置我没有研究过 有兴趣的朋友可以自己试一下 我在这里采取默认的设置。 第4步就是大胆地点“4...

    Pdf2Img.exe

    Pdf2Img 版本:1.0.0 欢迎使用Pdf转图片工具 功能描述:查找当前程序所在目录下所有Pdf文件并转换成同名图片文件夹,本工具暂不开源,可免费使用,安全无病毒,请不要用于商 业用途

    PDFBinder-v1.2绿色汉化版(PDF合并工具).rar

    PDFBinder 是一个非常简易的开源PDF合并软件,使用简便,只有合并PDF文件这一种功能。,可以很容易的将多个 PDF 合并为单一 PDF,支持排序。

    云展网PDF合并工具 v1.1.0.zip

    云展网PDF合并工具是一款功能强大、免费实用的pdf合并软件。软件可以帮助用户对PDF文件进行合并,并能完整输出的文件不带任何水印。软件界面美观简洁、简单全面、实用方便,无需培训,即可快速上手,轻轻松松完成...

    C# WinForm打开PDF文件并在窗体中显示

    1.添加引用 工具箱—右键—选择项–COM组件–Adobe PDF Reader 2.使用方法 代码如下: ...除了这种方法,网上还有一些开源的项目,可以直接打开PDF文件,大家也可以参考下 http://www.codeproject.

    天若OCR开源版V5.0.0.zip

    一款功能强大的开源图文识别工具支持1、图片识别 JPG、BMP、PNG、TIF等格式图片识别为TXT;高效的识别各类复杂字体.识别率高达90%! 2、PDF识别 支持普通pdf文件,PDF扫描件、加密的PDF文件进行扫描识别....

Global site tag (gtag.js) - Google Analytics