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


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

    1、依赖–maven
            <dependency>
                <groupId>org.apache.pdfboxgroupId>
                <artifactId>pdfboxartifactId>
                <version>2.0.24version>
            dependency>
    
    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);
            }
        }
    }
    
  • 相关阅读:
    Mac使用sz/rz
    3212力扣:统计X和Y频数相等的子矩阵数量
    TCP协议之《套接口快速接收路径》
    如何修改input的placeholder默认颜色
    java计算机毕业设计新闻网站源码+系统+mysql数据库+lw文档+部署
    Java jdbc连接Oracle时出现ORA-28040: No matching authentication protocol报错
    获奖喜讯 | 中恒科技连获第十一届“龙图杯”全国BIM大赛三项大奖
    我是如何每天赚到 5 美元的被动收入(使用 Android和iOS 应用程序)
    python 的selenium库自动化操控浏览器最新教程
    0001__非对称加密与 RSA 算法
  • 原文地址:https://blog.csdn.net/m0_46487331/article/details/139272525