国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java給PDF文檔添加水印信息

這篇具有很好參考價(jià)值的文章主要介紹了Java給PDF文檔添加水印信息。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

? ? ? ? 在word生成pdf后,或者上傳pdf文件,用戶希望給pdf文檔添加水印信息,具體代碼如下

? 一. 首先pom中需要引入

<!-- PDF水印-->
 <dependency>
     <groupId>com.itextpdf</groupId>
     <artifactId>itextpdf</artifactId>
       <version>5.5.13</version>
 </dependency>
 <!-- 中文字體 -->
 <dependency>
     <groupId>com.itextpdf</groupId>
     <artifactId>itext-asian</artifactId>
     <version>5.2.0</version>
 </dependency>

核心代碼如下,寫在某個(gè) service 下面

public void signPdf(InputStream is, Supplier<OutputStream> os, List<WaterMarkInfoRequest> signList) {
       PdfStamper stamper = null;
       PdfReader reader = null;
       try {
           reader = new PdfReader(is);
           stamper = new PdfStamper(reader, os.get());
           for (WaterMarkInfoRequest s : signList) {
               TextWaterMarkRequest textWaterMark = s.getTextWaterMark();
               if (textWaterMark != null) {
                   //添加文字
                   BaseFont baseFont;
                   try {
                       baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
                   } catch (DocumentException | IOException e) {
                       log.info("pdf簽名獲取字體信息異常:{}", e.getMessage(), e);
                       throw new BusinessException(IO_ERROR.toErrorInfos("pdf簽名獲取字體信息異常"));
                   }
                   PdfContentByte content = stamper.getOverContent(textWaterMark.getPageNo());
                   PdfGState gState = new PdfGState();
                   //設(shè)置透明度
                   gState.setFillOpacity(textWaterMark.getAlpha());
                   content.setGState(gState);
                   content.beginText();
                   //設(shè)置字體
                   content.setFontAndSize(baseFont, textWaterMark.getFontSize());
                   //設(shè)置顏色
                   content.setColorFill(new BaseColor(0xFF << 24 | Integer.parseInt(textWaterMark.getFontColor(), 16)));

                   //設(shè)置水印內(nèi)容和位置
                   content.showTextAligned(Element.ALIGN_MIDDLE, textWaterMark.getText(), textWaterMark.getIntervalVertical(), textWaterMark.getIntervalHorizontal(), 0f);
                   content.endText();
               }
               ImageWaterMarkRequest imageWaterMark = s.getImageWaterMark();
               if (imageWaterMark != null) {
                   //添加圖片
                   PdfContentByte content = stamper.getOverContent(imageWaterMark.getPageNo());
                   PdfGState gState = new PdfGState();
                   //設(shè)置透明度
                   gState.setFillOpacity(imageWaterMark.getAlpha());
                   //image
                   Image image = Image.getInstance(EncryptUtil.base64DecoderToBytes(imageWaterMark.getBase64Str()));
                   image.setAbsolutePosition(imageWaterMark.getPositionX(), imageWaterMark.getPositionY());
                   if (imageWaterMark.getScaleAbsoluteX() != null && imageWaterMark.getScaleAbsoluteY() != null) {
                       image.scaleToFit(imageWaterMark.getScaleAbsoluteX(), imageWaterMark.getScaleAbsoluteY());
                   } else if (imageWaterMark.getScalePercent() != null && imageWaterMark.getScalePercent() > 0) {
                       image.scalePercent(imageWaterMark.getScalePercent());
                   }
                   content.addImage(image);
                   content.stroke();
               }

           }

       } catch (Exception e) {
           e.printStackTrace();
           log.info("添加簽名失?。簕}", e.getLocalizedMessage(), e);
           WM_WRITE_ERR.throwException();
       } finally {
           if (null != stamper) {
               try {
                   stamper.close();
               } catch (Exception e) {
                   log.info("關(guān)閉失?。簕}", e.getMessage(), e);
               }
           }
           if (null != reader) {
               reader.close();
           }
       }

   }

用到的實(shí)體類

public class ImageWaterMarkRequest{

