我的任务是在以下参数上预检现有的pdf文件:
我需要使用.net框架。 有什么建议吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
我有偏见(提交者),但我建议您使用iText。
您对“图层”一词的使用使我相信您并不是指(或理解)“图层”通常在PDF中的含义。
在PDF中,图层也称为“可选内容组”。可以使用各种逻辑位(例如当前缩放级别)打开和关闭给定页面的部分。
PDF格式的文本和图像可以具有任意深度/ Z顺序。文本可以位于图像的顶部,可以覆盖其他一些文本,可以在其他图像上绘制,这样......你就可以了。它不会经常发生(如果有的话),但它是可能的。
但是我对你试图询问的理解是你想要坐标&每个文本的图形状态和给定页面上的任何图像。
iText可以做到这一点,这要归功于相当新的parser包。特别是PdfReaderContentParser,其中包含自定义RenderListener。
在renderText和renderImage的实现中,您将存储/检查所需的一切。
这可以让你获得1和3的大部分内容。挖掘颜色/嵌入信息需要与PdfDictionary
等人进行一些低级别的讨论,以及对PDF Specification的一些了解。
2号和4号基于你如何表达它们有点时髦,但实际情况非常简单。
PDF页面可以有5个不同的框:
所有这些“默认为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;
}