最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot實現(xiàn)PDF添加水印的三種方法

 更新時間:2023年07月07日 11:01:16   作者:華妃  
本文主要介紹了SpringBoot實現(xiàn)PDF添加水印的三種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

使用場景

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

方式一:使用 Apache PDFBox 庫

PDFBox 是一個流行的、免費的、用 Java 編寫的庫,它可以用來創(chuàng)建、修改和提取 PDF 內(nèi)容。PDFBox 提供了許多 API,包括添加文本水印的功能。

1、添加 PDFBox 依賴

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.24</version>
</dependency>

2、添加水印

在添加水印之前,需要讀取原始 PDF 文件:

PDDocument document = PDDocument.load(new File("original.pdf"));

然后,遍歷 PDF 中的所有頁面,并使用 PDPageContentStream 添加水?。?/p>

// 遍歷 PDF 中的所有頁面
for (int i = 0; i < document.getNumberOfPages(); i++) {
? ? PDPage page = document.getPage(i);
? ? PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true);
? ? // 設(shè)置字體和字號
? ? contentStream.setFont(PDType1Font.HELVETICA_BOLD, 36);
? ? // 設(shè)置透明度
? ? contentStream.setNonStrokingColor(200, 200, 200);
? ? // 添加文本水印
? ? contentStream.beginText();
? ? contentStream.newLineAtOffset(100, 100); // 設(shè)置水印位置
? ? contentStream.showText("Watermark"); // 設(shè)置水印內(nèi)容
? ? contentStream.endText();
? ? contentStream.close();
}

最后,需要保存修改后的 PDF 文件:

document.save(new File("output.pdf"));
document.close();

方式二:使用 iText 庫

iText 是一款流行的 Java PDF 庫,它可以用來創(chuàng)建、讀取、修改和提取 PDF 內(nèi)容。iText 提供了許多 API,包括添加文本水印的功能。

1、添加 iText 依賴

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13</version>
</dependency>

2、添加水印

在添加水印之前,需要讀取原始 PDF 文件:

PdfReader reader = new PdfReader("original.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("output.pdf"));

然后,遍歷 PDF 中的所有頁面,并使用 PdfContentByte 添加水?。?/p>

// 獲取 PDF 中的頁數(shù)
int pageCount = reader.getNumberOfPages();
// 添加水印
for (int i = 1; i <= pageCount; i++) {
? ? PdfContentByte contentByte = stamper.getUnderContent(i); // 或者 getOverContent()
? ? contentByte.beginText();
? ? contentByte.setFontAndSize(BaseFont.createFont(), 36f);
? ? contentByte.setColorFill(BaseColor.LIGHT_GRAY);
? ? contentByte.showTextAligned(Element.ALIGN_CENTER, "Watermark", 300, 400, 45);
? ? contentByte.endText();
}

最后,需要保存修改后的 PDF 文件并關(guān)閉文件流:

stamper.close();
reader.close();

方式三:Free Spire.PDF for Java

Free Spire.PDF for Java 是一款免費的 Java PDF 庫,它提供了一個簡單易用的 API,用于創(chuàng)建、讀取、修改和提取 PDF 內(nèi)容。Free Spire.PDF for Java 也支持添加文本水印以及圖片水印。

1、添加 Free Spire.PDF for Java 依賴

首先,在 pom.xml 文件中添加 Free Spire.PDF for Java 的依賴:

<dependency>
    <groupId>e-iceblue</groupId>
    <artifactId>free-spire-pdf-for-java</artifactId>
    <version>1.9.6</version>
</dependency>

2、添加文本水印

在添加水印之前,需要讀取原始 PDF 文件:

PdfDocument pdf = new PdfDocument();
pdf.loadFromFile("original.pdf");

然后,遍歷 PDF 中的所有頁面,并使用 PdfPageBase 添加水印:

// 遍歷 PDF 中的所有頁面
for (int i = 0; i < pdf.getPages().getCount(); i++) {
? ? PdfPageBase page = pdf.getPages().get(i);
? ? // 添加文本水印
? ? PdfWatermark watermark = new PdfWatermark("Watermark");
? ? watermark.setFont(new PdfFont(PdfFontFamily.Helvetica, 36));
? ? watermark.setOpacity(0.5f);
? ? page.getWatermarks().add(watermark);
}

最后,需要保存修改后的 PDF 文件:

pdf.saveToFile("output.pdf");
pdf.close();

3、添加圖片水印

// 添加圖片水印
PdfWatermark watermark = new PdfWatermark("watermark.png");
watermark.setOpacity(0.5f);
page.getWatermarks().add(watermark);

Demo

使用 Apache PDFBox 庫 寫個demo

package com.sinosoft.springbootplus;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import java.io.File;
import java.io.IOException;
/**
?* @author lsh
?* @date 2023/6/16
?*/
public class PdfBoxWatermark {
? ? public static void main(String[] args) throws IOException {
? ? ? ? // 讀取原始 PDF 文件
? ? ? ? PDDocument document = PDDocument.load(new File("C:\\Users\\18234\\Desktop\\redis主從和哨兵(一主一從三哨兵).pdf"));
? ? ? ? // 遍歷 PDF 中的所有頁面
? ? ? ? for (int i = 0; i < document.getNumberOfPages(); i++) {
? ? ? ? ? ? PDPage page = document.getPage(i);
? ? ? ? ? ? PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true);
? ? ? ? ? ? // 設(shè)置字體和字號
? ? ? ? ? ? contentStream.setFont(PDType1Font.HELVETICA_BOLD, 36);
? ? ? ? ? ? // 設(shè)置透明度
? ? ? ? ? ? contentStream.setNonStrokingColor(200, 200, 200);
? ? ? ? ? ? // 添加文本水印
? ? ? ? ? ? contentStream.beginText();
? ? ? ? ? ? contentStream.newLineAtOffset(100, 100); // 設(shè)置水印位置
? ? ? ? ? ? contentStream.showText("Watermark"); // 設(shè)置水印內(nèi)容
? ? ? ? ? ? contentStream.endText();
? ? ? ? ? ? contentStream.close();
? ? ? ? }
? ? ? ? // 保存修改后的 PDF 文件
? ? ? ? document.save(new File("output.pdf"));
? ? ? ? document.close();
? ? }
}

