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();
		}
相关推荐
anOnion13 分钟前
构建无障碍组件之Menu and Menubar Pattern
前端·html·交互设计
程序员清风32 分钟前
专业再升级!程序员专属显示器明基RD280UG上手实测!
java·后端·面试
Lam Tang2 小时前
APS 系列文章 08
java·代理模式
萧瑟余晖3 小时前
Java深入解析篇三十三之消息队列
java·开发语言
码匠许师傅3 小时前
【C++ 面试真题】聊聊 C++ 的序列容器
java·c++·面试
IT爱学堂3 小时前
尚硅谷Java+AI大模型应用开发革新版本 2025年3月
java·开发语言·人工智能
不爱编程的小九九4 小时前
小九源码-springboot004-springboot智能阅读推荐系统
java·spring boot·后端
SCandL1524 小时前
Docker的实战应用
java·docker·容器
AC赳赳老秦4 小时前
OpenClaw 多源采集公开行业数据:从原始信息到研究报告初稿的自动化实践
java·c语言·c++·python·php·deepseek·openclaw
Highcharts5 小时前
全功能施工项目管理甘特图 Demo:任务依赖箭头、当前日期标线、周末高亮、分组项目可视化
html·数据可视化