要给 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() 方法结束绘制。

然后,我们使用 PdfImportedPagePdfContentByte 对象将原始 PDF 文件的内容复制到输出文件中。

最后,我们关闭所有相关的资源,并打印出成功的消息。

请注意,上述代码中使用的是 iText 5 库。如果您使用的是 iText 7 库,请使用相应的类和方法进行修改。


原文地址: https://www.cveoy.top/t/topic/qgrJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录