我正在尝试使用 itextpdf 生成 pdf,但是当表格扩展到下一页时,颜色逐渐褪色。假设我生成了 4 页 pdf,那么在第 1 页和第 4 页中它没问题,但在第 2 页和第 3 页中表格内容颜色正在褪色。请找到随附的屏幕截图。
这很奇怪,请帮助我。
以下是代码:
public class PdfGenerator {
public static void main(String[] args) throws IOException {
ClassPathResource resource = new ClassPathResource("PedTemplate.pdf");
File file = new File(resource.getFile().getAbsolutePath());
CustomPageDuplicationEventHandler z = null;
try (PdfReader reader = new PdfReader(file);
) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter writer = new PdfWriter(baos);
PdfDocument destDoc = new PdfDocument(reader, writer);
PdfReader reader2 = new PdfReader(file);
PdfDocument srcDoc = new PdfDocument(reader2);
z = new CustomPageDuplicationEventHandler(srcDoc);
destDoc.addEventHandler(PdfDocumentEvent.END_PAGE, z);
Document document = new Document(destDoc);
document.setMargins(95, 24, 100, 24);
srcDoc.copyPagesTo(1, 1, destDoc);
for (int i = 0; i < 3; i++) {
Table table2 = new Table(4);
table2.addHeaderCell(new Cell(1, 4).add(new Paragraph("Female Head Circumference (0-36mo)")).setBold().setPaddingLeft(5).setBorderLeft(new SolidBorder(3)));
table2.addHeaderCell(new Cell().add(new Paragraph("DATE")).setBold().setPaddingLeft(5).setBorderRight(Border.NO_BORDER).setBorderLeft(Border.NO_BORDER).setBorderBottom(Border.NO_BORDER));
table2.addHeaderCell(new Cell().add(new Paragraph("HEAD CIRCUMFERENCE (CM)")).setBold().setPaddingLeft(5).setBorderRight(Border.NO_BORDER).setBorderLeft(Border.NO_BORDER).setBorderBottom(Border.NO_BORDER));
table2.addHeaderCell(new Cell().add(new Paragraph("PERCENTILE")).setBold().setPaddingLeft(5).setBorderRight(Border.NO_BORDER).setBorderLeft(Border.NO_BORDER).setBorderBottom(Border.NO_BORDER)).setFontSize(7);
table2.addHeaderCell(new Cell().add(new Paragraph("Z-SCORE")).setBold().setPaddingLeft(5).setBorderRight(Border.NO_BORDER).setBorderLeft(Border.NO_BORDER).setBorderBottom(Border.NO_BORDER));
for (int j = 0; j < 50; j++) {
table2.addCell(new Cell().add(new Paragraph("mm/dd/yyyy")).setPaddingLeft(5).setBorderRight(Border.NO_BORDER).setBorderLeft(Border.NO_BORDER).setBorderTop(Border.NO_BORDER));
table2.addCell(new Cell().add(new Paragraph(String.valueOf(j + 1))).setPaddingLeft(5).setBorderRight(Border.NO_BORDER).setBorderLeft(Border.NO_BORDER).setBorderTop(Border.NO_BORDER));
table2.addCell(new Cell().add(new Paragraph("#.#%")).setPaddingLeft(5).setBorderRight(Border.NO_BORDER).setBorderLeft(Border.NO_BORDER).setBorderTop(Border.NO_BORDER)).setFontSize(8);
table2.addCell(new Cell().add(new Paragraph("#.##")).setPaddingLeft(5).setBorderRight(Border.NO_BORDER).setBorderLeft(Border.NO_BORDER).setBorderTop(Border.NO_BORDER));
}
table2.setBorder(new SolidBorder(1));
table2.setWidth(767);
table2.setMarginTop(20);
document.add(table2);
}
destDoc.removeEventHandler(PdfDocumentEvent.END_PAGE, z);
document.close();
destDoc.close();
byte[] pdfAsBytes = baos.toByteArray();
FileOutputStream os = new FileOutputStream("FinalOutput.pdf");
os.write(pdfAsBytes);
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
static class CustomPageDuplicationEventHandler implements IEventHandler {
private final PdfDocument srcDoc;
public CustomPageDuplicationEventHandler(PdfDocument srcDoc) {
this.srcDoc = srcDoc;
}
@Override
public void handleEvent(Event event) {
System.out.println("Event");
PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
PdfDocument pdfDoc = docEvent.getDocument();
PdfPage originalPage = srcDoc.getPage(1);
pdfDoc.addPage(originalPage.copyTo(pdfDoc));
}
}
}
实际上,我想使用一个 pdf 模板,它只有一页,所以我需要复制该页面,但 eventListner 没有复制到第二页,所以第一次我手动复制页面,然后事件列表器工作正常.
但是为什么内容会变淡,我不明白,请在这里帮助我。
这似乎是一个问题,因为您正在使用 setBold 方法。 这是一个黑客实现,可以设置粗体文本,而不需要专门的字体。
您可以尝试查看是否可以解决该问题的方法是:https://kb.itextpdf.com/itext/how-can-i-use-regular-and-bold-in-a-single-string