結(jié)果:文檔的每頁都加上了水印

到此這篇關(guān)于SpringBoot實現(xiàn)PDF添加水印的三種方法的文章就介紹到這了,更多相關(guān)SpringBoot PDF添加水印內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中ArrayList與LinkedList的使用及區(qū)別詳解

    Java中ArrayList與LinkedList的使用及區(qū)別詳解

    這篇文章主要給大家介紹了關(guān)于Java中ArrayList與LinkedList的使用及區(qū)別的相關(guān)資料,ArrayList和LinkedList都是實現(xiàn)了List接口的容器類,用于存儲一系列的對象引用,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-11-11
  • Go Java算法之解碼方法示例詳解

    Go Java算法之解碼方法示例詳解

    這篇文章主要為大家介紹了Go Java算法之解碼方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • java錯誤:無效的源發(fā)行版:18解決辦法圖文詳解

    java錯誤:無效的源發(fā)行版:18解決辦法圖文詳解

    在Java開發(fā)中,如果你遇到錯誤: 無效的源發(fā)行版,這通常意味著你正在使用的Java編譯器(通常是javac)被配置為編譯一個比你的JDK 版本更高,這篇文章主要給大家介紹了關(guān)于java錯誤:無效的源發(fā)行版:18的解決辦法,需要的朋友可以參考下
    2024-08-08
  • SPFA 算法實例講解

    SPFA 算法實例講解

    下面小編就為大家?guī)硪黄猄PFA 算法實例講解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • java中int轉(zhuǎn)string與string轉(zhuǎn)int的效率對比

    java中int轉(zhuǎn)string與string轉(zhuǎn)int的效率對比

    這篇文章主要介紹了java中int轉(zhuǎn)string與string轉(zhuǎn)int的效率對比,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • spring中@Transactional注解和事務(wù)的實戰(zhàn)

    spring中@Transactional注解和事務(wù)的實戰(zhàn)

    本文主要介紹了spring中@Transactional注解和事務(wù)的實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-07-07
  • java編程之基于SpringBoot框架實現(xiàn)掃碼登錄

    java編程之基于SpringBoot框架實現(xiàn)掃碼登錄

    本文將介紹基于SpringBoot + Vue + Android實現(xiàn)的掃碼登錄demo的總體思路,文中附含詳細示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • IDEA 格式化SQL代碼技巧分享

    IDEA 格式化SQL代碼技巧分享

    這篇文章主要介紹了IDEA 格式化SQL代碼技巧分享,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java 對HashMap進行排序的三種常見方法

    Java 對HashMap進行排序的三種常見方法

    這篇文章主要介紹了Java 對HashMap進行排序的三種常見方法,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-10-10
  • 使用Flyway進行Java數(shù)據(jù)庫版本控制的操作指南

    使用Flyway進行Java數(shù)據(jù)庫版本控制的操作指南

    今天我們將深入探討如何使用Flyway進行Java數(shù)據(jù)庫版本控制,Flyway是一個流行的數(shù)據(jù)庫遷移工具,用于管理和自動化數(shù)據(jù)庫模式的演變,文中通過代碼示例介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-07-07

最新評論

军事| 伊通| 龙山县| 河间市| 湘潭市| 孟津县| 吉隆县| 宜宾县| 尉氏县| 武强县| 都兰县| 鸡西市| 呼图壁县| 安徽省| 清远市| 庆云县| 定安县| 广安市| 西华县| 股票| 黑水县| 金门县| 屏东县| 萨迦县| 沾益县| 瓦房店市| 白水县| 静安区| 汉源县| 凤城市| 北碚区| 靖州| 龙泉市| 宜州市| 兴国县| 平泉县| 大余县| 临高县| 墨竹工卡县| 五台县| 永新县|