Java 使用Spring、IText和水印创建pdf
我有一个使用Java、Spring和IText创建PDF文件的应用程序 我想在pdf中添加水印 我已经找到了很多在已经保存的PDF中添加水印的例子。我想在保存PDF之前添加水印 我发现了一个使用ITextSharp做我想做的事情的例子,然而,它是针对.NET的。我在我的类中使用以下代码创建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
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时注意到的问题外,我现在已经可以工作了。你能给我的任何帮助都将不胜感激。谢谢