Java PDF 水印添加:使用 iText 库实现
要给 PDF 文件加水印,可以使用 Java 的 iText 库。以下是一个示例代码,演示如何将水印添加到 PDF 文件中:
import com.itextpdf.text.Document;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import java.io.FileOutputStream;
public class WatermarkExample {
public static void main(String[] args) {
try {
String inputFile = 'input.pdf';
String outputFile = 'output.pdf';
String watermarkText = 'Confidential';
// 读取PDF文件
PdfReader reader = new PdfReader(inputFile);
// 创建输出文件的输出流
FileOutputStream outputStream = new FileOutputStream(outputFile);
// 创建PDF文档
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, outputStream);
document.open();
// 添加水印
PdfContentByte content = writer.getDirectContentUnder();
Font font = new Font(Font.FontFamily.HELVETICA, 50);
BaseFont baseFont = font.getBaseFont();
content.setFontAndSize(baseFont, 50);
PdfGState gState = new PdfGState();
gState.setFillOpacity(0.3f);
content.setGState(gState);
content.setColorFill(BaseColor.LIGHT_GRAY);
content.beginText();
content.showTextAligned(Element.ALIGN_CENTER, watermarkText, document.getPageSize().getWidth() / 2, document.getPageSize().getHeight() / 2, 45);
content.endText();
// 将原始PDF文件的内容复制到输出文件中,并关闭相关资源
PdfImportedPage page;
PdfContentByte cb = writer.getDirectContent();
int pageCount = reader.getNumberOfPages();
for (int i = 1; i <= pageCount; i++) {
page = writer.getImportedPage(reader, i);
cb.addTemplate(page, 0, 0);
}
outputStream.flush();
document.close();
outputStream.close();
reader.close();
System.out.println('水印添加成功!');
} catch (Exception e) {
e.printStackTrace();
}
}
}
在上面的代码中,首先我们使用 PdfReader 读取输入的 PDF 文件。然后,我们创建一个 Document 对象和一个 PdfWriter 对象,用于创建输出文件。
接下来,我们使用 PdfContentByte 对象获取输出文件的内容,并使用 setFontAndSize() 方法设置水印的字体和大小。使用 setGState() 方法设置透明度和颜色。然后使用 beginText() 方法开始绘制文本,使用 showTextAligned() 方法在页面的中心位置绘制水印文本,最后使用 endText() 方法结束绘制。
然后,我们使用 PdfImportedPage 和 PdfContentByte 对象将原始 PDF 文件的内容复制到输出文件中。
最后,我们关闭所有相关的资源,并打印出成功的消息。
请注意,上述代码中使用的是 iText 5 库。如果您使用的是 iText 7 库,请使用相应的类和方法进行修改。
原文地址: https://www.cveoy.top/t/topic/qgrJ 著作权归作者所有。请勿转载和采集!