Java 阅读pdf中的现有页边距

Java 阅读pdf中的现有页边距,java,pdf,itext,Java,Pdf,Itext,我用iText创建了一个pdf文件。pdf是A4文件,并定义了一些页边距 Paragraph paragraph = new Paragraph(); Document document = new Document(PageSize.A4, 36, 72, 108, 180); PdfWriter.getInstance(document, new FileOutputStream("c:\\margin.pdf")); document.open();

我用iText创建了一个pdf文件。pdf是A4文件,并定义了一些页边距

    Paragraph paragraph = new Paragraph();
    Document document = new Document(PageSize.A4, 36, 72, 108, 180);
    PdfWriter.getInstance(document, new FileOutputStream("c:\\margin.pdf"));
    document.open();
    document.add(new Paragraph("Margin--->>roseinia.net"));
    document.close();
现在在另一个程序中,我想阅读上面pdf的边距。
在iText或其他库中是否有这样做的方法?

PDF本身并没有真正的页边空白概念。有许多与给定页面关联的边界框:

  • MediaBox—页面所需的物理介质的大小
  • CropBox—查看器中可见页面的大小(如果不存在,则默认为MediaBox)
  • BleedBox—用于在生产环境中渲染的剪裁边界(可能包括折叠空间)
  • TrimBox-修剪后完成页面的预期尺寸
  • ArtBox-页面有意义内容的边界

ArtBox可能就是“边距”被翻译成的东西。

我在这台机器上没有iText主干代码的副本,但我很确定它不会将边距信息写入它生成的PDF中。即使主干有,我也不能告诉你添加了哪个版本。。。再说一次,这里没有行李箱

但是,有两种可能的解决方案:

1) 手动将信息写入PDF。鉴于您拥有生成文档的源,您应该能够修改该源。这对已经生成的文档没有帮助,但总比没有好。这也比另一种方法简单得多。您可以在几个地方编写此信息。 a) 您可以将信息作为字符串添加到PDF“doc info fields”(元数据)中。我很确定iText允许您编写自定义字段。。。是的

new Meta("margins", buildStringOfMyMargins() );
然后,您必须再次解析该字符串。记住,在doc.open()之前必须添加元信息

b) 写出你自己的艺术盒(如普林斯所述)。这需要第二次使用PdfStamper将数据直接写入每个页面的PdfDictionary

c) 根据您提供的页边距修改iText以包含艺术盒

2) 解析出内容位置。当前的com.itextpdf.text.pdf.parser.*代码不处理线条艺术,这可能对您来说很重要,也可能不重要。您必须确定给定页面上每个元素的边界框,并计算包含所有元素的边界框。很多工作