Java中将Html转图片

方式一

引入Html2Image的Maven依赖

<dependency>
	<groupId>com.github.xuwei-k</groupId>
	<artifactId>html2image</artifactId>
	<version>0.1.0</version>
</dependency>

import gui.ava.html.image.generator.HtmlImageGenerator;

public static void main(String[] args) {
	HtmlImageGenerator imageGenerator = new HtmlImageGenerator();
    //加载html模版
    imageGenerator.loadHtml(htmlTemplate);
    //把html写入到图片
    imageGenerator.saveAsImage("E:\\hello-world.png");
}

方法二(推荐)

<dependency>
	<groupId>gui.ava</groupId>
	<artifactId>html2image</artifactId>
	<version>2.0.1</version>
</dependency>
import gui.ava.html.parser.HtmlParser;
import gui.ava.html.parser.HtmlParserImpl;
import gui.ava.html.renderer.ImageRenderer;
import gui.ava.html.renderer.ImageRendererImpl;

public static void main(String[] args) {
	HtmlParser htmlParser = new HtmlParserImpl();
	htmlParser.loadHtml(HtmlTemplateStr);
	// html 是我的html代码
	ImageRenderer imageRenderer = new ImageRendererImpl(htmlParser);
	imageRenderer.saveImage("E:\\lcxq1.png");
}
static String HtmlTemplateStr = "\t<div style=\"height: 500px;width: 500px;background: #aee0ff;\">\n" +
            "\t\t这个是一个div\n" +
            "\t\t<h1>标题</h1>\n" +
            "\t\t<ol>\n" +
            "\t\t\t<li>a</li>\n" +
            "\t\t</ol>\n" +
            "\t\t<img style=\"margin-left: 1500px;\" width=\"300px\" height=\"200px\" src=\"https://inews.gtimg.com/newsapp_bt/0/11911825373/1000\">\n" +
            "\t</div>";

转换jpg变红的问题处理

public class ImageRendererSubImpl extends ImageRendererImpl {

    public ImageRendererSubImpl(DocumentHolder documentHolder) {
        super(documentHolder);
    }

    private String getImageFormat(String filename) {
        if (this.getImageFormat() != null) {
            return this.getImageFormat();
        } else {
            return filename != null ? FormatNameUtil.formatForFilename(filename) : FormatNameUtil.getDefaultFormat();
        }
    }

    private FSImageWriter getImageWriter(String imageFormat) {
        FSImageWriter imageWriter = new FSImageWriter(imageFormat);
        imageWriter.setWriteCompressionMode(this.getWriteCompressionMode());
        imageWriter.setWriteCompressionQuality(this.getWriteCompressionQuality());
        imageWriter.setWriteCompressionType(this.getWriteCompressionType());
        return imageWriter;
    }

    public void saveImage(File file) {
        try {
            BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file));
            this.save(outputStream, file.getName(), true);
        } catch (IOException var3) {
            throw new RenderException("IOException while rendering image to " + file.getAbsolutePath(), var3);
        }
    }

    public void saveImage(String filename) {
        this.saveImage(new File(filename));
    }

    private void save(OutputStream outputStream, String filename, boolean closeStream) {
        try {
            String imageFormat = this.getImageFormat(filename);
            FSImageWriter imageWriter = this.getImageWriter(imageFormat);
            BufferedImage bufferedImage = this.getBufferedImage(getImageType(imageFormat));
            imageWriter.write(bufferedImage, outputStream);
        } catch (IOException var15) {
            throw new RenderException("IOException while rendering image", var15);
        } finally {
            if (closeStream) {
                try {
                    outputStream.close();
                } catch (IOException var14) {
                    ;
                }
            }

        }
    }

    /**
     * 获取图像类型
     * 根据图像的格式
     */
    public int getImageType(String imageFormat){
        if ("jpg".equalsIgnoreCase(imageFormat)){
            return BufferedImage.TYPE_3BYTE_BGR;
        }
        if ("bmp".equalsIgnoreCase(imageFormat)){
            return BufferedImage.TYPE_INT_RGB;
        }
        return BufferedImage.BITMASK;
    }

}

参考:
https://blog.csdn.net/superit401/article/details/82629524
https://www.cnblogs.com/zxf330301/p/5666592.html
https://www.cnblogs.com/wikid/p/3913070.html
https://blog.csdn.net/lijinzhou2017/article/details/88714381

jar包下载:https://download.csdn.net/download/qq_25775675/12511219

方法三(推荐)

使用 wkhtmltox 进行转换:
https://blog.csdn.net/qq_25775675/article/details/110425304

  • 5
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
Java中将Word文档换为图片可以使用Apache POI和Apache Batik两个库来实现。具体的步骤如下: 1. 使用Apache POI读取Word文档,获取文档中的内容和样式信息。 2. 将Word文档的内容和样式信息换成HTML格式。 3. 使用Apache Batik将HTML格式的内容换成SVG格式。 4. 使用Java的图形库将SVG格式的图片换成其他格式的图片,如PNG、JPEG等。 下面是一个基本的示例代码: ```java import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import org.apache.batik.transcoder.TranscoderInput; import org.apache.batik.transcoder.TranscoderOutput; import org.apache.batik.transcoder.image.PNGTranscoder; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFPictureData; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.hwpf.usermodel.Picture; public class WordToImage { public static void main(String[] args) throws Exception { String filePath = "test.docx"; String imagePath = "test.png"; // 读取Word文档 XWPFDocument document = new XWPFDocument(new FileInputStream(filePath)); // 将Word文档内容换成HTML格式 String html = "<html><body>"; for (XWPFParagraph paragraph : document.getParagraphs()) { for (XWPFRun run : paragraph.getRuns()) { String text = run.getText(0); if (text != null) { html += "<span style='" + run.getColor() + ";" + run.getFontFamily() + ";" + run.getFontSize() + "'>" + text + "</span>"; } } } html += "</body></html>"; // 将HTML换成SVG格式 TranscoderInput input = new TranscoderInput(new StringReader(html)); OutputStream outputStream = new FileOutputStream(imagePath); TranscoderOutput output = new TranscoderOutput(outputStream); PNGTranscoder transcoder = new PNGTranscoder(); transcoder.transcode(input, output); outputStream.flush(); outputStream.close(); } } ``` 需要注意的是,这个例子只是一个基本的示例代码,如果要应用到实际项目中,还需要考虑很多因素,如Word文档的格式、图片的大小、图片的质量等等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值