最近用lucene做一个搜索文档的小程序,其中索引pdf文件时使用pdfbox1.3时出现乱码。
索引pdf的函数如下:(使用pdfbox-1.3.1.jar以及fontbox-1.3.1.jar)
package luceneTest;
import java.io.File;
import java.io.Reader;
import java.io.StringReader;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.util.PDFTextStripper;
public class LucenePdf {
public static Document getDocument(File pdf){
String pdfpath = pdf.getAbsolutePath();
PDDocument pdDocument = null;
Document document = new Document();
String title = pdf.getName();
try{
pdDocument = PDDocument.load(pdf);
PDFTextStripper stripper = new PDFTextStripper();
String s1 = stripper.getText(pdDocument);
System.out.println(s1);
Reader contents = new StringReader(s1);
document.add(new Field("title", title, Field.Store.YES, Field.Index.ANALYZED));
document.add(new Field("contents",contents));
document.add(new Field("path", pdfpath, Field.Store.YES, Field.Index.NO));
pdDocument.close();
}catch(Exception e){
e.printStackTrace();
}
return document;
}
}
结果出现了乱码,调试时发现pdf文档的编码格式为Identify-H。我又用了pdfbox-1.2.1.jar来替换pdfbox-1.3.1.jar,结果该文档可以正常显示。通过比较两个不同版本中的org.apache.pdfbox.pdmodel.font.PDFont源代码,我发现1.2.1中有一段代码专门用来处理Identity-H编码,而在1.3.1中则没有。于是将这段代码放入1.3.1版本中的PDFont中。
下面是pdfbox-1.3