`
wuwen_java
  • 浏览: 4462 次
  • 性别: 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库的基本概念。...

    用C#来解析PDF文件

    这个项目让你可以去读取并解析一个PDF文件,并将其内部结构展示出来. PDF文件的格式标准文档可以从Adobe那儿获取到. 这个项目基于“PDF指南,第六版,Adobe便携文档格式1.7 2006年11月”. 它是一个恐怕有1310页的...

    JAVA删除PDF空白页

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

    ICEpdf去除水印中文乱码

    在这个主题中,我们将探讨如何使用ICEpdf来去除PDF文件中的水印,并解决中文乱码问题。这个过程涉及对ICEpdf库的深入理解和利用其提供的API来实现特定功能。 首先,ICEpdf的核心功能包括PDF文档的解析、渲染和编辑...

    C++解析PDF文件

    本篇将深入探讨如何使用C++来解析PDF文件。 首先,解析PDF文件涉及理解PDF的内部结构。PDF标准定义了一个复杂的对象模型,包括页面、文本、图像、图形和表单字段等元素。每个PDF文件都是由一系列字节流组成的,这些...

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

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

    pdf文件解析,用文件流方式处理

    PDF文件解析是理解PDF文件结构、提取数据或进行编辑操作的关键步骤。在这里,我们将深入探讨如何使用文件流方式来处理PDF文件。 首先,我们需要了解PDF的基本结构。PDF文件由一系列的对象组成,包括页面、字体、...

    java创建和解析PDF

    Java作为一种强大的编程语言,提供了多种库和方法来处理PDF文件,包括创建和解析PDF。本篇将详细介绍如何在Java环境下创建PDF文件以及将PDF解析为TXT文本。 首先,我们来看如何使用Java创建PDF文件。通常,我们可以...

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

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

    PDF结构解析(c++源代码)

    PDF解析器的主要任务是读取PDF文件,识别并解析这些对象,然后根据对象的类型和内容进行操作。C++作为一种强大的编程语言,非常适合处理这种低级别的文件解析任务。 在C++中,解析PDF文件通常需要以下步骤: 1. **...

    .Net c#使用PDFBox解析PDF文件

    在.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.docx”表明本文将介绍一种删除PDF文件中空白页的方法,而描述中提到的在线工具(https://www.ilovepdf.com/zh-cn?ref=toolsforyou)是一个实用的PDF处理平台,提供包括删除空白页在内的...

    SpringBoot在线预览PDF文件

    在SpringBoot应用中,我们可以通过Ajax或Fetch API向后端请求PDF文件内容,然后将返回的二进制数据传递给PDF.js进行解析和渲染。 实现过程如下: 1. 配置SpringBoot:在`pom.xml`中添加PDF.js库以及可能需要的其他...

    java使用itext解析pdf并生成文本文件—eclipse工程

    在这个“java使用iText解析pdf并生成文本文件—eclipse工程”中,我们将探讨如何利用iText库在Java环境中,特别是在Eclipse集成开发环境中,解析PDF文档并将其内容导出为文本文件。 首先,我们需要理解PDF...

    利用mui框架和pdf.js插件实现pdf文件解析与查看

    在混合移动应用开发中,我们经常需要处理各种类型的文件,其中PDF文件的解析与查看是一项常见需求。"利用mui框架和pdf.js插件实现pdf文件解析与查看"的主题旨在介绍如何在混合应用程序中集成这两个工具,以提供流畅...

    Unity解析并浏览PDF文件

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

    ICEPDF 架包及例子

    ICEPDF是一款开源的Java库,专门用于处理PDF文档。它提供了丰富的API,使得开发者能够方便地在Java应用程序中查看、渲染、打印以及编辑PDF文件。标题提到的"ICEPDF 架包及例子",意味着这个压缩包包含了ICEpdf库的源...

    PDF文件文本内容提取研究

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

    PDF文件解析工具及说明文档

    SpirePDF是一款强大的.NET PDF组件,它提供了一系列API,使得开发者可以在C#、VB.NET、ASP.NET等.NET平台上创建、修改和处理PDF文件。它的主要功能包括: 1. 创建空白PDF文档,或者从现有文件、URL或流中加载PDF。 ...

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

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

Global site tag (gtag.js) - Google Analytics