pdf添加水印

import java.awt.FontMetrics;
import java.io.*;

import javax.swing.JLabel;

import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
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.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

/**
 * Pdf 添加水印
 *
 */
public class PdfWaterMarkUtil {
    public static void main(String[] args) throws DocumentException, IOException {
        // 将pdf文件先加水印然后输出
        addPDFWaterMark("", "","");
    }

    /**
     *
     * @param output
     *             输出文件的位置
     * @param input
     *            原PDF位置
     * @param waterMarkName
     *            页脚添加水印
     * @throws DocumentException
     * @throws IOException
     */
    public static void addPDFWaterMark(String output, String input, String waterMarkName) {
        BufferedOutputStream bos = null;
        try {
            bos = new BufferedOutputStream(new FileOutputStream(new File(output)));
            PdfReader reader = new PdfReader(input);
            PdfStamper stamper = new PdfStamper(reader, bos);

            // 获取总页数 +1, 下面从1开始遍历

            int total = reader.getNumberOfPages() + 1;
            // 使用classpath下面的字体库

            BaseFont base = null;
            base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
            // 间隔

            int interval = -15;
            // 获取水印文字的高度和宽度

            int textH = 0, textW = 0;
            JLabel label = new JLabel();
            label.setText(waterMarkName);
            FontMetrics metrics = label.getFontMetrics(label.getFont());
            textH = metrics.getHeight();
            textW = metrics.stringWidth(label.getText());
            System.out.println("textH: " + textH);
            System.out.println("textW: " + textW);

            // 设置水印透明度

            PdfGState gs = new PdfGState();
            gs.setFillOpacity(0.2f);
            gs.setStrokeOpacity(0.7f);

            Rectangle pageSizeWithRotation = null;
            PdfContentByte content = null;
            for (int i = 1; i < total; i++) {
                // 在内容上方加水印

                content = stamper.getOverContent(i);
                // 在内容下方加水印

                // content = stamper.getUnderContent(i);

                content.saveState();
                content.setGState(gs);

                // 设置字体和字体大小

                content.beginText();
                content.setFontAndSize(base, 20);

                // 获取每一页的高度、宽度

                pageSizeWithRotation = reader.getPageSizeWithRotation(i);
                float pageHeight = pageSizeWithRotation.getHeight();
                float pageWidth = pageSizeWithRotation.getWidth();

                // 根据纸张大小多次添加, 水印文字成30度角倾斜

                for (int height = interval + textH; height < pageHeight; height = height + textH * 6) {
                    for (int width = interval + textW; width < pageWidth + textW; width = width + textW * 2) {
                        content.showTextAligned(Element.ALIGN_LEFT, waterMarkName, width - textW, height - textH, 30);
                    }
                }

                content.endText();
            }

            // 关流

            stamper.close();
            reader.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }




    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
为了保护PDF文件中的内容不被不良用户盗用或复制,我们可以添加水印水印是一种特殊的图形或文字,可以在PDF文档的任何位置显示。在PHP开发中,我们可以使用phpoffice/phpword扩展来完成PDF添加水印的功能。 PHPoffice是一个开源的PHP办公套件,支持多种文档格式,包括doc、docx、xls、xlsx、ppt、pptx和PDF。使用PHPoffice中的PhpWord类,我们可以快速创建和编辑Word文档。而在创建PDF文档的时候,我们可以使用phpoffice/phpword扩展提供的TCPDF类(TCPDF是一个流行的PDF生成库)。 添加水印的步骤如下: 1. 首先,我们需要创建一个TCPDF实例。 2. 然后,我们可以使用Tcpdf类中提供的AddWatermarkImage(添加图片水印)或AddWatermarkText(添加文字水印)方法来添加水印。 3. 最后,我们可以调用TCPDF实例的Output方法来输出PDF文件。 以下是一个简单的代码示例: <?php use PhpOffice\PhpWord\IOFactory; use PhpOffice\PhpWord\PhpWord; use TCPDF; // 创建TCPDF实例 $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); // 添加页面 $pdf->AddPage(); // 添加内容 $pdf->SetFont('stsongstdlight', '', 10); $pdf->Write(0, '这是一个PDF文件。'); // 添加水印 $pdf->AddWatermarkText('CONFIDENTIAL'); // 输出PDF文件 $pdf->Output('example.pdf', 'D'); ?> 在这个示例中,我们创建了一个TCPDF实例,并向其添加一个页面和一些内容。然后,我们使用AddWatermarkText方法添加了一个文本水印。最后,我们调用Output方法将PDF文件下载到用户计算机上。 总之,在PHP开发中,使用phpoffice/phpword扩展中的TCPDF类可以轻松完成PDF添加水印的功能。通过添加水印,我们可以有效地保护PDF文件的内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没事搞点事做serendipity

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值