2016-03-07 103 views
0

因此,我不僅要在創建PDF時將文本添加到PDF中,還要同時添加背景圖像。我想知道這是否有可能,因爲我找不到任何示例,並且類似於此的唯一問題(This one)沒有給出提出問題的人的任何反饋,並且它未被標記爲已解決。PDFBox在創建文檔時添加背景

我用這個非常簡單的例子,此刻:

 PDDocument doc = null; 
     PDPage page = null; 

     try{ 
      doc = new PDDocument(); 
      page = new PDPage(); 

      doc.addPage(page); 
      PDFont font = PDType1Font.HELVETICA_BOLD; 

      PDPageContentStream content = new PDPageContentStream(doc, page); 
      content.beginText(); 
      content.setFont(font, 12); 
      content.moveTextPositionByAmount(100, 700); 
      content.drawString("Hello World"); 

      content.endText(); 
      content.close(); 
      doc.save("printme.pdf"); 
      doc.close(); 
     } catch (Exception e){ 
      System.out.println(e); 
     } 

感謝您的時間。

+1

這會幫助你http://stackoverflow.com/questions/8929954/watermarking -with-pdfbox – 0x44656e6e795279616e

+0

@ 0x594f4c4f203b29這是一個非常聰明的解決方案,首先生成文本,然後將圖像設置爲背景,如果您將其作爲解決方案,我會將其標記爲已解決。 –

+0

@ user3272243如果那個是你最喜歡的,你可以升級鏈接的解決方案。恕我直言,這裏的一個更好,因爲鏈接的文件適用於現有的PDF文件,並且您正在爲新創建的文件搜索某些內容。 –

回答

1
try { 
     PDDocument document = new PDDocument(); 
     PDPage page = new PDPage(PDPage.PAGE_SIZE_A4); 
     document.addPage(page); 
     PDFont font = PDType1Font.HELVETICA_BOLD; 
     PDPageContentStream contentStream = new PDPageContentStream(document, page, true, true); 
     addImageToPage(document, 0, 0, 4f, "D:/test.jpg", contentStream); 
     contentStream.beginText(); 
     contentStream.setFont(font, 12); 
     contentStream.moveTextPositionByAmount(100, 700); 
     contentStream.drawString("Hello World"); 
     contentStream.endText(); 
     contentStream.close(); 
     document.save("D:/mydoc.pdf"); 
    } catch (Exception e) { 
     System.out.println(e); 
    } 

方法來添加圖像:

public static void addImageToPage(PDDocument document, int x, int y, float scale, String imageFilePath, PDPageContentStream contentStream) 
     throws IOException { 
    BufferedImage tmp_image = ImageIO.read(new File(imageFilePath)); 
    BufferedImage image = new BufferedImage(tmp_image.getWidth(), tmp_image.getHeight(), 
      BufferedImage.TYPE_4BYTE_ABGR); 
    image.createGraphics().drawRenderedImage(tmp_image, null); 
    PDXObjectImage ximage = new PDPixelMap(document, image); 
    contentStream.drawXObject(ximage, x, y, ximage.getWidth() * scale, ximage.getHeight() * scale); 
} 
+1

爲什麼在文本之後添加圖像?除非圖像具有透明度,否則會覆蓋文字。 –

+1

進行了必要的更改。現在工作正常。 –