`
shappy1978
  • 浏览: 700141 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

关于PDFBox读取Identity-H编码的乱码问题,附pdf

    博客分类:
  • J2EE
阅读更多

软件版本:pdfbox-0.8.0-incubating

PDF转换软件:Adobe Acrobat6.0,Foxit PDF Creator

问题描述:用比较专业的Foxit PDF Creator转换没有问题,用Acrobat转换时,转换出的pdf可以正常用Adobe Reader打开,但是用pdfbox打开出现乱码。

转换方法,打开word文件,选择打印,选择打印机如图

转换后可以看到pdf的字体有所不同,是Identity-H

而用Foxit转换出来的正常可以读取的pdf文件字体应该是UniGB-USC2-H

所以字体应该出现在字体编码上,不知道有没有解决方案。运行结果如下:

解析pdf的源码如下:

 

	public void testPDF() {
		try {
			String ts = GetTextFromPdf("c:\\temp\\test.pdf");
			System.out.println(ts);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public String GetTextFromPdf(String filename) throws Exception {
		String temp = null;
		PDDocument pdfdocument = null;
		FileInputStream is = new FileInputStream(filename);
		PDFParser parser = new PDFParser(is);
		parser.parse();
		pdfdocument = parser.getPDDocument();
		PDFTextStripper ts = new PDFTextStripper();
		String content = ts.getText(pdfdocument);
		return content;
	}

 附件中有word文件和异常的pdf文件。

× 建议用其他包转换的勿复

//*********************************************************

今天下载了1.1.0版本,惊喜的发现,不仅解决了UniGB-UCS2-H问题,而且Identity-H编码的问题也得到解决了,还解决了以前一个不大不小的bug,容易在文字中出现空格,到底是官方升级的好阿,比自己杂七杂八揍了一堆补丁要舒服多了。顺利通过了自己的十来个测试样本,只有一个嵌入字体的pdf出现问题,异常如下:

 

java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider

at org.apache.pdfbox.pdmodel.PDDocument.openProtection(PDDocument.java:1098)

at org.apache.pdfbox.pdmodel.PDDocument.decrypt(PDDocument.java:579)

at org.apache.pdfbox.util.PDFTextStripper.writeText(PDFTextStripper.java:235)

at org.apache.pdfbox.util.PDFTextStripper.getText(PDFTextStripper.java:180)

at testPDFBox.GetTextFromPdf(testPDFBox.java:56)

at testPDFBox.testPDF(testPDFBox.java:32)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at junit.framework.TestCase.runTest(TestCase.java:168)

at junit.framework.TestCase.runBare(TestCase.java:134)

at junit.framework.TestResult$1.protect(TestResult.java:110)

at junit.framework.TestResult.runProtected(TestResult.java:128)

at junit.framework.TestResult.run(TestResult.java:113)

at junit.framework.TestCase.run(TestCase.java:124)

at junit.framework.TestSuite.runTest(TestSuite.java:232)

at junit.framework.TestSuite.run(TestSuite.java:227)

at org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:76)

at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)

at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

下载bcprov-jdk15-133.jar包后,不再提示找不到类,出现解析错误:

2010-4-7 15:26:28 org.apache.pdfbox.filter.FlateFilter decode

严重: Stop reading corrupt stream

java.io.IOException: Error: Expected an integer type, actual=''

at org.apache.pdfbox.pdfparser.BaseParser.readInt(BaseParser.java:1275)

at org.apache.pdfbox.pdfparser.PDFObjectStreamParser.parse(PDFObjectStreamParser.java:81)

at org.apache.pdfbox.cos.COSDocument.dereferenceObjectStreams(COSDocument.java:449)

at org.apache.pdfbox.pdmodel.PDDocument.openProtection(PDDocument.java:1100)

at org.apache.pdfbox.pdmodel.PDDocument.decrypt(PDDocument.java:579)

at org.apache.pdfbox.util.PDFTextStripper.writeText(PDFTextStripper.java:235)

at org.apache.pdfbox.util.PDFTextStripper.getText(PDFTextStripper.java:180)

at testPDFBox.GetTextFromPdf(testPDFBox.java:56)

at testPDFBox.testPDF(testPDFBox.java:32)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at junit.framework.TestCase.runTest(TestCase.java:168)

at junit.framework.TestCase.runBare(TestCase.java:134)

at junit.framework.TestResult$1.protect(TestResult.java:110)

at junit.framework.TestResult.runProtected(TestResult.java:128)

at junit.framework.TestResult.run(TestResult.java:113)

at junit.framework.TestCase.run(TestCase.java:124)

at junit.framework.TestSuite.runTest(TestSuite.java:232)

at junit.framework.TestSuite.run(TestSuite.java:227)

at org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:76)

at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)

at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

  • 大小: 23.2 KB
  • 大小: 10.2 KB
  • 大小: 13.9 KB
  • 大小: 3.9 KB
分享到:
评论
1 楼 nirvanasob 2010-12-13  
你附件中的test.pdf 我这里能正确抽出来呀

相关推荐

    有关pdfbox-1.3.1中Identity-H编码为乱码的解决方法

    在使用PDFBox 1.3.1版本时,你可能遇到一个常见的问题:当处理含有非ASCII字符的文本时,Identity-H编码可能会导致显示为乱码。Identity-H是一种Unicode编码方式,通常用于处理包含多种语言或特殊字符的PDF文档。...

    pdfbox-3.0.0-RC1.jar

    pdfbox-3.0.0-RC1 PDFBox是Java实现的PDF文档协作类库,提供PDF文档的创建、处理以及文档内容提取功能,也包含了一些命令行实用工具。

    pdfbox-2.0.8.jar,fontbox-2.0.8.jar,pdfbox-tools-2.0.8.jar

    在这个压缩包中,我们找到了三个核心的JAR文件:`pdfbox-2.0.8.jar`, `fontbox-2.0.8.jar`, 和 `pdfbox-tools-2.0.8.jar`,它们分别对应PDFBox的主要功能模块。 1. **pdfbox-2.0.8.jar**: 这是PDFBox的核心库,...

    pdfbox-app-1.7.1.jar pdf操作

    使用`pdfbox-app-1.7.1.jar`,开发人员可以将这些功能集成到自己的Java应用程序中,通过调用相应的API实现PDF的处理需求。在实际项目中,这通常涉及到导入库、实例化PDF文档对象、选择合适的工具类进行操作,并处理...

    pdfbox-app-2.0.31.jar

    从 https://pdfbox.apache.org/ 下载,太费时了。 为了节约你的时间,我上传了这个 pdfbox-app-2.0.31.jar

    pdfbox-1.8.0-src

    在"pdfbox-1.8.0-src"这个压缩包中,包含了PDFBox库的源代码,对于开发者来说,这是一个深入了解PDFBox工作原理和定制功能的好资源。 PDFBox的核心功能包括: 1. **文档读取**:PDFBox提供了PDDocument类,可以...

    PDFbox-app-2.0.9.jar;PDFbox.jar包

    PDFbox.jar,2.0.9版本,PDFbox.jar,2.0.9版本,PDFbox.jar,2.0.9版本,PDFbox.jar,2.0.9版本,

    pdfbox-app-2.0.2.jar

    pdfbox-app-2.0.2.jar

    pdfbox-0.8.0-incubating.jar fontbox-0.8.0-incubating.jar

    PDFBox和FontBox是Apache软件基金会开发的两个关键库,用于处理PDF(Portable Document Format)文档。这两个库在Java环境中提供了强大的PDF操作功能,广泛应用于PDF的读取、创建、编辑以及字体处理。 PDFBox是...

    PDFBox-0.7.2-log4j.jar

    PDFBox-0.7.2-log4j.jar

    pdfbox-app-1.8.5.zip

    在PDFBox-app模块中,通常会包含一些用户友好的命令行工具,使得开发者和非开发者都能方便地执行常见的PDF操作。 这个压缩包可能包含了以下组件: 1. PDFBox的主要类库:如`PDFReader`和`PDFWriter`,用于读写PDF...

    PDFBox-2.0.19 for .Net | c#用PDFBox解析PDF

    pdfbox for .Net目前的最新版PDFBox-2.0.19 用法: 将压缩包内所有dll拷贝到项目编译目录, 在项目中引用 IKVM.OpenJDK.Core.dll IKVM.OpenJDK.SwingAWT.dll pdfbox-app-2.0.19.dll 在代码中引入命名空间using org....

    解决linux下pdfbox转中文pdf为图片的问题

    java用pdfbox转pdf为图片文件时,如果pdf有中文,则会出现乱码(windows下正常,linux下乱码),改用icepdf后问题解决,而且能够轻松设置欲转换成图片的格式和大小.icepdf对中文支付非常强大,以下是实例代码,可以...

    pdfbox-app-1.8.15

    pdfbox-app-1.8.15

    pdfbox-debugger-2.0.13.jar

    pdfbox-debugger-2.0.13.jar

    pdfbox乱码问题解决 pdf打印 pdf预览

    此文件中包含我进行修改的源码地址,托管在github上,资源分定为10分,也算是对我努力的一种肯定,包含完整工程,我发现github上很多源码都是没有jar包的,我也不知道作者是什么心理... pdfbox 1.8 版本上进行的修改。

    pdfbox-app-1.8.0

    pdfbox-app-1.8.0 java读写pdf文档的必备jar包

    pdfbox-app-1.8.4

    这个"pdfbox-app-1.8.4"版本是其应用程序模块,主要提供了在Java环境中对PDF文档进行操作的功能,比如读取、写入、转换、签署以及提取元数据等。在Java开发中,如果你需要处理PDF相关的任务,PDFBox是一个非常实用的...

Global site tag (gtag.js) - Google Analytics