PDF 中嵌入图片
使用 IText7 库 在 PDF 中嵌入图片
介绍
IText 7 处理 dpf 非常强大。有非常多实用的功能。目前的需求是在 pdf 中嵌入一张 六维图。 参考了 IText7 中的部分示例,实现了这个功能,在此记录一下。
代码
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.layout.element.Image;
import com.itextpdf.kernel.pdf.PdfReader;
import java.io.File;
public class SimpleTable {
public static final String IMG1 = "./src/main/resources/123.jpg"; // 将要嵌入的图片的地址
public static final String DEST = "results/result.pdf"; // 最终合成的 pdf 的地址
public static final String SRC = "results/data.pdf"; // 原 pdf 的地址
public static void main(String[] args) throws Exception {
File file = new File(DEST);
file.getParentFile().mkdirs();
new SimpleTable().manipulatePdf(DEST);
}
protected void manipulatePdf(String dest) throws Exception {
PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));
Document doc = new Document(pdfDoc);
// 导入图片,设置图片的宽和高,设置图片的相对位置
Image image = new Image(ImageDataFactory.create(IMG1)).scaleAbsolute(100, 100).setFixedPosition(1, 250, 100);
doc.add(image);
pdfDoc.close();
}
原理
在写完之后,发现原理非常简单。 Itext7 是不能直接在原 pdf 上直接嵌入图片的。 按我的理解(没有深入看源码),它是将原 pdf 中的数据获取出来,然后添加上嵌入的 图片 数据,最终输出到一个新的 pdf 文件中。
还有一个特殊点,在于设置图片在 pdf 中的相对位置,竟然是在 new Image 的时候进行设置。而不是在 doc.add 的时候设置。
疑惑点
- 设置图片在 pdf 的相对位置。
- 为什么不能直接在原 pdf 上嵌入图片