java pdf 水印_java 如何给pdf文件加水印

展开全部

Java生成PDF 加密 水印

1、iText简介

iText是一个开放源码的Java类库,可以62616964757a686964616fe78988e69d8331333335313139用来方便地生成PDF文件。大家通过访问http://sourceforge.net/project/showfiles.php?group_id=15255&release_id=167948

下载最新版本的类库,下载完成之后会得到一个.jar包,把这个包加入JDK的classpath即可使用。

如果生成的PDF文件中需要出现中文、日文、韩文字符,则还需要通过访问http://itext.sourceforge.net/downloads/iTextAsian.jar

下载iTextAsian.jar包。

关于iText类库的使用,http://www.lowagie.com/iText/tutorial/index.html

有比较详细的教程。该教程从入门开始,比较系统地介绍了在PDF文件中放入文字、图片、表格等的方法和技巧。

读完这片教程,大致就可以做一些从简单到复杂的PDF文件了。不过,试图通过教程解决在生成PDF文件过程中遇到的所有困难无疑是一种奢望。所以,阅读iText的api文档显得非常重要。读者在下载类库的同时,也可以下载类库的文档。

注:如果以上两个下载链接无法下载而且通过网络也找不到这个jar包的同志可以留下邮箱地址,我会在两个工作日之内发邮件过去。

以下部分我是我调试通过的源代码,提供大家参考:

import java.awt.*;

import java.io.*;

import com.lowagie.text.*;

import com.lowagie.text.Font;

import

com.lowagie.text.Rectangle;

import com.lowagie.text.pdf.*;

/**

* 最近的项目中使用Itext将txt文件转换为PDF文件, 并且实现对文件的一些权限控制。

现实对pdf文件加

*密,添加水印等。

*/

public class PDFConvertBL

{

//

txt原始文件的路径

private static final String txtFilePath = "d:/11.txt";

// 生成的pdf文件路径

private static final String pdfFilePath =

"d:/22.pdf";

// 添加水印图片路径

// private static final String

imageFilePath = "D:/33.jpg";

// 生成临时文件前缀

private static final

String prefix = "tempFile";

// 所有者密码

private static final String

OWNERPASSWORD = "12345678";

/**

* txt文件转换为pdf文件

*

* @param txtFile

txt文件路径

* @param pdfFile pdf文件路径

* @param userPassWord

用户密码

* @param waterMarkName 水印内容

* @param permission

操作权限

*/

public static void generatePDFWithTxt(String txtFile,

String pdfFile, String userPassWord, String

waterMarkName,

int permission)

{

try

{

// 生成临时文件

File file =

File.createTempFile(prefix, ".pdf");

//

创建pdf文件到临时文件

if (createPDFFile(txtFile, file))

{

// 增加水印和加密

waterMark(file.getPath(),

pdfFile, userPassWord, OWNERPASSWORD, waterMarkName, permission);

}

}

catch (Exception e)

{

e.printStackTrace();

}

}

/**

* 创建PDF文档

*

* @param txtFilePath

txt文件路径(源文件)

* @param pdfFilePath pdf文件路径(新文件)

*/

private

static boolean createPDFFile(String txtFilePath, File file)

{

// 设置纸张

Rectangle rect = new Rectangle(PageSize.A4);

//

设置页码

HeaderFooter footer = new HeaderFooter(new Phrase("页码:",

setChineseFont()), true);

footer.setBorder(Rectangle.NO_BORDER);

// step1

Document

doc = new Document(rect, 50, 50, 50, 50);

doc.setFooter(footer);

try

{

FileReader

fileRead = new FileReader(txtFilePath);

BufferedReader read = new

BufferedReader(fileRead);

// 设置pdf文件生成路径 step2

PdfWriter.getInstance(doc, new FileOutputStream(file));

//

打开pdf文件 step3

doc.open();

// 实例化Paragraph

获取写入pdf文件的内容,调用支持中文的方法. step4

while (read.ready())

{

// 添加内容到pdf(这里将会按照txt文件的原始样式输出)

doc.add(new Paragraph(read.readLine(), setChineseFont()));

}

// 关闭pdf文件 step5

doc.close();

return true;

}

catch (Exception e)

{

e.printStackTrace();

return false;

}

}

/**

* 在pdf文件中添加水印

*

* @param inputFile

原始文件

* @param outputFile 水印输出文件

* @param waterMarkName

水印名字

*/

private static void waterMark(String inputFile, String

outputFile, String userPassWord, String ownerPassWord,

String waterMarkName, int permission)

{

try

{

PdfReader reader = new PdfReader(inputFile);

PdfStamper stamper = new PdfStamper(reader, new

FileOutputStream(outputFile));

// 设置密码

stamper.setEncryption(userPassWord.getBytes(), ownerPassWord.getBytes(),

permission, false);

BaseFont base =

BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",

BaseFont.NOT_EMBEDDED);

int total = reader.getNumberOfPages() +

1;

// Image image =

Image.getInstance(imageFilePath);

//

image.setAbsolutePosition(200, 400);

PdfContentByte

under;

int j = waterMarkName.length();

char c =

0;

int rise = 0;

for (int i = 1; i < total;

i++)

{

rise = 500;

under =

stamper.getUnderContent(i);

// 添加图片

//

under.addImage(image);

under.beginText();

under.setColorFill(Color.CYAN);

under.setFontAndSize(base,

30);

// 设置水印文字字体倾斜 开始

if (j >=

15)

{

under.setTextMatrix(200,

120);

for (int k = 0; k < j;

k++)

{

under.setTextRise(rise);

c =

waterMarkName.charAt(k);

under.showText(c +

"");

rise -= 20;

}

}

else

{

under.setTextMatrix(180, 100);

for (int k = 0; k < j; k++)

{

under.setTextRise(rise);

c = waterMarkName.charAt(k);

under.showText(c +

"");

rise -= 18;

}

}

// 字体设置结束

under.endText();

// 画一个圆

//

under.ellipse(250, 450, 350, 550);

//

under.setLineWidth(1f);

// under.stroke();

}

stamper.close();

}

catch (Exception

e)

{

e.printStackTrace();

}

}

