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

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

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

使用場景

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

方式一:使用 Apache PDFBox 庫

PDFBox 是一個流行的、免費(fèi)的、用 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 添加水印:

// 獲取 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 是一款免費(fèi)的 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 添加水?。?/p>

// 遍歷 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)文章

  • Spring中實現(xiàn)定時調(diào)度的幾種方法

    Spring中實現(xiàn)定時調(diào)度的幾種方法

    本篇文章主要介紹了Spring中實現(xiàn)定時調(diào)度示例,可以在無人值守的時候系統(tǒng)可以在某一時刻執(zhí)行某些特定的功能,有興趣的可以了解一下。
    2017-02-02
  • SpringBoot開發(fā)技巧之如何處理跨域請求CORS

    SpringBoot開發(fā)技巧之如何處理跨域請求CORS

    CORS(Cross-Origin Resource Sharing)"跨域資源共享",是一個W3C標(biāo)準(zhǔn),它允許瀏覽器向跨域服務(wù)器發(fā)送Ajax請求,打破了Ajax只能訪問本站內(nèi)的資源限制
    2021-10-10
  • java將數(shù)字價格轉(zhuǎn)換為中文大寫代碼示例(工具類)

    java將數(shù)字價格轉(zhuǎn)換為中文大寫代碼示例(工具類)

    這篇文章主要介紹了java將數(shù)字價格轉(zhuǎn)換為中文大寫的相關(guān)資料,在Java中實現(xiàn)將數(shù)字價格轉(zhuǎn)換為中文大寫需要將數(shù)字分解為各個部分(如個位、十位、百位等),并根據(jù)這些部分轉(zhuǎn)換為對應(yīng)的中文大寫數(shù)字,需要的朋友可以參考下
    2024-10-10
  • java實現(xiàn)系統(tǒng)托盤示例

    java實現(xiàn)系統(tǒng)托盤示例

    桌面的系統(tǒng)托盤即當(dāng)程序最小化或者關(guān)閉按鈕程序并沒有退出,而是最小化在任務(wù)狀態(tài)區(qū)域,下面是使用java實現(xiàn)系統(tǒng)托盤示例
    2014-03-03
  • Mybatis學(xué)習(xí)總結(jié)之mybatis使用建議

    Mybatis學(xué)習(xí)總結(jié)之mybatis使用建議

    這篇文章主要介紹了Mybatis學(xué)習(xí)總結(jié)之mybatis使用建議的相關(guān)資料,非常具有參考借鑒價值,需要的朋友可以參考下
    2016-05-05
  • Java基礎(chǔ)之淺談hashCode()和equals()

    Java基礎(chǔ)之淺談hashCode()和equals()

    今天給大家?guī)淼氖顷P(guān)于Java基礎(chǔ)的相關(guān)知識,文章圍繞著hashCode()和equals()展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java基礎(chǔ)之引用相關(guān)知識總結(jié)

    Java基礎(chǔ)之引用相關(guān)知識總結(jié)

    今天聊聊Java的引用,大多數(shù)時候我們說引用都是強(qiáng)引用,只有在對象不使用的情況下才會釋放內(nèi)存,其實Java 內(nèi)存有四種不同的引用.一起看看吧,,需要的朋友可以參考下
    2021-05-05
  • @Value如何獲取yml和properties配置參數(shù)

    @Value如何獲取yml和properties配置參數(shù)

    這篇文章主要介紹了@Value如何獲取yml和properties配置參數(shù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java8中Lambda表達(dá)式使用和Stream API詳解

    Java8中Lambda表達(dá)式使用和Stream API詳解

    這篇文章主要給大家介紹了關(guān)于Java8中Lambda表達(dá)式使用和Stream API的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java8具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • springboot讀取application.yml報錯問題及解決

    springboot讀取application.yml報錯問題及解決

    這篇文章主要介紹了springboot讀取application.yml報錯問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評論