首页 > 编程语言 >JAVA实现html代码转为图片

JAVA实现html代码转为图片

时间:2023-05-17 11:47:28浏览次数:42  
标签:outputStream JAVA selenium imageRenderer html new guava 转为

方法一:html2Image

1、引入依赖

<dependency>
    <groupId>gui.ava</groupId>
    <artifactId>html2image</artifactId>
    <version>2.0.1</version>
</dependency>

2、代码实现

@Component
public class HtmlUtil {

    /**
     * 文件工具
     */
    @Autowired
    private FileUtil fileUtil;


    public String htmlToImageConverter(String html, Integer height, Integer width, String fileName) {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        HtmlParserImpl htmlParser = new HtmlParserImpl();
        htmlParser.loadHtml(html);
        ImageRendererImpl imageRenderer = new ImageRendererImpl(htmlParser);
        //设置宽高,未设置自动适应
        if(height != null){
            imageRenderer.setHeight(height);
        }
        if(width != null){
            imageRenderer.setWidth(width);
        }
        BufferedImage bufferedImage = imageRenderer.getBufferedImage();
        //默认png格式,jpg格式会出现渲染问题,需要重写ImageRendererImpl
        // 这里是因为他这边写死图片的压缩算法为BufferedImage.BITMASK,修改成BufferedImage.TYPE_INT_RGB即可
        try {
            ImageIO.write(bufferedImage, "png", outputStream);
            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(outputStream.toByteArray());
            // 将图像保存为PNG格式的文件
            FileItem fileItem = CommUtil.createFileItem(byteArrayInputStream, fileName + ".png");
            //上传到文件服务并获取文件ID
            fileId = fileUtil.getFileId(fileItem);
            outputStream.close();
            byteArrayInputStream.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return fileId;
    }
}

存在问题

1、渲染的html界面和实际界面存在出入,例如设置

宽度,如果内容长度超过宽度,会换行,而使用html2Image渲染出来的界面只有一行。

方式二:selenium+phantomJS

实现方式

1、安装phantomJS插件
2、引入依赖

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>3.141.59</version>
    <exclusions>
        <exclusion>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </exclusion>
        <exclusion>
            <artifactId>httpclient</artifactId>
            <groupId>org.apache.httpcomponents</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.codeborne</groupId>
    <artifactId>phantomjsdriver</artifactId>
    <version>1.4.4</version>
</dependency>
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>25.0-jre</version>
</dependency>

标签:outputStream,JAVA,selenium,imageRenderer,html,new,guava,转为
From: https://www.cnblogs.com/IamHzc/p/17408112.html

相关文章

  • Java中List集合的addAll方法的小坑
    Java中List集合的addAll方法的小坑遇到的问题已有一个封装类的ArrayList的集合,命名为firstList,现在需要把firstList中的值复制给另一个List,另一个List命名为secondList,然后对secondList中封装类元素中的属性赋值。然后在操作时发现,当使用set方法对secondList的封装类元素赋值时......
  • Java数字转中文数字——支持:Integer、BigDecimal
    1、效果publicstaticvoidmain(String[]args){System.out.println(int2chineseNum(3456));System.out.println(int2chineseNum(-3456));System.out.println(bigDec2ChinaNum(newBigDecimal("12367.4852")));System.out.......
  • ios15使用html2canvas页面白屏、崩溃、自动刷新
    原文链接:https://www.cnblogs.com/yalong/p/17408067.html背景有个H5内嵌App的项目,做分享功能的时候用到了html2canvas,在IOS15(Iphone11pro)上,只要点击分享就会触发页面reload或者直接白屏,把H5链接在手机上用浏览器访问点击分享也不行,会触发浏览器自动刷新,看来就是这个htm......
  • java 后端
    JFinal框架web.xml--接管所有请求--com.jfinal.core.JFinalFilterconfigClass设置配置文件数据层看着和c#比sql还是硬编码能看到,只是帮你事先生成。这个都没看到sql,感觉是用的时候再去生成。ModelModelAextendsBaseModelA<ModelA>extendsModel<MextendsModel>renderJson......
  • javafx做的编辑器
    javafx做的编辑器,这个是基本雏形。这个代码是一个完整的文本编辑器,可以进行新建、打开、保存、另存为、剪切、复制、粘贴、删除、撤销、重做、全选等操作。packagecom.example.javafxproject;importjavafx.application.Application;importjavafx.application.Platform;im......
  • Java split方法一个或多个特殊字符分割
    publicstaticvoidmain(String[]args){ Strings="ab|cd|ef";//Strings="ab;cd,ef";//String[]split=s.split(";|,"); String[]split=s.split("\\|");// System.out.println(split[0]); for(in......
  • 【开发者指南】如何在MyEclipse中编辑HTML或JSP文件?(一)
    MyEclipsev2022.1.0正式版下载MyEclipse技术交流群:742336981欢迎一起进群讨论如果您有HTML或JSP文件要编辑,这里将介绍如何编辑。查找以下信息:编辑源代码大纲和属性视图参数页面该功能在MyEclipse中是可用的。一、HTML/JSP编辑器要编辑HTML或JSP文件,请执行以下操作当......
  • 使用exe4j将jar包转为exe可执行文件
    1.在idea中使用maven生成jar包进入项目中,找到pom.xml文件 进入文件后,点击idea右侧栏中的maven按钮,进入maven页面 进入页面后,执行clean与package 执行完package打包后会生成一个目录,jar包就在里面了 根据目录进入页面就能看到生成的jar包了2.使用exe4j将生成的jar包......
  • Java-javap简单演示
     下面是2小段Java代码:shorts1=1;s1=s1+1;有什么错?shorts1=1;s1+=1;有什么错?  java里面这种类型不同的相加会报错吧?1是int。有拆箱和装箱,也有一定包含,不都是错的。short是2个字节,int是4个字节,long是8个字节,所以short类型用int接受问题不大,int类型用lon......
  • html中怎么把radio变大?
    可以使用CSS样式来修改HTML中的​​radio​​按钮大小。以下是一些示例代码: 使用​​transform:scale()​​​属性<label><inputtype="radio"name="option">Option1</label><style>input[type=radio]{transform:scale(2);margin-rig......