代码之家  ›  专栏  ›  技术社区  ›  bmm6o

检查PDF文件的最佳工具?[关闭]

pdf
  •  62
  • bmm6o  · 技术社区  · 14 年前

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

    用例:我尝试以编程方式生成PDF文件(使用iText)。我很难实现某些布局,但我有PDF文件与文本布局的方式,我想(从Word生成)。我想逆向工程他们怎么做。

    PDF Inspector

    10 回复  |  直到 4 年前
        2
  •  98
  •   Jeroen Wiert Pluimers    6 年前

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

    qpdf

    qpdf 解压(大多数)对象的流并同时剖析 ObjStm

    qpdf --qdf --object-streams=disable orig.pdf uncompressed-qpdf.pdf
    

    qpdf公司 PDF文件的结构、内容保留转换 .

    然后打开+检查 uncompressed-qpdf.pdf 在您喜爱的文本编辑器中创建文件。大多数以前压缩的字节(因此,二进制)现在都是纯文本。

    mutool

    还有一个问题 穆图尔 命令行工具,它与 MuPDF PDF查看器(它是Ghostscript的姊妹产品,由同一家公司生产, Artifex

    mutool clean -d orig.pdf uncompressed-mutool.pdf
    

    podofouncompress

    PoDoFo 是一个使用PDF格式的免费软件/开源库,它包括一些命令行工具,包括 . 像这样使用它来解压缩PDF流:

    podofouncompress orig.pdf uncompressed-podofo.pdf
    

    peepdf.py

    PeePDF

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

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

    pdfid.py pdf-parser.py

    是两个 PDF tools by Didier Stevens

    他们的背景也是为了帮助探索 PDF——但我发现分析良性PDF文件的结构和内容也很有用。

    pdf-parser.py -o 5 -f -d obj5.dump my.pdf
    

    1. 请注意,PDF中的某些二进制部分不一定是不可压缩的(或可解码为人类可读的ASCII代码),因为它们是嵌入在PDF中并以其本机格式使用的。这类PDF部件是JPEG图像、字体或ICC颜色配置文件。

    2. 如果您将上述工具与给出的命令行示例进行比较,您会发现它们确实如此

        3
  •  48
  •   Amedee Van Gasse Bruno Lowagie    9 年前

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

    iText RUPS screenshot

        4
  •  6
  •   Vad1mo    9 年前

    还有另一种选择。adobeacrobatpro还可以显示PDF的内部树结构。

    1. 飞行前开放
    2. 转到选项(右上角)
    3. 内部PDF结构

    另外,adobeacrobatpro还可以在PDF中显示文档字体的内部结构大多数其他“PDF树结构查看器”都没有这种功能

    enter image description here

        5
  •  6
  •   Pierre    7 年前

    O2 Solutions的PDFXplorer在显示内部结构方面做得非常出色。

    http://www.o2sol.com/pdfxplorer/overview.htm

    (底部是免费的、分散注意力的横幅)。

        7
  •  5
  •   Kaleb Pederson    14 年前

    我用过 PDFBox

    // 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());
    
        9
  •  1
  •   W.P. McNeill    6 年前

    如果您想在Python中以编程方式工作, pdfminer

        10
  •  -6
  •   nifCody    9 年前

    我的建议是 Foxit PDF Reader 这对pdf文件的重要文本编辑工作有很大的帮助。