    @ApiModelProperty(value = "需要添加的頁碼,默認(rèn)所有頁碼都添加")
    private Integer pageNo;
    @ApiModelProperty(value = "水平位置  左下角坐標(biāo)(0,0)")
    private Integer positionX;
    @ApiModelProperty(value = "垂直位置  左下角坐標(biāo)(0,0)")
    private Integer positionY;
    @ApiModelProperty(value = "指定圖像寬度  ")
    private Integer scaleAbsoluteX;
    @ApiModelProperty(value = "指定圖像高度 ")
    private Integer scaleAbsoluteY;
    @ApiModelProperty(value = "縮放比例 與指定尺寸沖突 優(yōu)先使用指定圖像尺寸")
    private Integer scalePercent;
    @ApiModelProperty(value = "圖片的二進(jìn)制數(shù)據(jù)")
    @NotNull
    private String base64Str;
    @ApiModelProperty(value = "透明度  0--1")
    private Float alpha;

    @ApiModelProperty(value = "透明度  0--1",hidden = true)
    private Float opacity;
    @ApiModelProperty(value = "是否水印打在最頂層  默認(rèn)true")
    private Boolean isTop;
}
public class WaterMarkInfoRequest {
    @ApiModelProperty(value = "文字水印信息")
    private TextWaterMarkRequest textWaterMark;
    @ApiModelProperty(value = "圖片水印信息")
    private ImageWaterMarkRequest imageWaterMark;
}

?方法測(cè)試文章來源地址http://www.zghlxwxcb.cn/news/detail-699786.html


import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;


public class PdfWaterMarkServiceImplTest {

    public static void main(String[] args) throws Exception {
        InputStream is = Files.newInputStream(Paths.get("/Users/cong/Downloads/a.pdf"));
        OutputStream outputStream = Files.newOutputStream(Paths.get("/Users/cong/Downloads/q-5.pdf"));
        ArrayList<WaterMarkInfoRequest> requests = new ArrayList<>();


        WaterMarkInfoRequest waterMarkInfo = addSign(1);
        WaterMarkInfoRequest waterMarkInfo2 = addSign(1);


        requests.add(waterMarkInfo);
        requests.add(waterMarkInfo2);
        //調(diào)用你自己服務(wù)的pdf水印方法
        new PdfWaterMarkServiceImpl().signPdf(is, () -> outputStream, requests);
        outputStream.close();
    }

    private static WaterMarkInfoRequest addSign(Integer pageNum) {
        WaterMarkInfoRequest waterMarkInfo = new WaterMarkInfoRequest();

        ImageWaterMarkRequest imageWaterMark = new ImageWaterMarkRequest();
        imageWaterMark.setPageNo(pageNum);
        imageWaterMark.setPositionY(200);
        imageWaterMark.setPositionX(200);
        imageWaterMark.setTop(true);
        imageWaterMark.setAlpha(1.0f);
        imageWaterMark.setBase64Str("圖片base64");

        waterMarkInfo.setImageWaterMark(imageWaterMark);

        TextWaterMarkRequest textWaterMark = new TextWaterMarkRequest();
        textWaterMark.setText("我是一個(gè)水印");
        textWaterMark.setRotation(0);
        textWaterMark.setAlpha(1.0f);
        textWaterMark.setFontSize(24);
        textWaterMark.setIntervalHorizontal(10);
        textWaterMark.setIntervalVertical(10);
        textWaterMark.setFontColor("800000");
        textWaterMark.setTop(true);
        textWaterMark.setPageNo(pageNum);

        waterMarkInfo.setTextWaterMark(textWaterMark);

        return waterMarkInfo;
    }

}

