Java实现图片保存到pdf的某个位置2

时间:2024-06-03 09:51:57
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); } } }