阅读pdf中的现有边距

时间:2010-10-05 07:35:16

标签: 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();
    document.add(new Paragraph("Margin--->>roseinia.net"));
    document.close();

现在在另一个程序中,我想阅读上面pdf的边距。 有没有办法在iText或其他库中做到这一点?

2 个答案:

答案 0 :(得分:2)

PDF本身并没有真正的边缘概念。有一些与给定页面关联的边界框:

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

ArtBox 可能正在被翻译成“边距”。

答案 1 :(得分:0)

我在这台机器上没有iText中继代码的副本,但我很确定它不会在它生成的PDF中写入边距信息。即使后备箱确实如此,我也无法告诉您哪个版本已经添加了......再次,这里没有主干。

然而,这个问题有几种可能的解决方案:

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

new Meta("margins", buildStringOfMyMargins() );

然后你必须再次解析字符串。请记住,您必须在doc.open();

之前添加元信息

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

c)修改iText以包含基于您提供的边距的艺术框。

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