=Start=
缘由:
前段时间看到一篇文章想起来的,最近有时间简单做了测试,以及一些代码和功能的学习,这里简单整理一下,方便后面有需要的时候参考。
正文:
参考解答:
iText 的 PdfStamper 做起这个工作来真的是很方便和快速。
这里简单整理一下常见的PDF文件读写需求的代码片段,其它的功能实现后面按实际需求情况进行补充。
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.3</version>
</dependency>
package com.example;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.parser.PdfTextExtractor;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Map;
/**
* @author ixyzero
* Created on 2023-12-01
*/
public class ItextWatermark {
static void printPdfContent(PdfReader pdfReader) throws IOException {
// 逐页打印 PDF 文件内容
for (int i = 1; i <= pdfReader.getNumberOfPages(); i++) {
String pageContent = PdfTextExtractor.getTextFromPage(pdfReader, i);
System.out.println("\nContent on Page " + i + ":\n" + pageContent);
}
}
public static void main(String[] args) throws IOException, DocumentException {
// 读取原始 PDF 文件
PdfReader reader = new PdfReader("output-pdfbox.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("output-itext.pdf"));
// 逐页打印 PDF 文件内容
printPdfContent(reader);
// 查看 PDF 文件的meta信息
Map<String, String> info = reader.getInfo();
for (Map.Entry<String, String> entry : info.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
// 获取 PDF 中的页数
int pageCount = reader.getNumberOfPages();
// 添加水印
for (int i = 1; i <= pageCount; i++) {
PdfContentByte contentByte = stamper.getUnderContent(i); // 或者 getOverContent()
contentByte.beginText();
contentByte.setFontAndSize(BaseFont.createFont(), 1f); // 字体和字号
contentByte.setColorFill(BaseColor.WHITE); // 字体颜色
// showTextAligned(元素对齐方式,文本内容,x坐标,y坐标,旋转角度)
contentByte.showTextAligned(Element.ALIGN_BOTTOM, "Watermark-add-here", 100, 1, 0);
contentByte.endText();
}
// 保存修改后的 PDF 文件并关闭文件流
stamper.close();
reader.close();
}
}
参考链接:
SpringBoot 实现 PDF 添加水印,我有 5 种实现方案
https://mp.weixin.qq.com/s/gphcp_L80OzOXxsPAijgig
A Free Java-PDF library
https://mvnrepository.com/artifact/com.itextpdf/itextpdf
showTextAligned
https://www.tabnine.com/code/java/methods/com.itextpdf.text.pdf.PdfContentByte/showTextAligned
iText – Quick Guide
https://www.tutorialspoint.com/itext/itext_quick_guide.htm
iText – Setting Font
https://www.tutorialspoint.com/itext/itext_setting_font.htm
Are there any Java PDF creation alternatives to iText? [closed]
https://stackoverflow.com/questions/1377135/are-there-any-java-pdf-creation-alternatives-to-itext
iText – add content to existing PDF file
https://stackoverflow.com/questions/3335126/itext-add-content-to-existing-pdf-file
Tagged with itext,pdf,java
https://stackoverflow.com/questions/tagged/itext+pdf+java
Reading PDF File Using Java
https://www.baeldung.com/java-pdf-file-read
iText – Read and Write PDF in Java
https://mkyong.com/java/itext-read-and-write-pdf-in-java/
How To Read An Existing Pdf File In Java Using IText Jar?
https://www.w3schools.blog/itext-read-pdf-file-in-java
Difference between getUnderContent and getOverContent of itext
https://stackoverflow.com/questions/66029258/difference-between-getundercontent-and-getovercontent-of-itext
Creating PDF Files in Java
https://www.baeldung.com/java-pdf-creation
Tag: PDF
https://www.baeldung.com/tag/pdf
Get Information About a PDF in Java
https://www.baeldung.com/java-pdf-info
Using Watermarks with iText in Java
https://www.baeldung.com/java-watermarks-with-itext
java生成PDF的几种方法
https://www.jianshu.com/p/e0a54d5e63c3
Using Watermarks in iText 7
https://dzone.com/articles/using-watermarks-in-itext-7
Custom Metadata entry
https://kb.itextpdf.com/itext/custom-metadata-entry
=END=