Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Spring、IText和水印创建pdf_Java_Spring_Pdf_Itext - Fatal编程技术网

Java 使用Spring、IText和水印创建pdf

Java 使用Spring、IText和水印创建pdf,java,spring,pdf,itext,Java,Spring,Pdf,Itext,我有一个使用Java、Spring和IText创建PDF文件的应用程序 我想在pdf中添加水印 我已经找到了很多在已经保存的PDF中添加水印的例子。我想在保存PDF之前添加水印 我发现了一个使用ITextSharp做我想做的事情的例子,然而,它是针对.NET的。我在我的类中使用以下代码创建pdf文档 protected void buildPdfDocument(Map model, Document document, PdfWriter writer, HttpServletRequest

我有一个使用Java、Spring和IText创建PDF文件的应用程序

我想在pdf中添加水印

我已经找到了很多在已经保存的PDF中添加水印的例子。我想在保存PDF之前添加水印

我发现了一个使用ITextSharp做我想做的事情的例子,然而,它是针对.NET的。我在我的类中使用以下代码创建pdf文档

protected void buildPdfDocument(Map model, Document document, PdfWriter writer, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

    response.setContentType("application/pdf");
    ProgramCmd programCmd = (ProgramCmd) request.getSession().getAttribute("programCmd ");
    List<Courses> list = programCmd.getCoursesList();
    List<Events> eventsList = programCmd.getEventsList();
    FONT_SIZE_16_BOLD.setColor(232, 177, 0);
    // Print Header
    Paragraph paragraph = new Paragraph("Title",FONT_SIZE_16_BOLD);
    paragraph.setAlignment(Element.ALIGN_CENTER);
    document.add(paragraph);
    paragraph = new Paragraph("***This is Not Official***",FONT_SIZE_12_BOLD);
    paragraph.setAlignment(Element.ALIGN_CENTER);
    document.add(paragraph);
    paragraph = new Paragraph("Create Date: " + todaysDate,FONT_SIZE_12_BOLD);
    paragraph.setAlignment(Element.ALIGN_CENTER);
    document.add(paragraph);
}
受保护的void buildPdfDocument(映射模型、文档文档、PdfWriter writer、HttpServletRequest、,
HttpServletResponse)引发异常{
response.setContentType(“application/pdf”);
ProgramCmd ProgramCmd=(ProgramCmd)request.getSession().getAttribute(“ProgramCmd”);
List List=programCmd.getCoursesList();
List eventsList=programCmd.getEventsList();
字体大小16粗体设置颜色(232,177,0);
//打印页眉
段落=新段落(“标题”,字体大小为16粗体);
段落.设置对齐(元素.对齐\u中心);
文件.添加(第段);
段落=新段落(“***这不是正式的***”,字体大小为12粗体);
段落.设置对齐(元素.对齐\u中心);
文件.添加(第段);
段落=新段落(“创建日期:+todaysDate,字体大小12粗体);
段落.设置对齐(元素.对齐\u中心);
文件.添加(第段);
}
如果你想让我发布其他代码,请告诉我


谢谢。

本书第一版第14章有一个例子“WatermarkExample.java”。您可以在下载示例的源代码,当然,我也鼓励您购买这本书

谢谢你宣传我的书《灰胡子极客》(值得投票)

让我详细说明一下这个问题:

不清楚您是想在创建文档时(通过页面事件完成)还是在创建文档后(通过
PdfStamper
完成)添加水印

以下是两个选项的示例:

  • 在中,我们扩展了
    PdfPageEventHelper
    并实现了
    onEndPage()
    方法。如文档所述,您不应该向Document类添加任何内容,也不应该使用onStartPage()方法添加内容。(更多信息请参见)
  • 在中,我们使用
    PdfStamper
    PdfReader
    向现有PDF添加背景。创建
    PdfReader
    实例不需要磁盘上有文件。您可以先在内存中创建文件(例如,使用
    ByteArrayOutputStream
    ),然后将字节传递给
    PdfReader
    构造函数

  • 谢谢你的回复。我使用了你给我指出的例子,部分地解决了这个问题,但我有一个问题希望你能帮助我。我正在pdf中使用PdfPTables。无论我使用图像还是文本,水印似乎都不会出现在表格上。这是iText固有的问题吗?谢谢。看起来你正在现有内容下添加水印。如果现有内容是不透明的,它将覆盖水印。如果希望水印覆盖现有内容,则需要使用getDirectContent()而不是getDirectContentUnder()。您可能还希望使水印透明:谢谢您的回复。我正在使用PdfPageEventHelper b/c创建文档时要添加水印。除了我在回复@graybeardgeek时注意到的问题外,我现在已经可以工作了。你能给我的任何帮助都将不胜感激。谢谢