预检pdf文件

时间:2011-06-22 08:14:18

标签: .net pdf

我的任务是在以下参数上预检现有的pdf文件:

  1. 在文本图层中遵循嵌入字体和使用过的字体;
  2. 文件的物理尺寸(宽度和高度,以毫米为单位)。
  3. 每个图像图层和整个文档的颜色配置文件。
  4. 出血/修剪/艺术盒文件。
  5. 我需要使用.net框架。 有什么建议吗?

2 个答案:

答案 0 :(得分:0)

请查看iText或根据poppler实施您自己的解决方案,这样您就可以对pdf文档进行低级访问。

答案 1 :(得分:0)

我有偏见(提交者),但我建议您使用iText。

您对“图层”一词的使用使我相信您并不是指(或理解)“图层”通常在PDF中的含义。

在PDF中,图层也称为“可选内容组”。可以使用各种逻辑位(例如当前缩放级别)打开和关闭给定页面的部分。

PDF格式的文本和图像可以具有任意深度/ Z顺序。文本可以位于图像的顶部,可以覆盖其他一些文本,可以在其他图像上绘制,这样......你就可以了。它不会经常发生(如果有的话),但它是可能的

但是我对你试图询问的理解是你想要坐标&每个文本的图形状态和给定页面上的任何图像。

iText可以做到这一点,这要归功于相当新的parser包。特别是PdfReaderContentParser,其中包含自定义RenderListener

在renderText和renderImage的实现中,您将存储/检查所需的一切。

这可以让你获得1和3的大部分内容。挖掘颜色/嵌入信息需要与PdfDictionary等人进行一些低级别的讨论,以及对PDF Specification的一些了解。

2号和4号基于你如何表达它们有点时髦,但实际情况非常简单。

PDF页面可以有5个不同的框:

  1. 媒体框:页面的初始大小。需要
  2. 裁剪框:完成页面的大小。可选,如果未明确定义,则默认为媒体框。
  3. 修剪框:其他打印机不是裁剪框的打印机。可选,默认为裁剪框。
  4. 艺术框:包含页面上可见的所有内容的边界框(或其他内容),默认为裁剪框。
  5. 出血盒:其他一些印刷品,默认为(你猜对了!)裁剪框。
  6. 所有这些“默认为X”都是隐含的。如果你要求修剪框我可能会“空”,在这种情况下,我的责任是检查裁剪框。如果我再次获得null,那么我需要检查媒体框。

    因此,当你要求物理尺寸时,你可能指的是媒体盒,或者裁剪框......或者甚至是装饰盒(虽然我对此表示怀疑,因为你后来明确提到它)。

    当你想知道其他一个盒子时,你需要知道当这个值不存在时它是什么。

    好的,这就是理论。螺母和螺栓时间(用Java表示):

    Rectangle[] getBoxen(PdfReader reader, int pageINDEX) {
      Rectangle retRects[] = new Rectangle[5];
      retRects[0] = reader.getBoxSize(pageINDEX, "media");
      retRects[1] = reader.getBoxSize(pageINDEX, "crop");
      retRects[2] = reader.getBoxSize(pageINDEX, "trim");
      retRects[3] = reader.getBoxSize(pageINDEX, "art");
      retRects[4] = reader.getBoxSize(pageINDEX, "bleed");
    
      // handle defaults
    
      // crop box defaults to media box
      if (retRects[1] == null) {
        retRects[1] = retRects[0];
      }
    
      // everything else defaults to the crop box
      for (int i = 2; i < 4; ++i) {
        if (retRects[i] == null) {
          retRects[i] = retRects[1];
        }
      }
    
      return retRects; 
    }