pdf解析框架有 pdfrenderer、pdfbox、icepdf等开源组件。
目前对比发现icepdf最为强大,能够解析绝大多数的pdf文件。
不过今天发现icepdf存在一些不足之处,有的pdf文件解析出现页面空白。
经过定位发现两处bug导致处理pdf页面空白。
http://jira.icesoft.org/browse/PDF-396
1.问题一
ContentParser.java中parseText方法存在异常
...
/**
* Tranformation matrix
* tm = |f1 f2 0|
* |f3 f4 0|
* |f5 f6 0|
*/
else if (nextToken.equals(PdfOps.Tm_TOKEN)) {
// collectTokenFrequency(PdfOps.Tm_TOKEN);
shift = 0;
previousAdvance = 0;
advance.setLocation(0, 0);
float f6 = ((Number) stack.pop()).floatValue();
float f5 = ((Number) stack.pop()).floatValue();
float f4 = ((Number) stack.pop()).floatValue();
float f3 = ((Number) stack.pop()).floatValue();
float f2 = ((Number) stack.pop()).floatValue();
float f1 = ((Number) stack.pop()).floatValue();
stack.pop的时候如果栈中没有数据了会报EmptyStackException,导致循环退出,整页显示为空白。
修改如下,
float f6 = stack.isEmpty()? 0 : ((Number) stack.pop()).floatValue();
float f5 = stack.isEmpty()? 0 : ((Number) stack.pop()).floatValue();
float f4 = stack.isEmpty()? 0 : ((Number) stack.pop()).floatValue();
float f3 = stack.isEmpty()? 0 : ((Number) stack.pop()).floatValue();
float f2 = stack.isEmpty()? 0 : ((Number) stack.pop()).floatValue();
float f1 = stack.isEmpty()? 0 : ((Number) stack.pop()).floatValue();
增加stack为空的判断,并且给默认值0.
问题2:ChunkingInputStream 解压缩存在未捕获异常,导致整页pdf文件显示空白。
在解压缩格式不正确的情况下,增加异常捕获能够最大程度的将内容显示出来。不至于整页空白。
修改如下:
ChunkingInputStream.java
protected int fillBufferFromInputStream(int offset, int length) throws IOException {
int read = 0;
while (read < length) {
int currRead = 0;
try{
currRead = in.read(buffer, offset + read, length - read);
if (currRead < 0 && read == 0)
return currRead;
if (currRead <= 0)
break;
read += currRead;
}
//增加异常捕获
catch (ZipException ze)
{
ze.printStackTrace();
return -1;
}
}
return read;
}
分享到:
相关推荐
这个项目让你可以去读取并解析一个PDF文件,并将其内部结构展示出来. PDF文件的格式标准文档可以从Adobe那儿获取到. 这个项目基于“PDF指南,第六版,Adobe便携文档格式1.7 2006年11月”. 它是一个恐怕有1310页的...
java解析PDF格式的文件demo。JAVA实现PDF解析,对PDF文件中的文本内容可输出仅供参考学习,不喜勿喷。
pdf.js 解析PDF文件DEMO 下载这个DEMO 轻松搞定在线解析PDF文件 支持翻页浏览 pdf.js 是一个技术原型主要用于在 HTML5 平台上展示 PDF 文档,无需任何本地技术支持 注意:只兼容支持HTML5的浏览器
使用icepdf将pdf文件转成图片 jar包 包括 icepdf-core,icepdf-extra,icepdf-pro-intl,icepdf-pro,icepdf-viewer
主要为大家详细介绍了Java使用icepdf将pdf文件按页转成图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
因为业务需要删除PDF空白页,自己研究了一下itextpdf和pdfbox,勉强实现了,需要的小伙伴欢迎下载
pdf 转图片 包含 icepdf-core icepdf-pro icepdf-pro-intl icepdf-viewer
icepdf6.1.1 pdf转图片 无水印,解决中文乱码问题,win linux均可
工程中提供了两个方法:创建PDF文件和解析PDF文件成txt,可直接运行!
icepdf pdfbox 技术将pdf转换为图片 多页PDF也可支持。内附有jar包 保证运行可用
NULL 博文链接:https://donald-draper.iteye.com/blog/2301345
通过C++解析PDF格式,直接运行的工程
一种解析PDF文件的源代码 mupdf-0.9-source.rar
icepdf-core,icepdf-viewer实现pdf转jpg。附带demo运行案例:icepdf和pdfbox的(pdfbox的jar自己下载,maven仓库有)
Java解析pdf文件用到的jar包 pdfbox-1.7.1.jar和fontbox-1.5.0.jar
Java解析PDF文件源代码(代码中有详细注释),测试过,能够正常编译和运行。
demo,可以参考改进,里边有rt.jar基础包,和icepdf架包
表单点击导出,如何将动态jsp中数据生成word,jacob根据word模板生成pdf文件,icepdf将pdf生成图片,icepdf去水印,pdfview查看pdf
NULL 博文链接:https://jkfd.iteye.com/blog/2065761