PDFBox中文乱码

晨星★~雨泪 2008-04-07
在解析PDF文件时出现这么一个问题,有几个PDF文件全是中文内容的,有一些可以正常解析,解析出来也是正常的中文,可是有一些就不正常,解析出来的是乱码.哎,每次都被这些乱码搞得天昏地转的,文件编码实在是让人费解.的的代码如下(运用PDFBox):
public static String parsePDF(InputStream is) throws PaserDocumentException {
		String docText=null;
		try{
			PDFParser parser = new PDFParser(is);
			parser.parse();
			COSDocument cosDoc = parser.getDocument();
			PDFTextStripper stripper = new PDFTextStripper();
			docText = stripper.getText(new PDDocument(cosDoc));
			cosDoc.close();
		//	System.out.println("docText ==> "+docText);
		}catch(Exception e){
		//	e.printStackTrace();
			throw new PaserDocumentException("不能解析 pdf 文件.");
		}
		return docText;
	}
晨星★~雨泪 2008-04-07
不知道大家都有什么来解析PDF文件的,做全文搜索.解析这类文件是常事,还望知道的能指点指点.我上面用的是PDFBOX0.7.3我来解析的.
dikar 2008-04-08
有个XPDF他对中文的支持比较好,你可以试下也是比较好用的
imjl 2008-04-09
以前玩过,用得是LUCENE IN ACATION里面的code。

但没正式用过。
晨星★~雨泪 2008-04-09
在JAVA世界里,不管做什么,只要有处理中文的,都会遇到中文乱码问题,这实在是太经典了.
LUNX也是.为什么WIN就不会有这类的问题.
imjl 2008-04-10
晨星★~雨泪 写道
在JAVA世界里,不管做什么,只要有处理中文的,都会遇到中文乱码问题,这实在是太经典了.
LUNX也是.为什么WIN就不会有这类的问题.



汗,字符和java没关系,win系统的默认字符好像是CP932,*NIX一般是UTF-8

linleran 2008-04-18
PDDocument m_pdfDocument = PDDocument.load(is);
StringWriter writer = new StringWriter();
PDFTextStripper stripper = new PDFTextStripper();
stripper.writeText(m_pdfDocument, writer);
String content = writer.getBuffer().toString();
晨星★~雨泪 2008-04-22
linleran 写道
PDDocument m_pdfDocument = PDDocument.load(is);
StringWriter writer = new StringWriter();
PDFTextStripper stripper = new PDFTextStripper();
stripper.writeText(m_pdfDocument, writer);
String content = writer.getBuffer().toString();


加过密的文件解析出来是乱码,在用PDF阅读器是可以正常阅读
imjl 2008-04-22
首先你要知道从pdf解出来的字符是属于什么编码?它可能是gb2312,gbk,utf-8或者其他格式。 如何检查该字符,也许你可以看下 http://www.pcdog.com/edu/java/17/04/c322768_2.html

当你知道解出来的字符什么格式的,转成gb2312就可以看中文了。


pdf阅读器和你程序一样,按照pdf格式读取信息后,检查其编码格式,然后做相应转换。
blcakcat 2008-04-22
PDF为了识别所有的字符,给每一个文字都赋予一个唯一的编码,叫CID

然后又提供了不同的字体编码与CID的Map文件和CID和Unicode的Map文件。参照Resources\cmap\00_readme.pdf文件,就可以知道这些文件是什么。

一般的PDF文件中文字转换方法应该是从PDF文件解析出来字体名称和文字编码后,从对应的CMap文件中找到该文字编码对应的CID。然后再根据CID从CID和Unicode的Map文件找到对应的Unicode。

PDFBox不能正常转换中文的原因就在于,CMapParser Class没有解析begincidrange(不同的字体编码与CID对照表)一节, 也没有参照CID和Unicode Map文件进行转换,这是一个Bug。




Global site tag (gtag.js) - Google Analytics