Java Apache PDFBox PDPageContentStream showText和drawImage有时不';不工作或显示颠倒

Java Apache PDFBox PDPageContentStream showText和drawImage有时不';不工作或显示颠倒,java,pdf-generation,pdfbox,Java,Pdf Generation,Pdfbox,问候,, 我有一个功能,将页码和徽标放在右上方。 代码在几乎每一页都能正常工作。 但是,在某些页面中,页码及其徽标不显示。 在另一个页面中,页码及其徽标在左下角上下颠倒显示 知道原因吗 下面的代码,谢谢 private byte[] setPageNumbers(byte[] pdftmp, Integer initialPage, Integer finalPage) throws IOException { ByteArrayOutputStream baos = new B

问候,, 我有一个功能,将页码和徽标放在右上方。 代码在几乎每一页都能正常工作。 但是,在某些页面中,页码及其徽标不显示。 在另一个页面中,页码及其徽标在左下角上下颠倒显示

知道原因吗

下面的代码,谢谢

    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();
}
private byte[]setPageNumber(byte[]pdftmp,Integer initialPage,Integer finalPage)引发IOException{
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
PDDocument document=PDDocument.load(pdftmp);
PDPage;
字符串numberingFormat=“{0}”;
int offset_X=45;
int offset_Y=803;
int page_计数器=1;
颜色=新颜色(0);
float[]components=newfloat[]{color.getRed()/255f,color.getGreen()/255f,color.getBlue()/255f};
浮动x;
浮动y;
PDPageContentStream-contentStream;
页面大小;
字符串文本;
PDImageXObject pdImage;
对于(inti=initialPage;i我用这种方法求解

...
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));
}
...

A您使用的是MediaBox。改用CropBox。B考虑页面旋转。谢谢mkl。我发现一些页面是字母,而不是A4。您是对的,旋转角度是180°。我将尝试将180°页面或字母页面的内容转换为新的180°A4页面,然后将新页面旋转到0°。谢谢!!