我在曾经的项目中使用的是pdfbox。在读取中文文档时能够读出大部分的文字,可是在数字、分页等地方还是不可避免的出现乱码。

于是我在网上搜索,看有没有什么解决方法。看到有说法:



“PDFBox看起来很的方便,它的API功能强大。

甚至能和Lucene进行无缝的结合。可是它有一个致命的弱点,就是它不支持中文。要提取中文的文本。能够採用还有一个很出色的工具xpdf。





于是我决定自己比較一下这两种方法处理中文pdf文档时在时间性能、读取效果等各个方面的效果。



一、关于XPDF和PDFBOX



1.xpdf

xpdf仅仅是一个软件,通过java採用命令行调用,并获取输出结果,如此来说使用简单,可是相当受限。如:无法跨平台,无法处理特定格式(表格等),无法处理图片和其它附件。这样的调用必然限制了它的灵活性。



2.pdfbox

pdfbox(一个BSD许可下的源代码开放项目)是一个为开发者读取和创建PDF文档而准备的纯Java类库。





二、測试结果和总结



1.txt文件大小

一个大小为74KB的PDF文档经处理为txt文档后。大小明显减小。经xpdf处理后生成了10KB的txt文件。

经pdfbox处理后生成了12KB的txt文件。

2.时间性能

从执行结果来看,xpdf处理的速度明显大大快于pdfbox的处理速度,差点儿是1/10。



3.分析总结



从以上调用结果能够发现,在时间性能和空间性能上,xpdf都明显优于pdfbox 。

在最关键的读取效果上。pdfbox会自己主动在某些读取文字中增加一些格式,比方回车、空格等,造成了更不好的效果。至于在某些PDF文档的格式会读出乱码的情况上,两种方法读出的乱码都是比較一致的。这应该是因为这两个方法的缺陷造成的。



综上所看到的。假设不要求非常高的移植性的话,採用xpdf应该是比較好的方法 。

关于XSuperMES项目使用的PDF框架的更多相关文章

  1. PHP项目感悟 -- 从CI框架来看iOS的MVC

    其实这几天一直都想找时间把这个感悟整理出来,也是这一段一直思考的问题,因为这一段参加一个PHP后台项目的开发,框架使用的是CI,随着项目的进展,对于CI接触的也越多,但是由于理解的可能并不深刻,我也只 ...

  2. 实战突击: Java Web项目整合开发(PDF)

    实战突击:  Java  Web项目整合开发(PDF)

  3. 项目总结SpringMVC+hibernate框架 web.xml 分析(2)

    紧接 项目总结SpringMVC+hibernate框架 原理(MVC) applicationContext.xml 文件(3) 这一步讲解项目模块化的配置,项目中每个模块配置一个文件,命名规则为 ...

  4. Django项目vue前端依赖框架过大,工程打开太卡的问题

    前景提要:利用vue开发项目,由于依赖框架太大,导致pyCharm内存不够,项目打开太慢.步骤一:修改pyCharm的占用内存大小,按照下图操作.1.在应用程序中找到pyCharm,点击"显 ...

  5. 在Spring Boot项目中使用Spock框架

    转载:https://www.jianshu.com/p/f1e354d382cd Spock框架是基于Groovy语言的测试框架,Groovy与Java具备良好的互操作性,因此可以在Spring B ...

  6. 项目结合activiti工作流框架使用

    项目结合activiti工作流框架使用: 1.项目与工作流框架的结合. 2.状态:草稿(待审批).审批中.审批通过.审批失败 3. 提交审批: 0 草稿(待审批),记录绑定工作流执行id,审批状态设置 ...

  7. 2019-8-31-dotnet-新项目格式与对应框架预定义的宏

    title author date CreateTime categories dotnet 新项目格式与对应框架预定义的宏 lindexi 2019-08-31 16:55:58 +0800 201 ...

  8. 01-电子商城项目介绍及ssm框架搭建

    1.B2C电商项目功能及架构 1.1功能列表 1.2系统架构(soa架构) 2.后台管理系统工程搭建及测试 ypMall,ypMall-manager-web ypMall为父项目,管理子项目的jar ...

  9. Java三方---->pdf框架之IText的使用

    在企业的信息系统中,报表处理一直占比较重要的作用t.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超链接显示或下载得到生成的报表,这样就很好的解决了B/S系统的报表处理问题.今天 ...

随机推荐

  1. Fiddler抓包4-工具介绍(request和response)【转载】

    本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/p/6719717.html 前言 本篇简单的介绍下fiddler界面的几块区域,以及各自区域到 ...

  2. bottle框架学习(2):变量定义等

    try: from simplejson import dumps as json_dumps, loads as json_lds except ImportError: # pragma: no ...

  3. hdu 5139(离线处理+离散化下标)

    Formula Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  4. NetFlow流量采集与聚合的研究实现

    http://www.21ic.com/app/analog/200907/44851.htm

  5. AC日记——数颜色 bzoj 2120

    2120 思路: 带修改的莫队: 对于离线排序询问的算法,如何修改呢? 每个询问添加一个修改标记: 表示当前询问在第几个修改之后: 然后把修改标记作为第三关键字来排序: 每次更新端点,先更新时间: 块 ...

  6. 解析Java的volatile关键字

    众所周知,无限制下多线程操作共享变量是危险的,为了保证线程安全语义,一般的建议是在操作共享变量时加锁,比方说在用synchronized关键字修饰的方法内读写共享变量. 但是synchronized开 ...

  7. Python的并发并行[1] -> 线程[0] -> threading 模块

    threading模块 / threading Module 1 常量 / Constants Pass 2 函数 / Function 2.1 setprofile()函数 函数调用: thread ...

  8. 【NOI2016】优秀的拆分

    题目描述 如果一个字符串可以被拆分为 $AABB$ 的形式,其中 $A$ 和 $B$ 是任意非空字符串,则我们称该字符串的这种拆分是优秀的. 例如,对于字符串 aabaabaa,如果令 $A = \m ...

  9. [LOJ6279]数列分块入门 3

    题目大意: 给你一个长度为$n(n\leq100000)$的序列$A$,支持进行以下两种操作: 1.将区间$[l,r]$中所有数加上$c$: 2.询问区间$[l,r]$中,严格小于$c$的最大数.思路 ...

  10. iOS音频的后台播放 锁屏

    初始化AudioSession和基本配置 音频播放器采用的AVPlayer ,在程序启动的时候需要配置AudioSession,AudioSession负责应用音频的设置,比如支不支持后台,打断等等, ...