/**

* 设置中文

*

* @return Font

*/

private static Font setChineseFont()

{

BaseFont base =

null;

Font fontChinese = null;

try

{

base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",

BaseFont.EMBEDDED);

fontChinese = new Font(base, 12,

Font.NORMAL);

}

catch (DocumentException e)

{

e.printStackTrace();

}

catch (IOException

e)

{

e.printStackTrace();

}

return fontChinese;

}

public static void main(String[] args)

{

generatePDFWithTxt(txtFilePath, pdfFilePath, "123", "水印文字", 16);

}

}

文章参考一些网络博客稍加修改调试,特此申明

http://hi.baidu.com/sx_python/item/15081531ad7d1bc21b96965e

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

好的,以下是使用 Java 语言实现给 PDF 文件水印的代码: ```java import com.itextpdf.kernel.color.Color; import com.itextpdf.kernel.geom.Rectangle; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfPage; import com.itextpdf.kernel.pdf.PdfWriter; import com.itextpdf.kernel.pdf.canvas.PdfCanvas; import com.itextpdf.layout.Document; import com.itextpdf.layout.element.Paragraph; import com.itextpdf.layout.property.TextAlignment; import java.io.File; import java.io.IOException; public class PdfWatermark { public static void main(String[] args) throws IOException { String srcFile = "document.pdf"; // 原始 PDF 文件 String destFile = "document_with_watermark.pdf"; // 水印后的 PDF 文件 String watermark = "Confidential"; // 要添水印文本 addWatermark(srcFile, destFile, watermark); // 调用添水印的方法 } public static void addWatermark(String srcFile, String destFile, String watermark) throws IOException { PdfDocument pdfDoc = new PdfDocument(new PdfReader(srcFile), new PdfWriter(destFile)); Document doc = new Document(pdfDoc); for (int pageNum = 1; pageNum <= pdfDoc.getNumberOfPages(); pageNum++) { PdfPage page = pdfDoc.getPage(pageNum); Rectangle pageSize = page.getPageSize(); PdfCanvas canvas = new PdfCanvas(page); canvas.beginText(); canvas.setFontAndSize(null, 50); canvas.setColor(Color.GRAY, true); canvas.setTextMatrix(pageSize.getWidth() / 2, pageSize.getHeight() / 2); canvas.showTextAligned(new Paragraph(watermark).setBold().setFontColor(Color.GRAY).setTextAlignment(TextAlignment.CENTER), pageSize.getWidth() / 2, pageSize.getHeight() / 2, pageNum, TextAlignment.CENTER, com.itextpdf.kernel.geom.VerticalAlignment.MIDDLE, 45); canvas.endText(); } doc.close(); System.out.println("水印成功!"); } } ``` 以上代码中,我们使用了 iText 库来操作 PDF 文件。在添水印时,我们首先打开原始 PDF 文件,并创建一个 Document 对象。然后,我们遍历 PDF 文件中的所有页面,为每个页面添水印。为了添水印,我们使用了 PdfCanvas 类,它提供了一组方法来绘制文本、图形等。在我们的例子中,我们使用 beginText() 方法开始绘制文本,setFontAndSize() 方法设置字体和字号,setColor() 方法设置颜色,setTextMatrix() 方法设置文本的位置,showTextAligned() 方法绘制文本,并使用 endText() 方法结束绘制。最后,我们使用 Document 对象的 close() 方法关闭 PDF 文件,并输出一条水印成功的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值