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库的基本概念。...
在这个主题中,我们将探讨如何使用ICEpdf来去除PDF文件中的水印,并解决中文乱码问题。这个过程涉及对ICEpdf库的深入理解和利用其提供的API来实现特定功能。 首先,ICEpdf的核心功能包括PDF文档的解析、渲染和编辑...
pdf.js 解析PDF文件DEMO 下载这个DEMO 轻松搞定在线解析PDF文件 支持翻页浏览 pdf.js 是一个技术原型主要用于在 HTML5 平台上展示 PDF 文档,无需任何本地技术支持 注意:只兼容支持HTML5的浏览器
首先,`icepdf-core`是`icepdf`的核心模块,提供了PDF解析和渲染的基础功能。它能够读取PDF文档,并将其内容解析成可操作的对象。这些对象可以是文本、图像或页面布局等,为PDF的进一步处理提供了基础。 `icepdf-...
本篇将深入探讨如何使用C++来解析PDF文件。 首先,解析PDF文件涉及理解PDF的内部结构。PDF标准定义了一个复杂的对象模型,包括页面、文本、图像、图形和表单字段等元素。每个PDF文件都是由一系列字节流组成的,这些...
PDF文件解析是理解PDF文件结构、提取数据或进行编辑操作的关键步骤。在这里,我们将深入探讨如何使用文件流方式来处理PDF文件。 首先,我们需要了解PDF的基本结构。PDF文件由一系列的对象组成,包括页面、字体、...
标题中的“JasperReport浏览器输出PDF为空白页”通常意味着在使用JasperReport生成PDF报表时,浏览器未能正确显示内容。这可能是由多种原因引起的,包括但不限于以下几点: 1. **XML解析错误**:`test.jrxml`文件是...
它能够精准识别 PDF 文档中的空白页,无论是完全空白无文字、仅有空白字符,还是无图像内容的页面,都能被快速检测出来,并在移除这些空白页后,将处理后的内容重新整合生成一份全新的无空白页 PDF 文件。...
PDF解析器的主要任务是读取PDF文件,识别并解析这些对象,然后根据对象的类型和内容进行操作。C++作为一种强大的编程语言,非常适合处理这种低级别的文件解析任务。 在C++中,解析PDF文件通常需要以下步骤: 1. **...
`mupdf`是一个开源的PDF阅读器项目,它的源代码可以帮助开发者理解PDF文件的解析过程,从而进行自定义开发或优化PDF相关应用。 `mupdf-0.9-source.rar`是一个包含`mupdf`项目0.9版本源代码的压缩包。解压后,我们...
在.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 ...
在SpringBoot应用中,我们可以通过Ajax或Fetch API向后端请求PDF文件内容,然后将返回的二进制数据传递给PDF.js进行解析和渲染。 实现过程如下: 1. 配置SpringBoot:在`pom.xml`中添加PDF.js库以及可能需要的其他...
在这个“java使用iText解析pdf并生成文本文件—eclipse工程”中,我们将探讨如何利用iText库在Java环境中,特别是在Eclipse集成开发环境中,解析PDF文档并将其内容导出为文本文件。 首先,我们需要理解PDF...
unity UGUI插件,用于在Unity客户端浏览PDF文件 使用方式:Unity场景添加Canvas,并将预设"PDFViewer"拖动至Canvas下,在右侧Inspector面板设置好pdf文件位置,运行后即可浏览PDF文件
在混合移动应用开发中,我们经常需要处理各种类型的文件,其中PDF文件的解析与查看是一项常见需求。"利用mui框架和pdf.js插件实现pdf文件解析与查看"的主题旨在介绍如何在混合应用程序中集成这两个工具,以提供流畅...
- **PDF解析**:ICEpdf使用了PDF规范来解析文档结构,包括页面、对象、资源等,使得开发者可以访问PDF文档的各个部分。 - **PDF渲染**:ICEpdf将PDF文档的内容转化为图像,可以在屏幕上显示或打印出来,保持与原始...
Apache PDFBOX的Java依赖包 可以解析PDF文件
注意,`PDDocument.load()`方法需要PDF文件的路径,你需要替换`"path_to_your_pdf_file"`为实际的文件路径。另外,务必在完成操作后调用`document.close()`,以释放系统资源。 对于更复杂的PDF解析任务,如提取特定...
从给定的文件信息来看,虽然部分内容并未提供直接与PDF文件文本内容提取相关的技术细节,但结合标题和描述,我们可以推断出文章的核心是探讨如何从PDF文件中提取文本内容,这对于开发电子书等应用非常关键。...
1. **PDF.js**:这是一个由Mozilla开发的开源库,专门用于在浏览器中解析和渲染PDF文件。它能够将PDF文档转换成一系列的SVG或者Canvas指令,从而实现在浏览器中显示PDF内容。 2. **数据流转换**:由于安全和性能...