Java转换html为图片,图片嵌入pdf/word

一、html转图片

引入依赖

gradle 复制代码
implementation 'org.xhtmlrenderer:flying-saucer-core:9.1.22'

html页面转图片对于html标签格式有要求,自己调整,每个标签都要有结束标签,标签也要,标签也要, doctype需要大写

java 复制代码
try {
			String basePath = "D:\\";
			File source = new File(basePath, "report.html");
			File g2drDest = new File(basePath, "G2DR.png");
			BufferedImage g2drImage = Graphics2DRenderer.renderToImageAutoSize(source.toURI().toURL().toExternalForm(),
				1024, BufferedImage.TYPE_INT_ARGB);
			ImageIO.write(g2drImage, "png", g2drDest);
		}catch (Exception e){
			e.printStackTrace();
		}

二、图片嵌入pdf

gradle 复制代码
implementation 'com.itextpdf:itextpdf:5.5.5'
implementation 'com.itextpdf:itext-asian:5.2.0'
java 复制代码
try{
			BufferedImage originalImage = ImageIO.read(new File("D:\\G2DR.png"));
			float imgWidth = originalImage.getWidth();
			float imgHeight = originalImage.getHeight();
			float pageWidth = PageSize.A4.getWidth();
			float pageHeight = PageSize.A4.getHeight();
			float imgPerPage = pageHeight; // 每页只显示图片的一段
			Document document = new Document(PageSize.A4, 0, 0, 0, 0);
			PdfWriter.getInstance(document, new FileOutputStream("D:\\output.pdf"));
			document.open();
			int totalImages = (int) Math.ceil(imgHeight / imgPerPage);
			//图片长宽和A4大小不匹配可能会导致图片剪切嵌入观感不好看,可自己微调页面和图片大小
			for (int i = 0; i < totalImages; i++) {
				// 计算剪切起点和宽度
				int start = (int) (imgPerPage * i);
				int end = (int) Math.min(start + imgPerPage, imgHeight);
				BufferedImage subImage = originalImage.getSubimage(0, start, (int)imgWidth, end-start);
				// 将剪切后的图片转换为iText可用的Image对象
				Image image = Image.getInstance(subImage, null);
				image.scaleToFit(pageWidth, pageHeight); // 调整图片大小以适应页面
				// 插入图片到PDF文档
				document.add(new Paragraph());
				document.add(image);
				// 添加页码,如果是最后一段不需要换页
				if (i != totalImages - 1) {
					document.newPage();
				}
			}

			document.close();
		}catch (Exception e){
			e.printStackTrace();
		}

三、图片嵌入word

最简单的嵌入

复制代码
implementation 'org.apache.poi:poi:4.1.2'
implementation 'org.apache.poi:poi-ooxml:4.1.2'
java 复制代码
try{
			BufferedImage originalImage = ImageIO.read(new File("D:\\G2DR.png"));
			XWPFDocument document=new XWPFDocument();
			XWPFParagraph paragraph=document.createParagraph();
			XWPFRun run=paragraph.createRun();
			//自己设置页面参数
			run.addPicture(new FileInputStream("D:\\G2DR.png"),
				XWPFDocument.PICTURE_TYPE_PNG,
				"1.png",
				Units.toEMU(originalImage.getWidth()*(PageSize.A4.getHeight()/ originalImage.getHeight())),
				Units.toEMU(PageSize.A4.getHeight()));
			OutputStream outputStream=new FileOutputStream("D:\\output.docx");
			document.write(outputStream);
			outputStream.close();
		}catch (Exception e){
			e.printStackTrace();
		}
相关推荐
qq_251836457几秒前
2026计算机毕设选题|3000套高质量SpringBoot实战项目(含完整源码)(每人一套不收米)
java·spring boot·课程设计
设计师小聂!4 分钟前
Java异常处理
java·开发语言·后端·编辑器·idea
SimonKing5 分钟前
实用,DynamicTP进阶之数据采集与告警
java·后端·程序员
用户298698530149 分钟前
Java 进阶:基于模板生成 Word 文档的实践思路
java·后端
涛声依旧-底层原理研究所11 分钟前
响应式编程:map与flatMap实战解析
java
无心水1 小时前
【OpenClaw:赚钱】案例19、内容产量5倍、广告收入翻4倍:播客转多平台内容矩阵全自动化实战(OpenAI Whisper + Claude)
java·人工智能·python·ai编程·openclaw·养龙虾·java.time
云烟成雨TD1 小时前
Spring AI 1.x 系列【42】MCP 服务端 Spring Boot 启动器
java·人工智能·spring
云烟成雨TD1 小时前
Spring AI 1.x 系列【38】模型上下文协议(MCP)
java·人工智能·spring
Alson_Code1 小时前
Spring AI-1.1.0
java·人工智能·后端·spring·ai编程
ANnianStriver1 小时前
PetLumina 08 — 通知系统与搜索功能修复(广播机制 + 已读状态 + 参数对齐)
java·ai·ai编程·广播机制