我想比较两个pdf文档(不仅包括内容,还包括其他信息,如页眉页脚和样式)。
我知道我们可以使用Apache tika进行比较。我学会了解析pdf文档并能够提取一些元数据信息,例如title,author。
我现在能够做到这一点 -
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.sax.BodyContentHandler;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
public class CompareDocs {
public CompareDocs() {
super();
}
private void parseResource(String resourceName) {
System.out.println("Parsing resource : " + resourceName);
InputStream inputStream = null;
try {
try {
inputStream = new BufferedInputStream(new FileInputStream(new File(resourceName)));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Parser parser = new AutoDetectParser();
ContentHandler contentHandler = new BodyContentHandler();
Metadata metadata = new Metadata();
parser.parse(inputStream, contentHandler, metadata, new ParseContext());
for (String name : metadata.names()) {
String value = metadata.get(name);
System.out.println("Metadata Name: " + name);
System.out.println("Metadata Value: " + value);
}
System.out.println("Title: " + metadata.get("title"));
System.out.println("Author: " + metadata.get("Author"));
System.out.println("content: " + contentHandler.toString());
} catch (IOException e) {
e.printStackTrace();
} catch (TikaException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) throws Exception {
CompareDocs apacheTikaParser = new CompareDocs();
apacheTikaParser.parseResource("C:\\Users\\prakhar\\Desktop\\beautiful_code.pdf");
}
}
我们如何提取更多信息,例如第一部分的标题距离,图像高度和宽度等,并使用Apache Tika将它们与另一个pdf进行比较。
答案 0 :(得分:6)
答案 1 :(得分:1)
如果您想要访问更多信息,可能更方便的是使用另一个api,如PDFTextStream。 Tika从pdf中提取原始文本信息,而PDFTextStream为您提供带有相关信息的结构化文本,如字符编码,高度,文本区域等。