Java 如何使用itexpdf向pdf添加水印

Java 如何使用itexpdf向pdf添加水印,java,itextpdf,Java,Itextpdf,我使用下面的代码生成pdf文件,一切都很好,但我需要添加水印的pdf文件也交替颜色的行生成的pdf表 response.setHeader("Content-disposition", "attachment; filename=\"" + reportName + ".pdf\""); response.setContentType("application/pdf"); PdfWriter.getInstance(document,response.getOu

我使用下面的代码生成pdf文件,一切都很好,但我需要添加水印的pdf文件也交替颜色的行生成的pdf表

response.setHeader("Content-disposition", "attachment; filename=\"" + reportName + ".pdf\"");
        response.setContentType("application/pdf");
        PdfWriter.getInstance(document,response.getOutputStream());

        try {
            document.open();
            addTitlePage(document, reportName,path);

           /* Image image = Image.getInstance(path+"images/abi.png");
            image.setAbsolutePosition(40f, 770f);
            image.scaleAbsolute(70f, 50f);
            document.add(image);*/

            //float[] colsWidth = {1.5f,3f,4f,4f,2f};

            List<Float> colsWidth = new ArrayList<Float>();
            int iterator = 1;
           while (iterator <= headerMap.size()) {
               if(iterator==1){
                   colsWidth.add(1.5f); 
               }else{
                colsWidth.add(3f); 
               }
                iterator++;
            }
           float[] floatArray = ArrayUtils.toPrimitive(colsWidth.toArray(new Float[0]), 0.0F);

           PdfPTable table = new PdfPTable(floatArray);
            table.setWidthPercentage(98);
            table.setHorizontalAlignment(Element.ALIGN_CENTER);

            PdfPCell c1 = new PdfPCell();
            for (Iterator it = headerMap.keySet().iterator(); it.hasNext();) {
                String headerName = (String) headerMap.get(it.next());
                c1 = new PdfPCell(new Phrase(headerName, headerFont));
                c1.setBackgroundColor(BaseColor.LIGHT_GRAY);
                table.addCell(c1);
            }
            table.setHeaderRows(1);
            table = custDAO.creadPDFTable(query, table);
            document.add(table);
            document.addAuthor(userViewModel.getUsername());
            document.addCreationDate();
            document.addCreator("POC");
            document.close();
            response.flushBuffer();
private static void addTitlePage(Document document, String reportName,String path) throws DocumentException, MalformedURLException, IOException {
        Paragraph preface = new Paragraph();
        addEmptyLine(preface, 1);
        /**
         * Lets write a big header
         */
        Paragraph paragraph = new Paragraph(reportName, titleFont);
        paragraph.setAlignment(Element.ALIGN_CENTER);
        document.add(paragraph);

        /**
         * Add one empty line
         */
        addEmptyLine(preface, 1);
        document.add(preface);
        Image image = Image.getInstance(path+"/"+"/abilogo.PNG");
        image.setAbsolutePosition(40f, 770f);
        image.scaleAbsolute(70f, 50f);
        document.add(image);

    }
    private static void addEmptyLine(Paragraph paragraph, int number) {
        for (int i = 0; i < number; i++) {
            paragraph.add(new Paragraph(" "));
        }
    }
我主要关心的是添加水印,同时为行添加备用颜色

请帮助解决这个问题,因为我很长时间都无法解决这个问题


考虑

如果要将水印添加为图像,可以使用下面的代码。添加文本水印的另一种方法是使用注释

PdfReader pdfReader = null;
    Stream outputStream = null;
    PdfStamper pdfStamper = null;

    try
    {
        pdfReader = GetPdfReaderObject();
        outputStream = new FileStream(filePathDestination, FileMode.Create, FileAccess.Write, FileShare.None);
        pdfStamper = new PdfStamper(pdfReader, outputStream);

            PdfLayer layer = new PdfLayer("watermark", pdfStamper.Writer);

            for (int pageIndex = 1; pageIndex <= pdfReader.NumberOfPages; pageIndex++) {
                pdfStamper.FormFlattening = false;
                iTextSharp.text.Rectangle pageRectangle = pdfReader.GetPageSizeWithRotation(pageIndex);
                PdfContentByte pdfData = pdfStamper.GetOverContent(pageIndex);

                pdfData.BeginLayer(layer);

                PdfGState graphicsState = new PdfGState();
                graphicsState.FillOpacity = 0.5F;
                pdfData.SetGState(graphicsState);
                pdfData.BeginText();

                iTextSharp.text.Image watermarkImage = iTextSharp.text.Image.GetInstance(System.Drawing.Image.FromFile(watermarkImagePath), ImageFormat.Png);

                float width = pageRectangle.Width;
                float height = pageRectangle.Height;

                watermarkImage.SetAbsolutePosition(width / 2 - watermarkImage.Width / 2, height / 2 - watermarkImage.Height / 2);

                pdfData.AddImage(watermarkImage);
                pdfData.EndText();
                pdfData.EndLayer();
            }
        }
        pdfStamper.Close();
        outputStream.Close();
        outputStream.Dispose();
        pdfReader.Close();
        pdfReader.Dispose();

    } catch (Exception e) {
        ....
    }
}
PdfReader PdfReader=null;
Stream outputStream=null;
PdfStamper PdfStamper=null;
尝试
{
pdfReader=GetPdfReaderObject();
outputStream=新文件流(filePathDestination,FileMode.Create,FileAccess.Write,FileShare.None);
pdfStamper=新的pdfStamper(pdfReader,outputStream);
PdfLayer层=新的PdfLayer(“水印”,pdfStamper.Writer);
对于(int pageIndex=1;pageIndex
PdfReader pdfReader = null;
    Stream outputStream = null;
    PdfStamper pdfStamper = null;

    try
    {
        pdfReader = GetPdfReaderObject();
        outputStream = new FileStream(filePathDestination, FileMode.Create, FileAccess.Write, FileShare.None);
        pdfStamper = new PdfStamper(pdfReader, outputStream);

            PdfLayer layer = new PdfLayer("watermark", pdfStamper.Writer);

            for (int pageIndex = 1; pageIndex <= pdfReader.NumberOfPages; pageIndex++) {
                pdfStamper.FormFlattening = false;
                iTextSharp.text.Rectangle pageRectangle = pdfReader.GetPageSizeWithRotation(pageIndex);
                PdfContentByte pdfData = pdfStamper.GetOverContent(pageIndex);

                pdfData.BeginLayer(layer);

                PdfGState graphicsState = new PdfGState();
                graphicsState.FillOpacity = 0.5F;
                pdfData.SetGState(graphicsState);
                pdfData.BeginText();

                iTextSharp.text.Image watermarkImage = iTextSharp.text.Image.GetInstance(System.Drawing.Image.FromFile(watermarkImagePath), ImageFormat.Png);

                float width = pageRectangle.Width;
                float height = pageRectangle.Height;

                watermarkImage.SetAbsolutePosition(width / 2 - watermarkImage.Width / 2, height / 2 - watermarkImage.Height / 2);

                pdfData.AddImage(watermarkImage);
                pdfData.EndText();
                pdfData.EndLayer();
            }
        }
        pdfStamper.Close();
        outputStream.Close();
        outputStream.Dispose();
        pdfReader.Close();
        pdfReader.Dispose();

    } catch (Exception e) {
        ....
    }
}