`
wuwen_java
  • 浏览: 4450 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

icepdf 解析pdf文件空白页bug修改。

阅读更多
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文件按页转成图片是指使用Java语言通过icepdf库将pdf文件转换为图片的过程。下面将详细介绍该过程中的知识点。 首先,需要了解icepdf库的基本概念。...

    java解析PDF文件

    java解析PDF格式的文件demo。JAVA实现PDF解析,对PDF文件中的文本内容可输出仅供参考学习,不喜勿喷。

    JAVA删除PDF空白页

    在提供的压缩包文件"java删除PDF空白页"中,可能包含了实现这一功能的源代码示例,可以作为参考学习。通过阅读和理解这些代码,你可以更好地了解这两个库的具体使用方式,以及如何在实际项目中实现删除PDF空白页的...

    icepdf6.1.1 pdf转图片 无水印,解决中文乱码问题,win linux均可

    在PDF转图片的过程中,icepdf的核心组件icepdf-core-6.1.1.jar提供了PDF解析和渲染的核心功能。通过调用icepdf提供的API,开发者可以创建一个PDF渲染器,然后将每个页面渲染成位图,从而实现PDF到图片的转换。关键...

    JasperReport浏览器输出PDF为空白页的解决方案

    标题中的“JasperReport浏览器输出PDF为空白页”通常意味着在使用JasperReport生成PDF报表时,浏览器未能正确显示内容。这可能是由多种原因引起的,包括但不限于以下几点: 1. **XML解析错误**:`test.jrxml`文件是...

    利用icepdf将pdf转换成tif及jpge格式文件

    "利用icepdf将pdf转换成tif及jpeg格式文件"这一标题表明了主要的操作流程,即使用开源的Java PDF库icepdf来实现PDF文档向两种常见图像格式——TIFF(Tagged Image File Format)和JPEG(Joint Photographic Experts ...

    java解析pdf实例

    在IT行业中,PDF(Portable Document Format)是一种广泛使用的文件格式,用于存储文档,包括文本、图像和布局。Java作为多用途的编程语言,提供了一系列库来处理PDF文件,其中之一就是iText和Apache PDFBox。然而,...

    Unity解析并浏览PDF文件

    unity UGUI插件,用于在Unity客户端浏览PDF文件 使用方式:Unity场景添加Canvas,并将预设"PDFViewer"拖动至Canvas下,在右侧Inspector面板设置好pdf文件位置,运行后即可浏览PDF文件

    C#编程读取pdf文件

    6. **处理多页和复杂布局**:PDF文档可能包含多页,每个页面可能有复杂的文本布局。`PDFTextStripper`允许你指定开始和结束的页码,以便只提取特定范围的文本。对于复杂的布局,可能需要更精细的操作,如识别表格或...

    java解析pdf

    在Java中解析PDF文件是一项常见的任务,特别是在处理用户提交的文档、数据分析或自动化报告等场景下。本篇文章将深入探讨如何使用Java来解析PDF文件,并提供一个实际的示例。 Java解析PDF主要依赖于第三方库,如...

    PDF编辑器删空白页

    本篇将详细介绍如何处理PDF中的空白页,特别是针对“PDF编辑器删空白页”这一常见问题。 1. **PDF编辑器的选择** 在处理PDF文档时,首先需要一款功能强大的PDF编辑器。市面上有许多优秀的PDF编辑工具,如Adobe ...

    ICEpdf 完整jar包

    - **PDF解析**:ICEpdf使用了PDF规范来解析文档结构,包括页面、对象、资源等,使得开发者可以访问PDF文档的各个部分。 - **PDF渲染**:ICEpdf将PDF文档的内容转化为图像,可以在屏幕上显示或打印出来,保持与原始...

    PyPDF2解析pdf文件提取内容插入数据库

    Python3.X+PyPDF2解析指定文件夹下的pdf文件,提取文件内容并写入mysql数据库

    PDF文件文本内容提取研究

    从给定的文件信息来看,虽然部分内容并未提供直接与PDF文件文本内容提取相关的技术细节,但结合标题和描述,我们可以推断出文章的核心是探讨如何从PDF文件中提取文本内容,这对于开发电子书等应用非常关键。...

    PoDoFo C++ 类库 来解析、修改和创建 PDF 文档

    2. **PDF修改**:PoDoFo 提供了API,使得开发人员能够修改PDF文档的内容。这包括添加或删除文本、图像,更改字体、颜色,甚至调整页面布局。此外,还可以更新文档的元数据,如作者、标题和创建日期。 3. **PDF创建*...

    PDF结构解析

    PDF文件由多个对象组成,如页、字典、数组、字符串、流等,这些对象构成了PDF的逻辑结构。 首先,PDF的源码是由一系列的指令和数据构成的,这些指令用于定义文档的外观和内容。在C++中解析PDF,你需要创建一个解析...

    用C#来解析PDF文件

    在本文中,我们将深入探讨如何使用C#语言来解析PDF文件。 C# 提供了多种库和工具来处理PDF文件,其中一个示例应用是PdfFileAnalyzer。这个应用可以读取、解析PDF文件,并将其内部结构展示出来,这对于开发者理解和...

    自己测试使用的pdf测试文件

    7. PDF文件的编辑:PDF文件可以通过各种编辑工具来编辑和修改,例如Adobe Acrobat、PDFelement等软件。这些软件提供了多种编辑功能,如文字编辑、图形编辑、页面管理等,可以帮助用户快速地编辑和修改PDF文件。 8. ...

    xpdf4.0库,使用C/C++操作PDF文件的库

    6. **PDF编辑**:尽管Xpdf主要用于读取和解析PDF,但它也提供了部分编辑功能,如添加、删除或修改页面、注释和链接等。然而,对于复杂的编辑任务,可能需要更专业的PDF编辑库。 7. **兼容性与安全性**:Xpdf库遵循...

    JAVA 解析电子发票 解析PDF 精准读取想要的数据 源码+JAR包

    最近有个项目是要求将PDF版的电子发票,解析成文本格式,要求各个名称都对应,刚开始用的是PDFTextStripper.getText(),发现不能准确的抓到自己想要的数据,后来想了个办法,使用Rectangle,画多个矩形,精准定位,...

Global site tag (gtag.js) - Google Analytics