问候,我有一个功能,把页码和标志在右上角。这段代码几乎在每一页都能正常工作。但是,在某些页面中,页码及其徽标不会显示。在另一页中,页码及其徽标在左下角颠倒显示。
有关于原因的想法吗?
代码如下,谢谢。
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();
}发布于 2020-08-29 00:08:27
我用这种方法解决了..。
...
int degree;
float tx;
float ty;
width = Math.round(pageSize.getWidth()*25.4/72); // pts to mm
height = Math.round(pageSize.getHeight()*25.4/72); // pts to mm
degree = page.getRotation();
// I want A4 portrait...
// It's landscape... change to portrait
if (degree == 90 || degree == 270 || width > height) {
page.setRotation(0);
}
// It is not A4... change to
if (width != 210.0 || height != 297.0) {
page.setMediaBox(PDRectangle.A4);
}
...
// Some pages are right, but with rotation. I may not rotate this pages, so
// I rotate the content
if (degree == 180) {
tx = (pageSize.getLowerLeftX() + pageSize.getUpperRightX()) / 2;
ty = (pageSize.getLowerLeftY() + pageSize.getUpperRightY()) / 2;
contentStream.transform(Matrix.getTranslateInstance(tx, ty));
contentStream.transform(Matrix.getRotateInstance(Math.toRadians(180), 0, 0));
contentStream.transform(Matrix.getTranslateInstance(-tx, -ty));
}
...https://stackoverflow.com/questions/63603179
复制相似问题