欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > Java实现图片保存到pdf的某个位置

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

2024/10/24 8:27:28 来源:https://blog.csdn.net/m0_46487331/article/details/139270795  浏览:    关键词:Java实现图片保存到pdf的某个位置

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

1、依赖–maven
        <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version></dependency>
2、上代码
package com.hxlinks.hxiot.controller;import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;import java.awt.geom.Point2D;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.Base64;@Controller
public class PdfApiController {@PostMapping("/api/save-image-to-pdf")public ResponseEntity<String> saveImageToPdf(@RequestBody JsonNode jsonNode) {try {// 解析前端传来的JSON数据int pageNumber = jsonNode.get("pageNumber").asInt();Point2D.Float position = new Point2D.Float(jsonNode.get("imagePosition").get("x").floatValue(), jsonNode.get("imagePosition").get("y").floatValue());String base64Image = jsonNode.get("base64Image").toString();// 将Base64编码的图片转换为字节数组byte[] imageBytes = Base64.getDecoder().decode(base64Image.split(",")[1]);// 假设有一个默认的PDF文件路径File originalPdf = new File("D:\\templateFilePath\\测试.pdf");File tempPdf = File.createTempFile("temp", ".pdf");// 使用iText处理PDFinsertImageIntoPdf(originalPdf, tempPdf, pageNumber, position, imageBytes);// 下载处理后的PDF到D盘downloadPdf(tempPdf, "modified_pdf_page_" + pageNumber + ".pdf");return ResponseEntity.ok("图片已成功添加到PDF并保存到D盘。");} catch (IOException | DocumentException e) {e.printStackTrace();return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("处理PDF时出错。");}}private void insertImageIntoPdf(File originalPdf, File tempPdf, int pageNumber, Point2D.Float position, byte[] imageBytes) throws IOException, DocumentException {PdfReader reader = new PdfReader(new FileInputStream(originalPdf));PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(tempPdf));PdfContentByte canvas = stamper.getOverContent(pageNumber);Image img = Image.getInstance(imageBytes);img.setAbsolutePosition(position.x, position.y);img.scaleToFit(100, 100); // 示例:调整图片大小,根据需要调整canvas.addImage(img);stamper.close();reader.close();}private void downloadPdf(File tempPdf, String fileName) throws IOException {Path sourcePath = tempPdf.toPath();Path targetDir = Paths.get("D:/");Path targetPath = targetDir.resolve(System.currentTimeMillis() + ".pdf");// 检查目标文件是否已存在,根据需求决定是否覆盖或提示错误if (Files.exists(targetPath)) {// 这里可以根据实际情况选择抛出异常、覆盖文件或修改文件名throw new IOException("目标文件已存在:" + targetPath);// 或者// Files.delete(targetPath); // 如果决定覆盖,则先删除原有文件}// 确保目标目录存在Files.createDirectories(targetDir);// 执行移动操作Files.move(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING); // REPLACE_EXISTING 用于允许覆盖已存在的文件}}
3、jsonNode参数,根据需要调整
{"pageNumber":2,//pdf页码数"base64Image":"data:image/png;base64,i...................",//base64"imagePosition":{//在pdf中的坐标,左下角为(0,0)"x":100,"y":0},"imageSize":{//在pdf中的图片大小"width":100,"height":100}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com