欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

使用場(chǎng)景

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

方式一:使用 Apache PDFBox 庫(kù)

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

1、添加 PDFBox 依賴(lài)

<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 中的所有頁(yè)面,并使用 PDPageContentStream 添加水?。?/p>

// 遍歷 PDF 中的所有頁(yè)面
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è)置字體和字號(hào)
? ? 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 庫(kù)

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

1、添加 iText 依賴(lài)

<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 中的所有頁(yè)面,并使用 PdfContentByte 添加水?。?/p>

// 獲取 PDF 中的頁(yè)數(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 庫(kù),它提供了一個(gè)簡(jiǎn)單易用的 API,用于創(chuàng)建、讀取、修改和提取 PDF 內(nèi)容。Free Spire.PDF for Java 也支持添加文本水印以及圖片水印。

1、添加 Free Spire.PDF for Java 依賴(lài)

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

<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 中的所有頁(yè)面,并使用 PdfPageBase 添加水?。?/p>

// 遍歷 PDF 中的所有頁(yè)面
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 庫(kù) 寫(xiě)個(gè)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 中的所有頁(yè)面
? ? ? ? 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è)置字體和字號(hào)
? ? ? ? ? ? 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é)果:文檔的每頁(yè)都加上了水印

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

相關(guān)文章

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

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

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

    SpringBoot開(kāi)發(fā)技巧之如何處理跨域請(qǐng)求CORS

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

    java將數(shù)字價(jià)格轉(zhuǎn)換為中文大寫(xiě)代碼示例(工具類(lèi))

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

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

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

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

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

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

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

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

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

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

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

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

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

    springboot讀取application.yml報(bào)錯(cuò)問(wèn)題及解決

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

最新評(píng)論