2012-09-21 71 views
0

我使用下面的代码来生成PDF文件,一切都很好,并且工作正常,但是我需要在pdf表格中生成行的替换颜色。如何使用itexpdf为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(" ")); 
     } 
    } 

,这我使用的方法来创建pdftable.(rows)

public PdfPTable creadPDFTable(String query,PdfPTable table){ 
     int numberOfColumns=0,sno=1; 
     Connection connection = getConnection(); 
     if (connection != null) { 
      try { 
       PreparedStatement reportTablePS = connection.prepareStatement(query); 
       ResultSet reportTable_rst = reportTablePS.executeQuery(); 
       ResultSetMetaData reportTable_rsmd = reportTable_rst.getMetaData(); 
       numberOfColumns = reportTable_rsmd.getColumnCount(); 
       while (reportTable_rst.next()) { 
        table.addCell(new PdfPCell(new Paragraph(String.valueOf(sno), textFont))); 
          for (int columnIterator = 1; columnIterator <= numberOfColumns; columnIterator++) { 
           String column = reportTable_rst.getString(columnIterator); 
           table.addCell(new PdfPCell(new Paragraph(column, textFont))); 
          } 
          sno++; 
      } 
      } catch (Exception ex) { 
       ex.printStackTrace(); 
      }finally { 
       try { 
        closeConnection(connection, null, null); 
       } catch (Exception ex) { 
        ex.printStackTrace(); 
       } 
      } 
     } 
     return table; 
    } 

我主要关注的是加水印也加入其他颜色的行。

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

Registers

回答

1

如果您想添加水印图片,可使用下面的代码。另一种添加文字水印的方式是使用注释。

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) { 
     .... 
    } 
} 

如果您想添加其他水印,请不要忘记删除水印。