亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java批量向PDF文件中添加圖像水印實(shí)現(xiàn)細(xì)節(jié)

 更新時(shí)間:2023年05月18日 10:35:22   作者:Gloria  
這篇文章主要為大家介紹了Java批量向PDF文件中添加圖像水印實(shí)現(xiàn)細(xì)節(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

水印一般用于標(biāo)注文檔的版權(quán)信息、作者、所屬機(jī)構(gòu)或者文檔屬性等。不同于文本批注等,文字水印是繪制到頁面中的元素,所以不會(huì)被輕易刪除。因此,水印也是一種很好的防偽手段。水印又分為文本水印和圖片水印兩種。之前已經(jīng)介紹過向PDF中添加文本水印的方法。這次,我將分享通過Java代碼給PDF文檔添加圖像水印的具體方法和示例代碼。使用到的工具是Free Spire.PDF for Java(免費(fèi)版)。

程序環(huán)境

IntelliJ IDEA 2018 (jdk 1.8.0)
在進(jìn)行操作之前先導(dǎo)入JAR包,請(qǐng)參考以下兩種導(dǎo)入方式:
方法一:如果您使用的是 maven,先創(chuàng)建maven項(xiàng)目。然后通過添加以下代碼來配置pom.xml 文件,再點(diǎn)擊Import Changes將 JAR文件導(dǎo)入到應(yīng)用程序中。

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.pdf.free</artifactId>
        <version>5.1.0</version>
    </dependency>
</dependencies>

方法二:如果您沒有使用 maven,則可以從此鏈接下載Free Spire.PDF for Java,找到lib文件夾下的Spire.Pdf.jar并進(jìn)行解壓;然后在IDEA中創(chuàng)建一個(gè)新項(xiàng)目,依次點(diǎn)擊“文件”(File),“項(xiàng)目結(jié)構(gòu)”(Project Structure),“組件”(Modules),“依賴項(xiàng)”(Dependencies),再點(diǎn)擊右方綠色“+”下的第一個(gè)選項(xiàng)“JAR文件或路徑”(JARs or Directories),找到解壓后的Spire.Pdf.jar 文件,點(diǎn)擊確認(rèn),將其導(dǎo)入到項(xiàng)目中。

單個(gè)圖像水印

代碼介紹:

首先,創(chuàng)建一個(gè)新的PdfDocument對(duì)象。接著,使用loadFromFile()方法從磁盤上載入PDF文檔和要嵌入的圖片。然后,循環(huán)遍歷所有頁面以插入水印。對(duì)于每個(gè)頁面,獲取頁面的寬度和高度,并設(shè)置圖片的透明度和初始坐標(biāo)。使用drawImage()方法在頁面的中間位置繪制水印圖片。最后,使用saveToFile()方法指定要保存的文件名和文件格式,并將修改后的PDF文檔保存在磁盤上。

完整代碼:

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfImage;
public class insertSingleImageWatermark {
    public static void main(String[] args) {
        //創(chuàng)建PdfDocument類的對(duì)象
        PdfDocument pdf = new PdfDocument();
        //載入PDF文檔
        pdf.loadFromFile("sample.pdf");
        //載入圖片
        PdfImage image = PdfImage.fromFile("image.png");
        //獲取圖片的寬度和高度用于計(jì)算插入水印的初始坐標(biāo)
        int imageWidth = image.getWidth();
        int imageHeight = image.getHeight();
        //循環(huán)遍歷所有頁面以插入水印
        for (int i = 0; i < pdf.getPages().getCount(); i++) {
            //獲取一個(gè)頁面
            PdfPageBase page = pdf.getPages().get(i);
            //獲取該頁面的寬度和高度,用于計(jì)算插入水印的初始坐標(biāo)
            float pageWidth = (float) (page.getActualSize().getWidth());
            float pageHeight = (float) (page.getActualSize().getHeight());
            //設(shè)置水印圖片的透明度
            page.getCanvas().setTransparency(0.3f);
            //在頁面的中間位置繪制水印圖片
            page.getCanvas().drawImage(image, pageWidth/2 - imageWidth/2, pageHeight/2 - imageHeight/2, imageWidth, imageHeight);
        }
        //保存文檔
        pdf.saveToFile("result1.pdf");
    }
}

效果圖:

平鋪圖像水印

代碼解釋:

首先,創(chuàng)建一個(gè)新的PdfDocument對(duì)象。接著,使用loadFromFile()方法從磁盤上載入PDF文檔和要嵌入的圖片。然后,循環(huán)遍歷所有頁面以插入水印。對(duì)于每個(gè)頁面,使用自定義的insertImageWatermark()方法插入平鋪圖片水印。在insertImageWatermark()方法中,創(chuàng)建一個(gè)平鋪筆刷,并將圖片繪制在筆刷上。使用該平鋪筆刷繪制水印圖片,并通過drawRectangle()方法在頁面上繪制矩形并應(yīng)用平鋪筆刷。最后,使用saveToFile()方法指定要保存的文件名和文件格式,最后保存文檔。

完整代碼:

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfImage;
import com.spire.pdf.graphics.PdfTilingBrush;
import java.awt.*;
public class insertTiledImageWatermark {
    public static void main(String[] args) {
        //創(chuàng)建PdfDocument類的對(duì)象
        PdfDocument pdf = new PdfDocument();
        //載入PDF文檔
        pdf.loadFromFile("sample.pdf");
        //載入圖片
        PdfImage image = PdfImage.fromFile("image.png");
        //循環(huán)遍歷文檔頁面以插入水印
        for (int i = 0; i < pdf.getPages().getCount(); i++ ) {
            //獲取一個(gè)頁面
            PdfPageBase page = pdf.getPages().get(i);
            //使用自定義方法插入平鋪圖片水印
            insertImageWatermark(page, image, 3, 3);
        }
        //保存文檔
        pdf.saveToFile("result2.pdf");
    }
    static void insertImageWatermark(PdfPageBase page, PdfImage image, int row, int column) {
        //創(chuàng)建一個(gè)平鋪筆刷
        PdfTilingBrush brush = new PdfTilingBrush(new Dimension((int) (page.getActualSize().getWidth()/column), (int) (page.getActualSize().getHeight()/row)));
        brush.getGraphics().setTransparency(0.3f);
        brush.getGraphics().save();
        brush.getGraphics().translateTransform(brush.getSize().getWidth()/2 - image.getWidth()/2, brush.getSize().getHeight()/2 - image.getHeight()/2);
        //將圖片繪制于筆刷
        brush.getGraphics().drawImage(image, 0, 0);
        brush.getGraphics().restore();
        //使用該平鋪筆刷繪制水印圖片
        page.getCanvas().drawRectangle(brush, new Rectangle(new Point(0, 0), new Dimension((int) (page.getActualSize().getWidth()), (int) (page.getActualSize().getHeight()))));
    }
}

效果圖:

以上就是Java 向PDF中添加圖像水印實(shí)現(xiàn)細(xì)節(jié)的詳細(xì)內(nèi)容,更多關(guān)于Java PDF添加圖像水印的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java實(shí)現(xiàn)爬蟲

    Java實(shí)現(xiàn)爬蟲

    這篇文章介紹了Java實(shí)現(xiàn)爬蟲的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • Spring Cloud Alibaba教程之Sentinel的使用

    Spring Cloud Alibaba教程之Sentinel的使用

    這篇文章主要介紹了Spring Cloud Alibaba教程之Sentinel的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 使用@Autowired 注入RedisTemplate報(bào)錯(cuò)的問題及解決

    使用@Autowired 注入RedisTemplate報(bào)錯(cuò)的問題及解決

    這篇文章主要介紹了使用@Autowired 注入RedisTemplate報(bào)錯(cuò)的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Java多線程中常見的鎖策略詳解

    Java多線程中常見的鎖策略詳解

    這篇文章主要介紹了Java多線程中常見的鎖策略詳解,在Java多線程中鎖(synchronized)也會(huì)根據(jù)鎖的競(jìng)爭(zhēng)程度來升級(jí)為相關(guān)“高等級(jí)”鎖,本文為了更好的理解?synchronized?加鎖機(jī)制,對(duì)其做出了詳細(xì)解釋,需要的朋友可以參考下
    2023-07-07
  • synchronized及JUC顯式locks?使用原理解析

    synchronized及JUC顯式locks?使用原理解析

    這篇文章主要為大家介紹了synchronized及JUC顯式locks?使用原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Spring中的@Conditional注解實(shí)現(xiàn)分析

    Spring中的@Conditional注解實(shí)現(xiàn)分析

    這篇文章主要介紹了Spring中的@Conditional注解實(shí)現(xiàn)分析,  @Conditional是Spring 4出現(xiàn)的注解,但是真正露出價(jià)值的是Spring Boot的擴(kuò)展@ConditionalOnBean等,需要的朋友可以參考下
    2023-12-12
  • 基于SpringAI+DeepSeek實(shí)現(xiàn)流式對(duì)話功能

    基于SpringAI+DeepSeek實(shí)現(xiàn)流式對(duì)話功能

    一般來說大模型的響應(yīng)速度通常是很慢的,為了避免用戶用戶能夠耐心等待輸出的結(jié)果,我們通常會(huì)使用流式輸出一點(diǎn)點(diǎn)將結(jié)果輸出給用戶,那么問題來了,想要實(shí)現(xiàn)流式結(jié)果輸出,后端和前端要如何配合?下來本文給出具體的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2025-02-02
  • Java中OkHttp 超時(shí)設(shè)置的實(shí)現(xiàn)

    Java中OkHttp 超時(shí)設(shè)置的實(shí)現(xiàn)

    超時(shí)設(shè)置是網(wǎng)絡(luò)編程中不可忽視的一部分,本文就來介紹一下Java中OkHttp 超時(shí)設(shè)置的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • SpringBoot的@ControllerAdvice處理全局異常詳解

    SpringBoot的@ControllerAdvice處理全局異常詳解

    這篇文章主要介紹了SpringBoot的@ControllerAdvice處理全局異常詳解,但有時(shí)卻往往會(huì)產(chǎn)生一些bug,這時(shí)候就破壞了返回?cái)?shù)據(jù)的一致性,導(dǎo)致調(diào)用者無法解析,所以我們常常會(huì)定義一個(gè)全局的異常攔截器,需要的朋友可以參考下
    2024-01-01
  • 一文解讀Spring Bean的生命周期

    一文解讀Spring Bean的生命周期

    這篇文章主要給大家詳細(xì)解讀Spring Bean的生命周期,文中有詳細(xì)的代碼示例,對(duì)我們學(xué)習(xí)Spring Bean的生命周期有一定的幫助,感興趣的同學(xué)跟著小編一起來學(xué)習(xí)吧
    2023-07-07

最新評(píng)論