2016-03-07 2 views
0

Поэтому я хочу не только добавлять текст в 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 вы можете перенаправить связанное решение, если это ваш любимый. IMHO здесь лучше, так как связанный применяется к существующим файлам 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

производства необходимые изменения. теперь работает нормально. –