2016-03-07 66 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

进行了必要的更改。现在工作正常。 –