到了這里,關(guān)于Java給PDF文檔添加水印信息的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用itext7為pdf文檔添加水印

    iText7是一款功能強(qiáng)大的開源PDF處理庫,用于創(chuàng)建、編輯和處理PDF文檔。相比于iTextSharp,iText7具有更先進(jìn)的功能和更好的性能。 添加水印是iText7的一個(gè)常見應(yīng)用場(chǎng)景。水印可以用于保護(hù)文檔的版權(quán),標(biāo)識(shí)文檔的狀態(tài)或來源等。使用iText7添加水印可以通過以下步驟實(shí)現(xiàn): 導(dǎo)入

    2024年04月22日
    瀏覽(27)
  • java pdf加水印

    java pdf加水印

    本文將Base64編碼形式的pdf文件加水印,并輸出完成后的pdf的Base64編碼,也可以根據(jù)情況自行改動(dòng),輸出其他形式的內(nèi)容。 首先引入兩個(gè)包 ?完整代碼如下: 結(jié)果展示a.pdf: ?

    2024年02月12日
    瀏覽(22)
  • java將word轉(zhuǎn)換成pdf,并去除水印
  • pdf添加水印

    pdf添加水印

    引入依賴 添加水印 添加字體文件到resouresFontsimsun.ttc 用到的字體文件(幼圓常規(guī),C盤Windows/Fonts目錄下 測(cè)試用例

    2024年02月07日
    瀏覽(25)
  • Aspose.Pdf使用教程:在PDF文件中添加水印

    Aspose.PDF ?是一款高級(jí)PDF處理API,可以在跨平臺(tái)應(yīng)用程序中輕松生成,修改,轉(zhuǎn)換,呈現(xiàn),保護(hù)和打印文檔。無需使用Adobe Acrobat。此外,API提供壓縮選項(xiàng),表創(chuàng)建和處理,圖形和圖像功能,廣泛的超鏈接功能,圖章和水印任務(wù),擴(kuò)展的安全控件和自定義字體處理。本文將為你

    2024年02月01日
    瀏覽(22)
  • SpringBoot 實(shí)現(xiàn) PDF 添加水印

    SpringBoot 實(shí)現(xiàn) PDF 添加水印

    PDF(Portable Document Format,便攜式文檔格式)是一種流行的文件格式,它可以在多個(gè)操作系統(tǒng)和應(yīng)用程序中進(jìn)行查看和打印。在某些情況下,我們需要對(duì) PDF 文件添加水印,以使其更具有辨識(shí)度或者保護(hù)其版權(quán)。本文將介紹如何使用 Spring Boot 來實(shí)現(xiàn) PDF 添加水印的方式。 PDFBox

    2024年02月09日
    瀏覽(31)
  • SpringBoot實(shí)現(xiàn)pdf添加水印

    SpringBoot實(shí)現(xiàn)pdf添加水印

    在某些情況下,我們需要對(duì) PDF 文件添加水印,以使其更具有辨識(shí)度或者保護(hù)其版權(quán)。本文將介紹幾種方案來實(shí)現(xiàn)PDF添加水印。 git地址:https://gitee.com/ninesuntec/pdf-add-watermark PDFBox 是一個(gè)流行的、免費(fèi)的、用 Java 編寫的庫,它可以用來創(chuàng)建、修改和提取 PDF 內(nèi)容。PDFBox 提供了許

    2024年02月13日
    瀏覽(22)
  • 使用PyMuPDF添加PDF水印

    使用PyMuPDF添加PDF水印

    使用Python添加PDF水印的博客文章。 C:pythoncodenewpdfwatermark.py 在日常工作中,我們經(jīng)常需要對(duì)PDF文件進(jìn)行處理。其中一項(xiàng)常見的需求是向PDF文件添加水印,以保護(hù)文件的版權(quán)或標(biāo)識(shí)文件的來源。本文將介紹如何使用Python編程語言和PyMuPDF庫在PDF文件中添加水印。 在開始之前,確

    2024年02月11日
    瀏覽(43)
  • SpringBoot 實(shí)現(xiàn) PDF 添加水印方案

    PDF(Portable Document Format,便攜式文檔格式)是一種流行的文件格式,它可以在多個(gè)操作系統(tǒng)和應(yīng)用程序中進(jìn)行查看和打印。在某些情況下,我們需要對(duì) PDF 文件添加水印,以使其更具有辨識(shí)度或者保護(hù)其版權(quán)。本文將介紹如何使用 Spring Boot 來實(shí)現(xiàn) PDF 添加水印的方式。 PDFBox

    2024年02月13日
    瀏覽(27)
  • (Java)word轉(zhuǎn)pdf(aspose),pdf加水印(itextpdf),并支持POI模板(包括checkbox)導(dǎo)出

    (Java)word轉(zhuǎn)pdf(aspose),pdf加水印(itextpdf),并支持POI模板(包括checkbox)導(dǎo)出

    目錄 1、引入jar包 2、pdf處理工具類 3、poi模板導(dǎo)出工具類 4、測(cè)試類 5、模板 6、最終效果? 1、引入jar包 ? 2、pdf處理工具類 ?3、poi模板導(dǎo)出工具類 ?4、測(cè)試類 5、模板 6、最終效果?

    2024年02月06日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包