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。 |