itextpdf 特定页面上的不同边距
itextpdf different margin on specific page
大家好!
我对文档有一些疑问:
- itextpdf 是否可以选择在特定页面上设置不同的边距?我试过使用
document.setMargin
然后
document.newPage
但似乎每一页都有相同的页边距。
- 有什么办法可以防止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 和元素重叠:通常它们不会重叠。
大家好!
我对文档有一些疑问:
- itextpdf 是否可以选择在特定页面上设置不同的边距?我试过使用
document.setMargin
然后
document.newPage
但似乎每一页都有相同的页边距。
- 有什么办法可以防止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 和元素重叠:通常它们不会重叠。