2016-05-23 104 views
0

我正在使用PDFBox在Java中生成報告。我的要求之一是創建一個PDF文檔,其中包含公司徽標在頁面的頂部。我無法找到實現這一目標的方法。我在Java類中有以下方法:如何使用Apache PDFBox將圖像移動到PDF頁面的頂部

public void createPdf() { 

     PDDocument document = null; 

     PDPage page = null; 

     ServletContext servletContext = (ServletContext) FacesContext 
       .getCurrentInstance().getExternalContext().getContext(); 

     try { 

      File f = new File("Afiliado_2.pdf"); 

      if (f.exists() && !f.isDirectory()) { 
       document = PDDocument.load(new File("Afiliado_2.pdf")); 

       page = document.getPage(0); 
      } else { 

       document = new PDDocument(); 

       page = new PDPage(); 

       document.addPage(page); 
      } 

      PDImageXObject pdImage = PDImageXObject.createFromFile(
        servletContext.getRealPath("/resources/images/logo.jpg"), 
        document); 

      PDPageContentStream contentStream = new PDPageContentStream(
        document, page, AppendMode.APPEND, true); 


      contentStream.drawImage(pdImage, 0, 0); 

      // Make sure that the content stream is closed: 
      contentStream.close(); 

      // Save the results and ensure that the document is properly closed: 
      document.save("Afiliado_2.pdf"); 
      document.close(); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

該圖像當前出現在PDF的底部。我知道我需要修改的行是contentStream.drawImage(pdImage, 0, 0);,但是我需要指定哪些座標以便出現在頁面的頂部?

+0

也許'AppendMode.APPEND'與此有關? – UDKOX

+2

Maruans附加答案 - 對於現有文件,使用帶有第5個參數(resetContext)的PDPageContentStream構造函數可能會更安全。 –

回答

2

通常,PDF中頁面的座標系始於左下角。所以用

contentStream.drawImage(pdImage, 0, 0); 

你正在繪製你的圖像在那一點。你可以使用你的頁面的邊界

page.getMediaBox(); 

並使用它來定位你的圖像例如

PDRectangle mediaBox = page.getMediaBox(); 

// draw with the starting point 1 inch to the left 
// and 2 inch from the top of the page 
contentStream.drawImage(pdImage, 72, mediaBox.getHeight() - 2 * 72); 

其中PDF文件通常指定72點到1物理英寸。

+0

你爲什麼使用72? – Erick

+0

這是PDF的標準單位。 72點是一英寸。對不起,我認爲這是理所當然的。 –

+1

您應該使用裁剪框而不是媒體框。 – mkl

相關問題