Java itextpdf在特定页面上有不同的页边距
大家好 我对文件有一些问题:Java itextpdf在特定页面上有不同的页边距,java,pdf-generation,itext,Java,Pdf Generation,Itext,大家好 我对文件有一些问题: itextpdf是否可以在特定页面上选择不同的页边距?我试着用 document.setMargin 然后 document.newPage 但似乎每一页的页边都是一样的 有没有办法防止标题和元素重叠 谢谢 编辑 以下是添加文档内容的方法: @Override void addDocumentContent(Document doc, PdfWriter writer, AbstractDiplomaDataModel diplomaData) th
@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();
}
结果是:
因此,不同的顶部和底部边距也起作用
考虑到您的问题2,是否有任何方法可以防止标题和元素重叠:通常它们不会重叠。我只是尝试了您描述的内容:
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();
}
结果是:
因此,不同的顶部和底部边距也起作用
考虑到您的问题2,是否有任何方法可以防止页眉和元素重叠:通常它们不会重叠。上下页边距如何/参考我的编辑,在明显的变化之后,垂直边距也发生了变化。我编辑我的文章是为了添加一些代码行和添加内容后发生的情况的屏幕截图。我有一个类似的问题,但我只添加了一个跨多页的段落,只有第1页的顶部边距不同,你也能做到吗?@Joschka你可以试着用页面事件来做到。上下页边距如何/参考我的编辑,在明显的变化之后,垂直边距也发生了变化。我编辑我的文章是为了添加一些代码行和添加内容后发生的情况的屏幕截图。我有一个类似的问题,但我只添加了一个跨多页的段落,只有第1页的顶部边距不同,你也能做到吗?@Joschka你可以尝试使用页面事件来实现。你怎么做
emplicapdfdatagenerator.generateFirstPagePdf()
和emplicapdfdatagenerator.generateOtherPagesPdf()
返回?如何生成标题?那些DefaultPdfDocumentSettings
常量的值是什么?除此之外,代码看起来像我答案中的代码,它的工作方式和预期的一样。因此,这些物体或机械装置有一些特别之处,它起作用了。generateFirstPagePdf()和generateOtherPagesPdf()返回段落/元素。我只是没有注意到差异,因为DefaultPdfDocumentSettings.TOP_边距是20。我把上边距改为60,我注意到了差异,太棒了!我开始想知道这些方法可以返回什么,使结果忽略边距…;)外交官PDFDataGenerator.generateFirstPagePdf()和外交官PDFDataGenerator.generateOtherPagesPdf()返回什么?如何生成标题?那些DefaultPdfDocumentSettings
常量的值是什么?除此之外,代码看起来像我答案中的代码,它的工作方式和预期的一样。因此,这些物体或机械装置有一些特别之处,它起作用了。generateFirstPagePdf()和generateOtherPagesPdf()返回段落/元素。我只是没有注意到差异,因为DefaultPdfDocumentSettings.TOP_边距是20。我把上边距改为60,我注意到了差异,太棒了!我开始想知道这些方法可以返回什么,使结果忽略边距…;)