itextpdf 特定页面上的不同边距

itextpdf different margin on specific page

大家好!

我对文档有一些疑问:

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

document.setMargin

然后

document.newPage

但似乎每一页都有相同的页边距。

  1. 有什么办法可以防止header和element重叠吗?

谢谢!

EDIT

添加文档内容的方法如下:

    @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());
        }
    }

这是结果:

我刚试过你描述的方法:

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)

结果:

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

OP 在评论中想知道:

how about top and bottom margin? :/

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

    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));
    }

结果:

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


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