`
wuwen_java
  • 浏览: 4476 次
  • 性别: 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页的...

    ICEpdf去除水印中文乱码

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

    PDF.js 解析PDF文件demo

    pdf.js 解析PDF文件DEMO 下载这个DEMO 轻松搞定在线解析PDF文件 支持翻页浏览 pdf.js 是一个技术原型主要用于在 HTML5 平台上展示 PDF 文档,无需任何本地技术支持 注意:只兼容支持HTML5的浏览器

    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 空白页移除工具PDF文件批量删除空白页(带UI界面+成品).rar

    它能够精准识别 PDF 文档中的空白页,无论是完全空白无文字、仅有空白字符,还是无图像内容的页面,都能被快速检测出来,并在移除这些空白页后,将处理后的内容重新整合生成一份全新的无空白页 PDF 文件。...

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

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

    一种解析PDF文件的源代码

    `mupdf`是一个开源的PDF阅读器项目,它的源代码可以帮助开发者理解PDF文件的解析过程,从而进行自定义开发或优化PDF相关应用。 `mupdf-0.9-source.rar`是一个包含`mupdf`项目0.9版本源代码的压缩包。解压后,我们...

    .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文件

    C#编程读取pdf文件

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

    ICEPDF 架包及例子

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

Global site tag (gtag.js) - Google Analytics