在这里只讲在生成pdf的文件过程中添加水印,至于向已存在的pdf文件中添加水印,那并不是本文所探讨的内容。
在网上搜了很多文字都不知道该怎么做。因为网上大部分都是讲的向已经存在的pdf文件中添加水印,而不是在写文件的过程中直接添加水印。
不过还是有找到下面的文章,
itext in action学习笔记,使我很快找到了办法。那就是通过添加pageEvent事件解决。
代码如下:
writer.setPageEvent(new Watermark("HELLO WORLD"));//水印内容
//在继承自PdfPageEventHelper类中的OnEndPage方法中添加水印
public void OnEndPage(PdfWriter writer, Document document) {
ColumnText.ShowTextAligned(writer.DirectContent,
Element.ALIGN_RIGHT,
header[0],
100.0f,
200.0f,
0);
}
不过水印只是出来了一条,并没有我想想的多条。
后来只有硬着头皮看itext5的文档《itext in action》 second Edition英文版,结果还是没正明白。
于是还是只有在网上搜,结果收到下面的
一个问答,里面的提问及回答给了我很大的启示
That method is obsolete.
Use page events to add watermarks (as many as you want).
br,
Bruno
看来还是得在pageEvent中做文章。有过了许久,突然灵光一线。出现一条就用一次,出现多条,用个循环打印不就是了吗?于是赶紧先看看ColumnText的ShowTextAligned()方法的api文档。
showTextAligned
public static void showTextAligned(PdfContentByte canvas,
int alignment,
Phrase phrase,
float x,
float y,
float rotation)Shows a line of text. Only the first line is written.
Parameters:
canvas - where the text is to be written to
alignment - the alignment
phrase - the Phrase with the text
x - the x reference position
y - the y reference position
rotation - the rotation to be applied in degrees counterclockwise
果然发现有横纵坐标的参数。于是乎将自定义的Watermark类改为如下:
public class Watermark extends PdfPageEventHelper {
Font FONT = new Font(FontFamily.HELVETICA, 30, Font.BOLD, new GrayColor(0.95f));
private String waterCont;//水印内容
public Watermark() {
}
public Watermark(String waterCont) {
this.waterCont = waterCont;
}
@Override
public void onEndPage(PdfWriter writer, Document document) {
for(int i=0 ; i<5; i++) {
for(int j=0; j<5; j++) {
ColumnText.showTextAligned(writer.getDirectContentUnder(),
Element.ALIGN_CENTER,
new Phrase(this.waterCont == null ? "HELLO WORLD" : this.waterCont, FONT),
(50.5f+i*350),
(40.0f+j*150),
writer.getPageNumber() % 2 == 1 ? 45 : -45);
}
}
}
}
问题自然就解决了。
分享到:
相关推荐
通过学习和掌握iText库,开发者可以灵活地生成和编辑PDF文档,包括添加水印这一关键功能。这不仅可以提升文档的专业性,还能有效保护知识产权和敏感信息。而`ResultPDF`这个文件名可能是最终生成带有水印的PDF文件,...
这是一个itext生成pdf水印的例子。其中需要几个文件。
itext5生成PDF(含水印文字及图片)的源代码,操作说明详细,代码完整可用。
本篇文章将深入探讨如何使用iText来生成PDF的目录。 首先,理解PDF目录的基本结构至关重要。PDF目录通常由一系列层次化的书签构成,每个书签对应文档中的一个部分、章节或子章节。在iText中,这些书签是通过`...
iText 是一个强大的 Java 类库,专为生成和编辑PDF文档而设计。它以其灵活性和易用性在开发社区中广受欢迎。通过iText,开发者可以轻松创建包含文本、图像、表格等各种元素的PDF文件。以下是一些关于如何使用iText...
用itext方法生成 与Word一样的目录
这篇博客 "freemarker+itext生成PDF" 可能详细介绍了如何结合这两者来生成PDF文件,这在报表生成、发票打印或任何需要静态化输出的场景中非常有用。 首先,让我们了解FreeMarker。FreeMarker是一个基于模板的语言,...
为了解决"Java使用Itext生成PDF中文不换行"的问题,我们可以采取以下几种策略: 1. **设置字体和编码**:确保使用支持中文的字体,如SimSun、Arial Unicode MS等,并正确设置PDF的编码为UTF-8。Itext中的`Font`类...
iText Java生成PDF 加密 水印 - glen的日志 - 网易博客
iText生成pdf解决中文不显示字库,pdf凉字不显示,由于生成iText插件生成pdf的时候中文会显示不出来,遇到过的是"凉"字,查到是字体库的原因,网上下载字体库msyh.ttc,生成的时候指定字体库,就可以解决了,小bug一...
**iText生成PDF实例详解** 在信息技术领域,PDF(Portable Document Format)文件因其跨平台、易阅读和保真性等特点,被广泛应用于文档共享和交流。而iText是一款开源的Java库,它允许开发者轻松地创建、修改和操作...
本文将详细介绍如何使用iText PDF库来为PDF文档添加中文水印,以及所需的jar包。 首先,iText是一个强大的Java库,用于创建、修改和优化PDF文档。它提供了一系列API,使得开发者可以方便地处理PDF的各种需求,包括...
在本文中,我们将深入探讨如何利用IText库生成这两种格式的文档,并通过实际的源码示例来理解其工作原理。 首先,让我们从PDF(Portable Document Format)开始。PDF是一种通用的文件格式,能够保留文档的原始格式...
本篇将深入探讨如何使用iText库来生成Microsoft Word(.doc)文件。iText是一个功能强大的Java库,允许开发者创建、修改和操作PDF和DOC文件。在这个场景中,我们将主要关注其在生成Word文档方面的应用。 首先,要...
总结一下,要实现在Spring Boot应用中使用iText生成带有页眉、页码、水印、目录和二维码的PDF,你需要: 1. 引入iText及相关库。 2. 创建HTML页面并将其转换为PDF。 3. 定制PDF内容,包括添加页眉、页码和水印。 4. ...
对于初学者来说,使用iText库生成PDF表格、一维条形码以及在PDF中插入图片是一项基础但十分重要的技能。以下内容将详细介绍这些知识点,并提供一些基本的代码示例来帮助理解。 首先,iText库中生成PDF表格的能力让...
本篇文章将详细介绍如何使用iText库生成PDF文件,以及在这个过程中可能遇到的关键知识点。 首先,我们需要了解iText的基本概念。iText是一个开源库,它提供了一系列API,使开发者能够方便地处理PDF文档。通过这个库...
"itext-2.1.7源码包以及 解决iText生成pdf时中文标点存在行首问题的修改class" 这个标题提到了两个关键点。首先,`itext-2.1.7`是开源Java库iText的一个版本,用于创建、修改和操作PDF文档。这个版本的源码包提供了...
在标题提到的场景中,“iText生成word需要的jar包”是指使用iText库来实现这个功能时所需的Java类库文件,也就是JAR文件。 首先,我们来看一下压缩包中的三个文件: 1. `iTextAsian.jar`:这是一个扩展包,专门...
Java中的iText库是一个强大的工具,用于生成和编辑PDF文档。在这个特定的场景中,我们关注的是如何使用iText来创建一个多页的Word模板。尽管iText主要支持PDF,但通过一些转换,它也能帮助创建复杂的Word文档。下面...