【发布时间】:2020-12-15 13:57:01
【问题描述】:
问候, 我有一个将页码和徽标放在右上角的功能。 该代码几乎在每个页面中都可以正常工作。 但是,在某些页面中,页码及其徽标不显示。 在其他页面中,页码及其徽标倒置显示在左下角。
知道原因吗?
下面的代码,谢谢。
private byte[] setPageNumbers(byte[] pdftmp, Integer initialPage, Integer finalPage) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PDDocument document = PDDocument.load(pdftmp);
PDPage page;
String numberingFormat = " {0}";
int offset_X = 45;
int offset_Y = 803;
int page_counter = 1;
Color color = new Color(0);
float[] components = new float[] {color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f };
float x;
float y;
PDPageContentStream contentStream;
PDRectangle pageSize;
String text;
PDImageXObject pdImage;
for(int i = initialPage; i <= finalPage; i++) {
page = document.getPage(i);
pageSize = page.getMediaBox();
x = pageSize.getLowerLeftX();
y = pageSize.getLowerLeftY();
text = MessageFormat.format(numberingFormat,page_counter);
contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true);
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 11);
contentStream.setNonStrokingColor(new PDColor(components, PDDeviceRGB.INSTANCE));
contentStream.beginText();
contentStream.newLineAtOffset(x + pageSize.getWidth() - offset_X, y+offset_Y);
contentStream.showText(text);
contentStream.endText();
++page_counter;
pdImage = PDImageXObject.createFromFile(PDChoice.class.getResource("/images/logo.png").getPath(),document);
contentStream.drawImage(pdImage, x + pageSize.getWidth() - offset_X - 7, y + offset_Y - 2);
contentStream.close();
}
document.save(baos);
document.close();
return baos.toByteArray();
}
【问题讨论】:
-
A 您使用 MediaBox。请改用 CropBox。 B 考虑页面旋转。
-
谢谢 mkl。我发现有些页面是 Letter,而不是 A4。你是对的,旋转是 180°。我将尝试将 180° 页面或 Letter 页面的内容放入新的 180° A4 页面,然后将新页面旋转到 0°。谢谢!!
标签: java pdf-generation pdfbox