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空白页"中,可能包含了实现这一功能的源代码示例,可以作为参考学习。通过阅读和理解这些代码,你可以更好地了解这两个库的具体使用方式,以及如何在实际项目中实现删除PDF空白页的...
在这个主题中,我们将探讨如何使用ICEpdf来去除PDF文件中的水印,并解决中文乱码问题。这个过程涉及对ICEpdf库的深入理解和利用其提供的API来实现特定功能。 首先,ICEpdf的核心功能包括PDF文档的解析、渲染和编辑...
本篇将深入探讨如何使用C++来解析PDF文件。 首先,解析PDF文件涉及理解PDF的内部结构。PDF标准定义了一个复杂的对象模型,包括页面、文本、图像、图形和表单字段等元素。每个PDF文件都是由一系列字节流组成的,这些...
在PDF转图片的过程中,icepdf的核心组件icepdf-core-6.1.1.jar提供了PDF解析和渲染的核心功能。通过调用icepdf提供的API,开发者可以创建一个PDF渲染器,然后将每个页面渲染成位图,从而实现PDF到图片的转换。关键...
PDF文件解析是理解PDF文件结构、提取数据或进行编辑操作的关键步骤。在这里,我们将深入探讨如何使用文件流方式来处理PDF文件。 首先,我们需要了解PDF的基本结构。PDF文件由一系列的对象组成,包括页面、字体、...
Java作为一种强大的编程语言,提供了多种库和方法来处理PDF文件,包括创建和解析PDF。本篇将详细介绍如何在Java环境下创建PDF文件以及将PDF解析为TXT文本。 首先,我们来看如何使用Java创建PDF文件。通常,我们可以...
标题中的“JasperReport浏览器输出PDF为空白页”通常意味着在使用JasperReport生成PDF报表时,浏览器未能正确显示内容。这可能是由多种原因引起的,包括但不限于以下几点: 1. **XML解析错误**:`test.jrxml`文件是...
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文件
ICEPDF是一款开源的Java库,专门用于处理PDF文档。它提供了丰富的API,使得开发者能够方便地在Java应用程序中查看、渲染、打印以及编辑PDF文件。标题提到的"ICEPDF 架包及例子",意味着这个压缩包包含了ICEpdf库的源...
从给定的文件信息来看,虽然部分内容并未提供直接与PDF文件文本内容提取相关的技术细节,但结合标题和描述,我们可以推断出文章的核心是探讨如何从PDF文件中提取文本内容,这对于开发电子书等应用非常关键。...
SpirePDF是一款强大的.NET PDF组件,它提供了一系列API,使得开发者可以在C#、VB.NET、ASP.NET等.NET平台上创建、修改和处理PDF文件。它的主要功能包括: 1. 创建空白PDF文档,或者从现有文件、URL或流中加载PDF。 ...
2. **PDF修改**:PoDoFo 提供了API,使得开发人员能够修改PDF文档的内容。这包括添加或删除文本、图像,更改字体、颜色,甚至调整页面布局。此外,还可以更新文档的元数据,如作者、标题和创建日期。 3. **PDF创建*...