java使用itext的showTextAligned方法给pdf添加文字水印(watermark)
2013-07-22 17:39:59 来源: 评论:0 点击:3582
java的开源pdf库-Itext可以给pdf添加水印,主要是使用showTextAligned这个方法.ShowTextAligned方法可以设置输出水印的文本和水印文本的旋转角度,ShowTextAligned方法具体的参数说明如下:
public void ShowTextAligned(int alignment, String text, float x,float y, float rotation)
参数 | 参数说明: |
alignment | 左、右、居中(ALIGN_CENTER, ALIGN_RIGHT or ALIGN_LEFT) |
text | 要输出的文本 |
x | 文本输入的X坐标 |
y | 文本输入的Y坐标 |
rotation | 文本的旋转角度 |
将itext-5.4.2.zip压缩包解压缩后得到7个文件:itextpdf-5.4.2.jar(核心组件)、itextpdf-5.4.2-javadoc.jar(API文档)、itextpdf-5.4.2-sources.jar(源代码)、itext-xtra-5.4.2.jar、itext-xtra-5.4.2-javadoc.jar、itext-xtra-5.4.2-sources.jar ,如果是输出中文pdf,需要用到itext-asian.jar这个jar包,这个jar包在extrajars-2.3.zip中,下载地址:请点这里
private static void addWatermark(PdfStamper pdfStamper
, String waterMarkName) {
PdfContentByte content = null;
BaseFont base = null;
Rectangle pageRect = null;
PdfGState gs = new PdfGState();
try { // 设置字体
base = BaseFont.createFont("STSongStd-Light",
"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (base == null || pdfStamper == null) { return; }
// 设置透明度为0.4
gs.setFillOpacity(0.4f);
gs.setStrokeOpacity(0.4f);
int toPage = pdfStamper.getReader().getNumberOfPages();
for (int i = 1; i <= toPage; i++) {
pageRect = pdfStamper.getReader(). getPageSizeWithRotation(i);
// 计算水印X,Y坐标
float x = pageRect.getWidth() / 2;
float y = pageRect.getHeight() / 2;
//获得PDF最顶层
content = pdfStamper.getOverContent(i);
content.saveState();
// set Transparency
content.setGState(gs);
content.beginText();
content.setColorFill(BaseColor.GRAY);
content.setFontAndSize(base, 60);
// 水印文字成45度角倾斜
content.showTextAligned(Element.ALIGN_CENTER ,
waterMarkName, x, y, 45); content.endText(); }
} catch (Exception ex) {
ex.printStackTrace();
}
finally {
content = null;
base = null;
pageRect = null;
}
}
java使用itext的showTextAligned方法给pdf添加文字水印的完整代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
package com.pdf;
import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfWriter;
public class ItextHelloword {
public static void main(String[] args) throws Exception {
String pdfFilePath = "f:/itext-demo.pdf" ;
PdfReader pdfReader = new PdfReader( "f:/itext-demo.pdf" );
// Get the PdfStamper object
PdfStamper pdfStamper = new PdfStamper(pdfReader
, new FileOutputStream(
"f:/itext-demo22.pdf" ));
addWatermark(pdfStamper, "www.360sdn.com" );
pdfStamper.close();
}
private static void addWatermark(PdfStamper pdfStamper
, String waterMarkName) {
PdfContentByte content = null ;
BaseFont base = null ;
Rectangle pageRect = null ;
PdfGState gs = new PdfGState();
try {
// 设置字体
base = BaseFont.createFont( "STSongStd-Light" ,
"UniGB-UCS2-H" ,
BaseFont.NOT_EMBEDDED);
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (base == null || pdfStamper == null ) {
return ;
}
// 设置透明度为0.4
gs.setFillOpacity( 0 .4f);
gs.setStrokeOpacity( 0 .4f);
int toPage = pdfStamper.getReader().getNumberOfPages();
for ( int i = 1 ; i <= toPage; i++) {
pageRect = pdfStamper.getReader().
getPageSizeWithRotation(i);
// 计算水印X,Y坐标
float x = pageRect.getWidth() / 2 ;
float y = pageRect.getHeight() / 2 ;
//获得PDF最顶层
content = pdfStamper.getOverContent(i);
content.saveState();
// set Transparency
content.setGState(gs);
content.beginText();
content.setColorFill(BaseColor.GRAY);
content.setFontAndSize(base, 60 );
// 水印文字成45度角倾斜
content.showTextAligned(Element.ALIGN_CENTER
, waterMarkName, x,
y, 45 );
content.endText();
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
content = null ;
base = null ;
pageRect = null ;
}
}
}
|
相关推荐
itext生成pdf文档的各种方法,iText是著名的开放项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。
可以通过调整`Font`对象的属性(如大小、颜色、倾斜角度等)和`showTextAligned`方法的参数来定制水印的样式和位置。 5. **保存并关闭**: 完成水印添加后,不要忘记保存并关闭`PdfStamper`和`PdfReader`: ```...
java使用iText导出PDF文本绝对定位(实现方法) iText是一个流行的Java类库,用于生成PDF文档。下面我们将探讨如何使用iText在Java中导出PDF文本,并实现绝对定位。 iText简介 iText是一个开源的Java类库,用于...
这里,`beginText()`和`endText()`用于开始和结束文本的绘制,`showTextAligned()`方法用来在指定位置显示文本,其中角度参数(45)决定了水印的倾斜程度。 4. **保存并关闭对象**:完成水印添加后,记得保存修改并...
这里`ColumnText.showTextAligned()`方法用于在PDF上绘制文本。 4. **调整字体风格**:除了大小,你还可以改变字体的样式,如粗体、斜体。iText支持以下样式: - `Font.BOLD`:粗体 - `Font.ITALIC`:斜体 - `...
5. 添加水印,可能使用ColumnText的showTextAligned方法在页面上添加文本,或者通过PdfStamper的getOverContent添加图像水印。 6. 完成内容添加后,关闭PdfWriter和Document对象,保存PDF文件。 这个ITextDemo示例...
对于文字水印,可以使用`ColumnText.showTextAligned()`方法设置文字、字体、颜色和位置。 为了使水印更具一致性,开发者还可以调整其大小、角度、透明度以及放置的位置,使其适应不同页面的布局。此外,iText还...
ColumnText.showTextAligned(stamper.getOverContent(1), Element.ALIGN_CENTER, new Phrase("Confidential"), 300, 500, 45); stamper.close(); reader.close(); } catch (Exception e) { e.printStackTrace...
在本篇中,我们将深入探讨如何利用iText 2.1.7版本动态生成PDF实例,包括基本概念、关键类和方法的使用。 首先,我们需要了解iText的核心类。`Document`是所有PDF文档的基础,它定义了页面大小、边距等属性。`...
要实现在PDF中的绝对位置添加文本,我们需要使用`PdfCanvas`的`beginText()`和`endText()`方法来开启和结束文本绘制模式,然后通过`moveTo()`和`showTextAligned()`或`showText()`方法来设定文本的起始位置和显示...
`showTextAligned`方法用于在指定位置绘制文本,这里的坐标(36, 792)表示页面上的左下角位置(PDF坐标系统从左下角开始)。 在`My_itexpdf`这个压缩包文件中,可能包含了示例代码、字体文件、输入和输出的PDF文件...
这可以通过`ColumnText.showTextAligned()`方法实现,同时设置`PdfAction`和`PdfWriter`的`setBookmark()`方法。 8. **关闭目录**:最后,确保在文档关闭前调用`PdfWriter`的`closeOutlines()`方法,完成目录的构建...
本文将详细介绍这两个库在处理PDF时的核心功能和使用方法。 iTextPDF 5.5.10是iText库的一个版本,提供了全面的PDF生成和编辑功能。首先,我们来看如何生成PDF。在Java中,可以通过创建PdfWriter实例,然后通过...
通过`showTextAligned`方法,我们可以将水印文本居中放置在每一页上。字体大小、颜色和角度可以根据需求调整。 对于图像水印,我们可以使用`Image.getInstance`方法加载图像,并将其添加到PDF页面的覆盖内容层上。...
ColumnText.showTextAligned(document.getDirectContent(), Element.ALIGN_CENTER, new Phrase("页眉"), (document.getPageSize().getWidth() / 2), 36, 0); ColumnText.showImage(image, document....
ColumnText.showTextAligned(canvas, Element.ALIGN_CENTER, new Phrase("水印", font), 300, 750, 0); stamper.close(); reader.close(); ``` 这里,我们首先读取一个已有的PDF文件(`input.pdf`),然后创建一个...
使用`setFontAndSize()`方法设置字体大小和类型,`beginText()`和`showTextAligned()`方法来定位和显示文本。对于“第X页/共X页”的显示,我们可以计算当前页码(即事件调用的次数)并更新总页数。 4. **计算总页数...
ColumnText.showTextAligned( canvas, Element.ALIGN_CENTER, new Phrase("水印文本"), document右边界/2, document顶端边界/2, 45); } } writer.setPageEvent(new WatermarkEventListener()); ``` 5....
例如,`ColumnText.showTextAligned()`方法可以方便地在页面的特定位置放置文本,形成页眉或页脚。 5. **设置样式**:除了纯文本,我们还可以设置字体、大小、颜色等样式。`BaseFont`类可以加载系统字体,`Font`类...
在本文中,我们将深入探讨iTextPDF的核心特性、主要用途、API使用方法以及如何实现水印功能。 ### iTextPDF概述 iTextPDF由iText Software公司开发,它提供了全面的API,使得开发者能够轻松地在Java应用程序中操作...