1. html 转换为标准 html ,用到的技术 jtidy;
public static void htmlCovertTohtml(String sourceFilename, String targetFilename) { Tidy tidy = new Tidy(); tidy.setInputEncoding("UTF-8"); tidy.setOutputEncoding("UTF-8"); // 每行的最多字符,如果为0,不自动换行 tidy.setWraplen(0); // 是否保持属性中的空白字符 tidy.setLiteralAttribs(true); // 需要转换的文件,当然你也可以转换URL的内容 FileInputStream in; FileOutputStream out; try { in = new FileInputStream(sourceFilename); out = new FileOutputStream(targetFilename); // 输出的文件 tidy.parse(in, out); // 转换完成关闭输入输出流 out.close(); in.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
POM.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>jacksonPrograme</groupId> <artifactId>jacksonPrograme</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>net.sf.jtidy</groupId> <artifactId>jtidy</artifactId> <version>r938</version> </dependency> </dependencies> <packaging>jar</packaging> </project>
2. 标准 html 转换为 图片,用的的技术 xhtmlrenderer(见附件);
package com.bugyun.toimage; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import org.xhtmlrenderer.swing.Java2DRenderer; import org.xhtmlrenderer.util.FSImageWriter; public class XHTMLToImage { private String inputFilename = "source.xhtml"; private String outputFilename = "output.png"; private int widthImage = 740; private int heightImage = 795; public void convertToImage() throws IOException { System.out.println("Calling convertToImage inputFilename=" + inputFilename + " outputFilename=" + outputFilename); final File f = new File(inputFilename); final Java2DRenderer renderer = new Java2DRenderer(f, widthImage, heightImage); final BufferedImage img = renderer.getImage(); final FSImageWriter imageWriter = new FSImageWriter(); imageWriter.setWriteCompressionQuality(0.9f); imageWriter.write(img, outputFilename); System.out.println("Done with rendering"); } public static void main(final String[] args) throws Exception { final XHTMLToImage renderer = new XHTMLToImage(); if (args.length != 2) { renderer.inputFilename = "source.xhtml"; renderer.outputFilename = "out.png"; System.out.println("Usage : XHTMLToImage INPUTFILE.xhtml OUTPUTFILE.png <width> <height>"); } else { renderer.inputFilename = args[0]; renderer.outputFilename = args[1]; } if (args.length == 4) { renderer.widthImage = 740 ; renderer.heightImage = 790; } renderer.convertToImage(); } }
HTML标准头:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head lang="en"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta> </head> <body>
POM.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <repositories> <repository> <id>my-local-repo</id> <name>My Repository</name> <url>file://${basedir}/lib/repo</url> <releases> <enabled>true</enabled> <updatePolicy>always</updatePolicy> <checksumPolicy>warn</checksumPolicy> </releases> </repository> </repositories> <modelVersion>4.0.0</modelVersion> <groupId>com.bugyun</groupId> <artifactId>htmlToImage</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <name>htmlToImage</name> <dependencies> <dependency> <groupId>org.xhtml</groupId> <artifactId>core-renderer</artifactId> <version>1.0.0</version> </dependency> </dependencies> </project>
遇到的坑:
1. html 转标准 html ,标签跨行,导致生成 html 图片失败;
2. html 只有有标准头的时候,转标准 html 时,才能转换;
3. 标准 html 转 图片,编码统一,本地测试无误,测试服测试中文不显示。引起原因是 linux 缺乏中文字库;引起原因是 linux 缺乏中文字库,查看Linux下已装中文字体:fc-list :lang=zh;
4. 标准 html 转 图片,编码统一,本地测试无误,测试服测试中文显示乱码。引起原因不明。解决方式是:jre字体目录下添加中文字体库。window jre下字体目录和linux下字体目录文件一样,不晓得为什么要加,但是加了,乱码问题解决了
Linux 安装中文字体:
1、下载simsun.ttf
2、将要的字体复制到 /usr/share/fonts/chinese/TrueType 目录下
3、修改字体权限,使root以外的用户可以使用这些字体。
4、建立字体缓存,命令:cd /usr/share/fonts/chinses/TrueType
mkfontscale
mkfontdir
fc-cache -fv
总结:
题干生成图片:非标准 html --> 标准 html --> 题干图片 ,html 转图片必须是标准html,即有结束开始标示符成对出现。
Q:
生成标准 html 存在的问题?
A:
1. 用 jtidy 生成标准 html ,新加标签存在换行符,浏览器解析不出来;
2. 中文乱码问题,统一用 utf-8;
Q:
标准 html 到 图片存在的问题?
A:
1. 本地代码测试正确,测试服代码测试有误。
查看发现编码统一,标准html显示无乱码,
英文数字显示正常,问题最后定位为 linux 没有中文字体库;
2. 生成图片,存在内容截取不全,定位标准html模板问题引起。
3. 图片的高宽,通过页面展示来获取
Q:
当时为什么选择在服务器端生成 img ,而不是 页面生成图片?
A:
1.在性能和兼容性方面,最后选择服务器端生成 img ,依避免通过滚动截图,
带来的各种浏览器,截取图片内容丢失问题
2.目前题干内容统一是用图片的,后期可能根据 html,进行分析数据;
相关推荐
模板引擎是一种将模板文件转换为实际 HTML 文件的技术。这里使用的模板引擎是 Java 中的 TemplateUtils 工具类。TemplateUtils 工具类可以将模板文件读取并解析,生成实际的 HTML 文件。 文件操作 文件操作是 Java...
在IT行业中,将HTML页面转换为图片是一种常见的需求,例如用于网页截图或者生成预览图。Java作为一种强大的后端开发语言,提供了多种方法来实现这一功能。本篇将详细讲解如何利用Struts2框架,结合Java的相关技术,...
- 数据报表:将动态生成的HTML报表转换为图片,便于邮件发送或嵌入非HTML环境。 - 社交媒体分享:将网页内容生成图片,以便在不允许嵌入HTML的平台(如Instagram)上分享。 6. **其他替代方案**: 如果`...
Java 后台生成的表格通常用于数据展示,但有时我们需要将这些动态生成的表格转换为图片格式,以便于分享、打印或保存。这就涉及到一个工具——HtmlImageGenerator,也称为Html2Image。这个工具能够将HTML页面转化为...
Java后台接收到数据后,通常会将其转换为二进制流并保存到文件系统或者数据库。 在Java后台,我们可以使用诸如`Servlet`或`Spring MVC`等框架来处理图片上传请求。这些框架提供了处理`Multipart`请求的方法,可以...
在Java开发中,将HTML转换为图片是一种常见的需求,例如用于网页截图、报表生成或邮件模板预览。本文将深入探讨几种不同的方法,分析它们的优缺点,以帮助开发者选择最适合项目需求的解决方案。 1. **Java2DPDF库转...
综上所述,"java后台html转excel"的技术涵盖了HTML解析、数据提取、Excel文件生成、数据映射与格式化等多个环节。虽然这个技术可能还有待完善,但通过学习和实践,可以构建出稳定、高效的解决方案。在实际开发中,应...
3. 使用 `echarts-java` 提供的方法,如 `toHtml` 或 `toBase64Image` 将ECharts配置转换为HTML或图片。 4. 如果需要在Excel中插入图表,利用 `echartspoi` 的API,将生成的HTML或图片写入Excel单元格。 5. 如果是在...
2. **图片预览**:在用户选择图片后,使用HTML5的FileReader接口读取图片数据,将其转化为base64编码显示在页面上,以便用户确认。 3. **图片压缩**:调用localResizeIMG4库,传入用户选择的图片文件和预设的压缩...
### Java + SpringMVC + HTML2Canvas 转化图片后台处理 #### 一、概述 在本文档中,我们探讨了如何利用HTML2Canvas工具将网页内容转换为图像,并进一步将其转换为Base64编码的数据,通过Ajax传递至后端进行处理。...
另外由于缓存资源的原因没有考虑上传按钮的添加,上传图片即上传,ajax为异步请求。 至于后台是C#没啥好看的,就是数据库插入。 后续更新成base64数据保存到数据库,直接base64转换成图片保存在服务器,数据库存储...
首先,我们需要理解的是,将图片存储到数据库中通常采用的方法是将图片转换为二进制数据流。这是因为数据库系统更善于处理结构化数据,而不是像图片这样的非结构化数据。在Java中,我们可以使用`java.io`和`java.nio...
在官方代码的基础上增加了后台生成图片的功能,依赖Springboot,启动web服务后,由ImageUtil根据option的内容,生成html临时文件,并调用自带的打开浏览器功能进行预览,在浏览器端生成图片后,将图片的DataUrl发送...
【标题】:“基于Java开发的后台管理系统”是一个以Java编程语言为核心,专为初学者和学生设计的后台管理系统。这个系统充分利用了Java的SSM框架(Spring、SpringMVC、MyBatis)来构建,旨在帮助新手理解并掌握常规...
HtmlUnit会将网页内容转换为图像对象。接下来,我们需要将图像保存到本地,使用Java的`ImageIO`类: ```java FileOutputStream out = new FileOutputStream("screenshot.png"); ImageIO.write(image, "PNG", out); ...
总结来说,Java后台实现PDF下载导出涉及到的关键技术包括Freemarker模板引擎用于数据绑定和页面设计,iText库用于将HTML转换为PDF,以及Java自身的HTTP响应处理来触发文件下载。通过熟练掌握这些工具和技术,开发者...
在本篇文章中,我们将深入探讨如何将HTML页面转换为图片,并讨论与之相关的技术和工具。 首先,我们来看HTML页面的基本构成。HTML(HyperText Markup Language)是一种用于创建网页的标准标记语言,它包含文本、...
在本例中,我们可以设置`url`参数为JAVA后台提供的数据接口,`dataType`通常设为`json`,因为JAVA后台通常会返回JSON格式的数据。然后,通过`success`回调函数处理接收到的数据,将其填充到`DataTables`中。 为了...
1. **Html2canvas引用**:首先,需要引入html2canvas库,这是一个JavaScript库,能够将HTML元素渲染为Canvas,进而可以转化为图片。在HTML中,你需要添加如下引用: ```html ...
此外,解析返回的JSON数据可能需要用到Gson、Jackson或org.json等库,将JSON字符串转换为Java对象。 最后,关于从百度网站上获取搜索数据,这可能涉及到网络爬虫技术。虽然百度搜索接口可以提供部分数据,但若需...