itextpdf特定页面上的不同边距

tri*_*420 1 java pdf-generation itext

今天是个好日子!

我对文档有一些疑问:

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

document.setMargin

然后

document.newPage

但似乎每页都有相同的余量.

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

谢谢!

编辑

这是添加文档内容的方法:

    @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());
        }
    }
Run Code Online (Sandbox Code Playgroud)

这就是结果:

标题页,保证金已更改

交叠

mkl*_*mkl 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();
}
Run Code Online (Sandbox Code Playgroud)

(ChangeMargins.java方法testChangingMargins)

结果:

截图

因此,考虑到您的第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));
    }
Run Code Online (Sandbox Code Playgroud)

结果如下:

截图

因此,不同的顶部和底部边距也起作用.


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