PDF嵌入图片

所需依赖

<dependency>
    <groupId>com.itextpdfgroupId>
    <artifactId>itext-coreartifactId>
    <version>9.0.0version>
    <type>pomtype>
dependency>

源码

/**
 * PDF工具
 */
public class PdfUtils {
	/**
	 * 嵌入图片到 PDF 的指定页码
	 * 在 PDF 文档的指定页面添加图片,坐标系以左下角为原点,x轴向右为正,y轴向上为正,单位为pt (1pt=1/72英寸)
	 *
	 * @param pdfBytes   原 PDF 字节数组
	 * @param imageBytes 图片字节数组
	 * @param width      图片宽度,单位pt
	 * @param height     图片高度,单位pt
	 * @param x          图片位置x坐标,单位pt
	 * @param y          图片位置y坐标,单位pt
	 * @param pageNumber 目标页码(从1开始)
	 * @return 嵌入图片后的 PDF 字节数组,如果页码无效则返回 null
	 * @throws ServiceException 如果嵌入过程中发生错误
	 */
	public static byte[] embedImage(byte[] pdfBytes, byte[] imageBytes, float width, float height, float x, float y, int pageNumber) {
        try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
            // 创建 PDF 文档对象,读取源 PDF 并指定输出流
            PdfDocument pdfDoc = new PdfDocument(
                    new PdfReader(new ByteArrayInputStream(pdfBytes)),
                    new PdfWriter(baos)
            );

            // 检查页码是否有效
            int numberOfPages = pdfDoc.getNumberOfPages();
            if (pageNumber < 1 || pageNumber > numberOfPages) {
                log.error("指定的页码 {} 无效,文档总页数为 {}", pageNumber, numberOfPages);
                // 页码无效时返回 null,而不是抛出异常
                return null;
            }

            // 创建图片数据对象
            ImageData imageData = ImageDataFactory.create(imageBytes);
            // 基于图片数据创建图片对象
            Image image = new Image(imageData);

            // 设置图片大小,按比例缩放至指定尺寸
            image.scaleToFit(width, height);
            // 设置图片在指定页面的位置
            image.setFixedPosition(pageNumber, x, y);

            // 创建文档布局对象并添加图片
            Document document = new Document(pdfDoc);
            document.add(image);

            // 关闭文档并写入输出流
            document.close();
            // 返回处理后的 PDF 字节数组
            return baos.toByteArray();
        } catch (Exception e) {
            // 发生异常时抛出服务异常
            throw new ServiceException(0, "PDF处理失败");
        }
    }
}

你可能感兴趣的:(Java,pdf,java,itext)