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;
}
分享到:
相关推荐
"Java使用icepdf将pdf文件按页转成图片" Java使用icepdf将pdf文件按页转成图片是指使用Java语言通过icepdf库将pdf文件转换为图片的过程。下面将详细介绍该过程中的知识点。 首先,需要了解icepdf库的基本概念。...
这个项目让你可以去读取并解析一个PDF文件,并将其内部结构展示出来. PDF文件的格式标准文档可以从Adobe那儿获取到. 这个项目基于“PDF指南,第六版,Adobe便携文档格式1.7 2006年11月”. 它是一个恐怕有1310页的...
java解析PDF格式的文件demo。JAVA实现PDF解析,对PDF文件中的文本内容可输出仅供参考学习,不喜勿喷。
在这个主题中,我们将探讨如何使用ICEpdf来去除PDF文件中的水印,并解决中文乱码问题。这个过程涉及对ICEpdf库的深入理解和利用其提供的API来实现特定功能。 首先,ICEpdf的核心功能包括PDF文档的解析、渲染和编辑...
pdf.js 解析PDF文件DEMO 下载这个DEMO 轻松搞定在线解析PDF文件 支持翻页浏览 pdf.js 是一个技术原型主要用于在 HTML5 平台上展示 PDF 文档,无需任何本地技术支持 注意:只兼容支持HTML5的浏览器
通过运行这个程序并根据需要调整代码,你可以轻松地将多页PDF转换为一系列的图片文件。 总结来说,PDFbox和IcePdf都是强大的PDF处理工具,能够满足不同场景下的需求。PDFbox更适合后台处理和高性能的转换任务,而...
本篇将深入探讨如何使用C++来解析PDF文件。 首先,解析PDF文件涉及理解PDF的内部结构。PDF标准定义了一个复杂的对象模型,包括页面、文本、图像、图形和表单字段等元素。每个PDF文件都是由一系列字节流组成的,这些...
在PDF转图片的过程中,icepdf的核心组件icepdf-core-6.1.1.jar提供了PDF解析和渲染的核心功能。通过调用icepdf提供的API,开发者可以创建一个PDF渲染器,然后将每个页面渲染成位图,从而实现PDF到图片的转换。关键...
1. **icepdf-core**: 这是Icepdf的核心模块,包含了处理PDF文档的基本功能,如解析PDF文档结构、渲染页面到图形上下文等。如果你只需要基本的PDF读取和转换功能,那么这个模块就足够了。 2. **icepdf-extra**: 提供...
PDF文件解析是理解PDF文件结构、提取数据或进行编辑操作的关键步骤。在这里,我们将深入探讨如何使用文件流方式来处理PDF文件。 首先,我们需要了解PDF的基本结构。PDF文件由一系列的对象组成,包括页面、字体、...
标题中的“JasperReport浏览器输出PDF为空白页”通常意味着在使用JasperReport生成PDF报表时,浏览器未能正确显示内容。这可能是由多种原因引起的,包括但不限于以下几点: 1. **XML解析错误**:`test.jrxml`文件是...
它能够精准识别 PDF 文档中的空白页,无论是完全空白无文字、仅有空白字符,还是无图像内容的页面,都能被快速检测出来,并在移除这些空白页后,将处理后的内容重新整合生成一份全新的无空白页 PDF 文件。...
PDF解析器的主要任务是读取PDF文件,识别并解析这些对象,然后根据对象的类型和内容进行操作。C++作为一种强大的编程语言,非常适合处理这种低级别的文件解析任务。 在C++中,解析PDF文件通常需要以下步骤: 1. **...
在.Net中使用PDFBox需要引用: 1.PDFBox-0.7.3.dlll (8 MB) 2.IKVM.GNU.Classpath (7 MB) 3.IKVM.Runtime.dll (360 kB) 4.FontBox-0.1.0-dev.dll 使用方法: ...private static string parseUsingPDFBox(string ...
标题中的“如何删去空白页PDF.docx”表明本文将介绍一种删除PDF文件中空白页的方法,而描述中提到的在线工具(https://www.ilovepdf.com/zh-cn?ref=toolsforyou)是一个实用的PDF处理平台,提供包括删除空白页在内的...
在SpringBoot应用中,我们可以通过Ajax或Fetch API向后端请求PDF文件内容,然后将返回的二进制数据传递给PDF.js进行解析和渲染。 实现过程如下: 1. 配置SpringBoot:在`pom.xml`中添加PDF.js库以及可能需要的其他...
在这个“java使用iText解析pdf并生成文本文件—eclipse工程”中,我们将探讨如何利用iText库在Java环境中,特别是在Eclipse集成开发环境中,解析PDF文档并将其内容导出为文本文件。 首先,我们需要理解PDF...
在混合移动应用开发中,我们经常需要处理各种类型的文件,其中PDF文件的解析与查看是一项常见需求。"利用mui框架和pdf.js插件实现pdf文件解析与查看"的主题旨在介绍如何在混合应用程序中集成这两个工具,以提供流畅...
unity UGUI插件,用于在Unity客户端浏览PDF文件 使用方式:Unity场景添加Canvas,并将预设"PDFViewer"拖动至Canvas下,在右侧Inspector面板设置好pdf文件位置,运行后即可浏览PDF文件
注意,`PDDocument.load()`方法需要PDF文件的路径,你需要替换`"path_to_your_pdf_file"`为实际的文件路径。另外,务必在完成操作后调用`document.close()`,以释放系统资源。 对于更复杂的PDF解析任务,如提取特定...