java pdf 加水印

引入依賴

<dependency>
    <groupId>com.itextpdf.tool</groupId>
    <artifactId>xmlworker</artifactId>
    <version>5.5.10</version>
</dependency>
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.10</version>
</dependency>

‘/static/fonts/SIMYOU.TTF’ 字體 本機沒有的話, 可以百度下載

/**
     * pdf 加水印
     *
     * @return
     */
    public byte[] pdfAddWaterMark(byte[] byes) {

        String fileName = UUID.randomUUID().toString() + ".pdf";
        String courseFile = "";
        try {
            // 第二種:獲取項目路徑    D:\git\daotie\daotie
            //生成臨時文件 , 讀取完刪除
            File directory = new File("");// 參數爲空
            courseFile = directory.getCanonicalPath() + "/";
        } catch (IOException e) {
            e.printStackTrace();
        }
        byte[] returnBytes = null;
        // 待加水印的文件
        PdfReader reader = null;
        PdfStamper stamper = null;
//        ByteArrayOutputStream baos = null;
        FileOutputStream os = null;
        try {
            reader = new PdfReader(byes);
            // 加完水印的文件
//            baos = new ByteArrayOutputStream();
//            stamper = new PdfStamper(reader, baos);
            // 加完水印的文件
            os = new FileOutputStream(courseFile + fileName);
            stamper = new PdfStamper(reader, os);

            int total = reader.getNumberOfPages() + 1;
            PdfContentByte content;
            // BaseFont font = BaseFont.createFont();
            BaseFont basefont = BaseFont.createFont("/static/fonts/SIMYOU.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            //這裏的字體設置比較關鍵,這個設置是支持中文的寫法
            /*BaseFont base = BaseFont.createFont("STSong-Light",
                    "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);// 使用系統字體*/

            /*//設置透明度
            PdfGState gs = new PdfGState();
            gs.setFillOpacity(1f);
            gs.setStrokeOpacity(1f);*/

            PdfContentByte under;
            com.itextpdf.text.Rectangle pageRect = null;

            // 循環對每頁插入水印
            for (int i = 1; i < total; i++) {
                pageRect = stamper.getReader().getPageSizeWithRotation(i);
                // 計算水印X,Y座標
                float x = (float) (pageRect.getWidth() / 1.98);
                float y = (float) (pageRect.getHeight() / 2.8);
                // 獲得PDF最頂層
                under = stamper.getOverContent(i);
                under.saveState();
                // set Transparency
                PdfGState gs = new PdfGState();
                // 設置透明度爲0.2
                gs.setFillOpacity(1.f);
                under.setGState(gs);
                under.restoreState();
                under.beginText();
                under.setFontAndSize(basefont, pageRect.getHeight() / 17);
                under.setColorFill(BaseColor.RED);

                // 水印文字成45度角傾斜
                System.out.println("width" + pageRect.getWidth());
                System.out.println("height" + pageRect.getHeight());
                System.out.println("x" + x);
                System.out.println("y" + y);
                under.showTextAligned(Element.ALIGN_CENTER, "圖片僅供預覽,不可用於商業用途", x, y, 45);
                // 添加水印文字
                under.endText();
                under.setLineWidth(1f);
                under.stroke();
            }
//            returnBytes = baos.toByteArray();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        } finally {
            try {
                stamper.close();
                if (os != null) {
                    os.close();
                }
                if (reader != null) {
                    reader.close();
                }
            } catch (DocumentException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章