iText : How do I insert background image in the same document to be flushed to response

前端 未结 3 1521
野趣味
野趣味 2021-01-12 21:19

I am creating a PDF and writing the stream in response. Before writing in the stream, I want to add a background image as watermark in all the pages so that PDF document flu

相关标签:
3条回答
  • 2021-01-12 21:35

    I have solved this with Bruno's second option. Here is the code.

    public static String addBackgroundImageToPDF(ByteArrayOutputStream bos, String destPdfFileName, String templateImageFile)
    {
      PdfReader sourcePDFReader = null;
      try
      {
            sourcePDFReader = new PdfReader(bos.toByteArray());
            int noOfPages = sourcePDFReader.getNumberOfPages();
            PdfStamper stamp = new PdfStamper(sourcePDFReader, new FileOutputStream(destPdfFileName));
            int i = 0;
            Image templateImage = Image.getInstance(templateImageFile);
            templateImage.setAbsolutePosition(0, 0);
            PdfContentByte tempalteBytes;
            while (i < noOfPages)
            {
                  i++;
                  tempalteBytes = stamp.getUnderContent(i);    
                  tempalteBytes.addImage(templateImage);  
            }
             stamp.close();
            return destPdfFileName;
      }
      catch (Exception ex)
      {
            LOGGER.log(Level.INFO, "Error when applying template image as watermark");
      }
      finally
      {
            if (sourcePDFReader != null)
            {
                  sourcePDFReader.close();
            }
      }
    }
    
    0 讨论(0)
  • 2021-01-12 21:49

    You can choose between two options:

    1. Use the background image in a page event (to the 'under' content in the onEndPage() method)/
    2. Create the first PDF in memory, then add the background image in a second pass using the code you posted.

    I prefer option 1.

    0 讨论(0)
  • 2021-01-12 21:50

    I solved this using Bruno's first (recommended) approach.

    1) Create a page event helper with an onEndPage event:

    class PDFBackground extends PdfPageEventHelper {
    
        @Override
        void onEndPage(PdfWriter writer, Document document) {
            Image background = Image.getInstance("myimage.png");
            // This scales the image to the page,
            // use the image's width & height if you don't want to scale.
            float width = document.getPageSize().getWidth();
            float height = document.getPageSize().getHeight();
            writer.getDirectContentUnder()
                    .addImage(background, width, 0, 0, height, 0, 0);
        }
    
    }
    

    2) When creating your writer, register your page event helper:

    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
    writer.setPageEvent(new PDFBackground());
    
    0 讨论(0)
提交回复
热议问题