一、html转图片
引入依赖
implementation 'org.xhtmlrenderer:flying-saucer-core:9.1.22'
html页面转图片对于html标签格式有要求,自己调整,每个标签都要有结束标签,标签也要,标签也要, doctype需要大写
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
implementation 'com.itextpdf:itextpdf:5.5.5'
implementation 'com.itextpdf:itext-asian:5.2.0'
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'
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();
}