检查PDF文件的最佳工具?

检查PDF文件的最佳工具?,pdf,Pdf,如何检查PDF文件,最好使用工具 用例:我正在尝试以编程方式生成PDF文件(使用iText)。我在实现某些布局时遇到困难,但我有PDF文件,其中的文本按我想要的方式排列(由Word生成)。我想逆向工程他们是如何做到这一点的 看起来不错,但我正在寻找适合Windows的产品。我已经成功地使用了。下面是代码的示例(从版本0.7.2开始),可能来自提供的示例之一: // load the document System.out.println("Reading document: " + filena

如何检查PDF文件,最好使用工具

用例:我正在尝试以编程方式生成PDF文件(使用iText)。我在实现某些布局时遇到困难,但我有PDF文件,其中的文本按我想要的方式排列(由Word生成)。我想逆向工程他们是如何做到这一点的

看起来不错,但我正在寻找适合Windows的产品。

我已经成功地使用了。下面是代码的示例(从版本0.7.2开始),可能来自提供的示例之一:

// load the document
System.out.println("Reading document: " + filename);
PDDocument doc = null;                                                                                                                                                                                                          
doc = PDDocument.load(filename);

// look at all the document information
PDDocumentInformation info = doc.getDocumentInformation();
COSDictionary dict = info.getDictionary();
List l = dict.keyList();
for (Object o : l) {
    //System.out.println(o.toString() + " " + dict.getString(o));
    System.out.println(o.toString());
}

// look at the document catalog
PDDocumentCatalog cat = doc.getDocumentCatalog();
System.out.println("Catalog:" + cat);

List<PDPage> lp = cat.getAllPages();
System.out.println("# Pages: " + lp.size());
PDPage page = lp.get(4);
System.out.println("Page: " + page);
System.out.println("\tCropBox: " + page.getCropBox());
System.out.println("\tMediaBox: " + page.getMediaBox());
System.out.println("\tResources: " + page.getResources());
System.out.println("\tRotation: " + page.getRotation());
System.out.println("\tArtBox: " + page.getArtBox());
System.out.println("\tBleedBox: " + page.getBleedBox());
System.out.println("\tContents: " + page.getContents());
System.out.println("\tTrimBox: " + page.getTrimBox());
List<PDAnnotation> la = page.getAnnotations();
System.out.println("\t# Annotations: " + la.size());
//加载文档
System.out.println(“读取文档:“+filename”);
PDDocument=null;
doc=PDDocument.load(文件名);
//查看所有文档信息
PDDocumentInformation info=doc.getDocumentInformation();
COSDictionary dict=info.getDictionary();
列表l=dict.keyList();
用于(对象o:l){
//System.out.println(o.toString()+“”+dict.getString(o));
System.out.println(o.toString());
}
//查看文档目录
PDDocumentCatalog cat=doc.getDocumentCatalog();
系统输出打印项次(“目录:+cat”);
List lp=cat.getAllPages();
System.out.println(“#Pages:+lp.size());
PDPage=lp.get(4);
System.out.println(“第:“+页”);
System.out.println(“\tCropBox:+page.getCropBox());
System.out.println(“\tMediaBox:+page.getMediaBox());
System.out.println(“\tResources:+page.getResources());
System.out.println(“\tRotation:+page.getRotation());
System.out.println(“\tArtBox:+page.getArtBox());
System.out.println(“\tBleedBox:+page.getBleedBox());
System.out.println(“\t内容:+page.getContents());
System.out.println(“\tTrimBox:+page.getTrimBox());
List la=page.getAnnotations();
System.out.println(“\t#注释:“+la.size());

Adobe Acrobat有一个非常酷但隐藏良好的模式,允许您检查PDF文件。我在

上写了一篇博客文章解释了这一点,Acrobat中的对象查看器很好,但Windjack解决方案的PDF Canopener允许使用滴管更好地检查页面上的对象。还允许对PDF进行修改

我在Linux中使用(读取和更新PDF语法)。因为它是用Java编写的,所以它也可以在Windows上运行。您可以在树结构中浏览PDF文件中的所有对象。它还可以动态解码扁平编码流,以便于检查

以下是一个屏幕截图:


除了其他答案中提到的基于GUI的工具外,还有一些命令行工具可以将原始PDF源代码转换为不同的表示形式,让您可以使用文本编辑器检查(现在已修改的文件)。以下所有工具都适用于Linux、Mac OS X、其他Unix系统或Windows

qpdf
(我的最爱) 使用解压(大多数)对象的流,并将
ObjStm
对象分解为单独的间接对象:

qpdf --qdf --object-streams=disable orig.pdf uncompressed-qpdf.pdf
qpdf
将自己描述为一种“对PDF文件进行结构化、内容保留转换”的工具

然后只需在您喜爱的文本编辑器中打开并检查
未压缩的qpdf.pdf
文件。以前压缩的(因此是二进制的)字节现在大部分是纯文本

mutool
还有
mutool
命令行工具,它与PDF查看器捆绑在一起(这是Ghostscript的姊妹产品,由同一家公司生产)。以下命令还可以解压缩流,并使其更易于通过文本编辑器进行检查:

mutool clean -d orig.pdf uncompressed-mutool.pdf
podofocompress
是一个用于PDF格式的免费软件/开源库,它包括一些命令行工具,包括
podofouncompress
。像这样使用它来解压缩PDF流:

podofouncompress orig.pdf uncompressed-podofo.pdf
peepdf.py
是一个基于Python的工具,可帮助您浏览PDF文件。它最初的目的是研究和剖析基于PDF的恶意软件,但我发现它对研究完全良性PDF文件的结构也很有用

它可以交互地用于“浏览”PDF中包含的对象和流

这里我不提供使用示例,只提供指向其文档的链接:

pdfid.py
pdf parser.py
pdfid.py
pdf parser.py
是用Python编写的两个

他们的背景也有助于探索恶意PDF——但我发现分析良性PDF文件的结构和内容也很有用

下面是一个示例,我将如何将5号PDF对象的未压缩流提取到*.dump文件中:

pdf-parser.py -o 5 -f -d obj5.dump my.pdf
最后说明
  • 请注意,PDF中的某些二进制部分不一定是不可压缩的(或可解码为人类可读的ASCII码),因为它们是嵌入在PDF中并以其本机格式使用的。这些PDF部件是JPEG图像、字体或ICC颜色配置文件

  • 如果您将上述工具与给出的命令行示例进行比较,您会发现它们都产生相同的输出。比较它们本身的差异可以帮助您更好地理解PDF语法和文件格式的本质


  • 还有另一种选择。Adobe Acrobat Pro还能够显示PDF的内部树结构

  • 开放式飞行前
  • 转到选项(右上角)
  • 内部PDF结构
  • 在顶部,Adobe Acrobat Pro还可以在PDF中显示文档字体的内部结构大多数其他“PDF树结构查看器”没有此选项

    我的建议是