Java实现图片保存到pdf的某个位置2
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import javax.imageio.ImageIO;
import java.awt.geom.Point2D;
import java.io.File;
import java.io.IOException;
public class PdfBoxInsertImageExample {
// 主函数,用于展示如何调用insertImageIntoPdf方法
public static void main(String[] args) {
try {
File originalPdf = new File("path/to/original.pdf"); // 原始PDF文件路径
File tempPdf = new File("path/to/temp.pdf"); // 临时保存修改后PDF的路径
insertImageIntoPdf(originalPdf, tempPdf, 0, new Point2D.Float(100, 100), "path/to/image.jpg", null, null);
} catch (IOException e) {
e.printStackTrace(); // 打印异常信息,方便调试
}
}
// 实现将图片插入PDF页面的方法
public static void insertImageIntoPdf(File sourcePdf, File targetPdf, int pageIndex,
Point2D.Float position, String imagePath,
Float desiredWidth, Float desiredHeight) throws IOException {
try (PDDocument document = PDDocument.load(sourcePdf)) { // 加载原始PDF文档
// 获取指定索引的页面,pageIndex从0开始计数
PDPage page = document.getPage(pageIndex);
// 从imagePath路径读取图片并转换为PDF支持的图像对象
PDImageXObject image = LosslessFactory.createFromImage(document, ImageIO.read(new File(imagePath)));
// 获取图片原始尺寸
float originalWidth = image.getWidth();
float originalHeight = image.getHeight();
// 计算图片的新尺寸,如果指定了desiredWidth或desiredHeight则进行调整,同时保持原始比例
float scaleX = (desiredWidth != null) ? desiredWidth / originalWidth : 1f;
float scaleY = (desiredHeight != null) ? desiredHeight / originalHeight : 1f;
// 如果只设置了宽度或高度,则自动调整另一个维度以保持比例
if (desiredWidth == null && desiredHeight != null) {
scaleX = scaleY;
} else if (desiredWidth != null && desiredHeight == null) {
scaleY = scaleX;
}
// 计算调整后的宽度和高度
float newWidth = originalWidth * scaleX;
float newHeight = originalHeight * scaleY;
// 创建内容流,用于在页面上绘制图像
try (PDPageContentStream contentStream = new PDPageContentStream(document, page,
PDPageContentStream.AppendMode.APPEND, true)) {
// 在指定位置绘制调整大小后的图片
contentStream.drawImage(image, position.x, position.y, newWidth, newHeight);
}
// 保存所有修改到目标PDF文件
document.save(targetPdf);
}
}
}