itextpdf特定页面上的不同边距

时间:2016-06-27 14:58:38

标签: java pdf-generation itext

大家好!

我对文档有一些疑问:

  1. itextpdf是否可以选择在特定页面上使用不同的边距?我试过用
  2.   

    document.setMargin

    然后

      

    document.newPage

    但似乎每个页面都获得相同的保证金。

    1. 有没有办法防止标题和元素重叠?
    2. 谢谢!

        

      修改

      以下是添加文档内容的方法:

          @Override
          void addDocumentContent(Document doc, PdfWriter writer, AbstractDiplomaDataModel diplomaData) throws DiplomaPdfFileProducerException {
              try {
                  doc.setMargins(DefaultPdfDocumentSettings.LEFT_MARGIN, DefaultPdfDocumentSettings.RIGHT_MARGIN, 0f, 0f);
                  doc.newPage();          
                  doc.add(new DiplomaPdfDataGenerator(diplomaData).generateFirstPagePdf());
                  doc.setMargins(DefaultPdfDocumentSettings.LEFT_MARGIN, DefaultPdfDocumentSettings.RIGHT_MARGIN, DefaultPdfDocumentSettings.TOP_MARGIN,DefaultPdfDocumentSettings.BOTTOM_MARGIN);
                  doc.newPage();          
                  doc.add(new DiplomaPdfDataGenerator(diplomaData).generateOtherPagesPdf());
              } catch (Exception e) {
                  throw new DiplomaPdfFileProducerException(e.getMessage());
              }
          }
      

      这就是结果:

      title page, margin is changed

      overlap

1 个答案:

答案 0 :(得分:6)

我刚试过你所描述的内容:

StringBuilder builder = new StringBuilder("test");
for (int i = 0; i < 100; i++)
    builder.append(" test");
String test = builder.toString();

try (   OutputStream pdfStream = new FileOutputStream(new File(RESULT_FOLDER, "ChangingMargins.pdf")))
{
    Document pdfDocument = new Document(PageSize.A4.rotate(), 0, 0, 0, 0);
    PdfWriter.getInstance(pdfDocument, pdfStream);
    pdfDocument.open();

    for (int m = 0; m < pdfDocument.getPageSize().getWidth() / 2; m += 100)
    {
        pdfDocument.setMargins(m, m, 100, 100);
        pdfDocument.newPage();
        pdfDocument.add(new Paragraph(test));
    }

    pdfDocument.close();
}

ChangeMargins.java方法testChangingMargins

结果:

Screenshot

因此,考虑到您的第1项:是,iText可以在特定页面上具有不同的边距。

OP在评论中想知道:

  

上下边距怎么样? :/

为此,我将上面的循环更改为:

    for (int m = 0; m < pdfDocument.getPageSize().getWidth() / 2 && m < pdfDocument.getPageSize().getHeight() / 2; m += 100)
    {
        pdfDocument.setMargins(m, m, m, m);
        pdfDocument.newPage();
        pdfDocument.add(new Paragraph(test));
    }

结果:

Screenshot

因此,不同的顶部和底部边距也有效。

考虑您的问题2 是否有任何方法可以阻止标题和元素重叠:通常它们不会重叠。