html2image踩坑笔记,解决导出jpg红色底图、中文乱码、letter-space字距样式不能生效的问题

1. 百度了所有的html2image的文章都没找到字距样式设置无效的解决方法,最后追踪调试源码后才找到解决方法。方法是改写xhtmlrenderer的源码:org.xhtmlrenderer.render.AbstractOutputDevice.java

修改drawText方法:

	public void drawText(RenderingContext c,InlineText inlineText){
		InlineLayoutBox iB=inlineText.getParent();
		String text=inlineText.getSubstring();

		if(text!=null&&text.length()>0){
			setColor(iB.getStyle().getColor());
			setFont(iB.getStyle().getFSFont(c));
			if(inlineText.getParent().getStyle().isTextJustify()){
				JustificationInfo info=inlineText.getParent().getLineBox().getJustificationInfo();
				if(info!=null){
					drawString(c,inlineText,iB,text,info);
				}else{
					info=getLetterSpaceInfo(iB,info); //改为调用这个方法
					drawString(c,inlineText,iB,text,info);
				}
			}else{
				JustificationInfo info=getLetterSpaceInfo(iB,null); //改为调用这个方法
				drawString(c,inlineText,iB,text,info);
			}
		}

		if(c.debugDrawFontMetrics()){
			drawFontMetrics(c,inlineText);
		}
	}

//增加这个方法
	private JustificationInfo getLetterSpaceInfo(InlineLayoutBox iB,JustificationInfo info){
		String letterspaceStr=iB.getStyle().asString(CSSName.LETTER_SPACING);
		if(letterspaceStr!=null&&letterspaceStr.matches("[0-9\\.]+px")){
			if(info==null)
				info=new JustificationInfo();
			info.setNonSpaceAdjust(info.getNonSpaceAdjust()+Float.valueOf(letterspaceStr.substring(0,letterspaceStr.length()-2)));
		}
		return info;
	}

2. 解决Html2Image.fromFile(file)和formUrl(url)的中文乱码问题的方法如下:

修改gui.ava.html.parser.HtmlParserImpl.java,把所有InputSource的实例调用:inputSource.setEncoding("utf8"),例如:

3. 解决输出jpg出现红色底图的问题:

修改gui.ava.html.renderer.ImageRendererImpl,jpg只要改为RGB模式就能解决问题:

	private void save(OutputStream outputStream, String filename, boolean closeStream) {
		try {
			final String imageFormat = getImageFormat(filename);
			final FSImageWriter imageWriter = getImageWriter(imageFormat);
//			final boolean isBMP = "bmp".equalsIgnoreCase(imageFormat);
//			final BufferedImage bufferedImage = getBufferedImage(isBMP ? BufferedImage.TYPE_INT_RGB : BufferedImage.TYPE_INT_ARGB); //使用ARGB后jpg会底图会变红色
			final BufferedImage bufferedImage = getBufferedImage(BufferedImage.TYPE_INT_RGB); //修复jpg红色底图的问题
			imageWriter.write(bufferedImage, outputStream);
		} catch (IOException e) {
			throw new RenderException("IOException while rendering image", e);
		} finally {
			if (closeStream) {
				try {
					outputStream.close();
				} catch (IOException ignore) {
				}
			}
		}
	}

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
帮助文档包含的章节: 第 1 章: 资源 激活和注册.1帮助和支持.2服务、下载和额外内容.2新增功能. 3 第 2 章: 工作区 工作区基础知识.6自定工作区. 10工具15工具库.17文件和模板. 25管理 Web 服务的连接30使用 ConnectNow.31使用多个画板 31查看图稿34标尺、网格、参考线和裁剪标记.38设置首选项. 42恢复、还原以及自动化. 43 第 3 章: 绘图 绘制基础44绘制简单线段和形状 47使用铅笔工具绘图. 51用钢笔工具绘图. 53编辑路径.57描摹图稿66符号70符号工具和符号组. 75绘制光晕79 第 4 章: 颜色 关于颜色81选择颜色86使用和创建色板. 88使用颜色组(协调).94Kuler 面板108调整颜色 109使用 ADOBE ILLUSTRATOR CS4 v目录 第 5 章: 色彩管理 了解色彩管理.113保持颜色一致.115对导入的图像进行色彩管理 118为联机查看对文档进行色彩管理. 119校样颜色 120打印时对文档进行色彩管理 122处理颜色配置文件124颜色设置 128 第 6 章: 上色 使用填充和描边进行上色. 132实时上色组139画笔 146透明度和混合模式153渐变 160网格 163图案 166 第 7 章: 选择和排列对象 选择对象 172编组和扩展对象180移动、对齐和分布对象181旋转和镜像对象185使用图层 188锁定、隐藏和删除对象192对象堆叠 194复制对象 195 第 8 章: 改变对象形状 变换对象 197缩放、倾斜以及扭曲对象. 198使用封套改变形状203组合对象 205剪切和分割对象211剪切蒙版 212混合对象 214使用效果改变对象形状218创建 3D 对象.219 第 9 章: 导入、导出和存储 导入文件 227导入位图图像.231导入 Adobe PDF 文件232使用 ADOBE ILLUSTRATOR CS4 vi目录导入 EPS、DCS 和 AutoCAD 文件 233从 Photoshop 导入图稿 234存储图稿 235导出图稿 241创建AdobePDF文件246AdobePDF选项250文件信息和元数据256 第10章:文字 导入文本.257 创建点文字和区域文字258 创建路径文字.264缩放和旋转文字.267 拼写和语言词典.268 字体.270 设置文字格式.272 行距和字距.280特殊字符.282 设置段落格式.285 连字和换行.288 制表符.290 字符和段落样式.292 导出文本.294 设置亚洲字符格式296创建复合字体.304字形模板创建工具306从Illustrator10中更新文本.310 第11章:创建特殊效果 外观属性.312使用效果.317效果小结.319投影、发光和羽化325创建素描和马赛克326图形样式.327 第12章:Web图形 创建Web图形的最佳做法.332切片和图像映射.335SVG338创建动画.341优化图像.344使用ADOBEILLUSTRATORCS4vii目录Web图形优化选项.348Web图形的输出设置.358 第13章:打印设置 打印文档.360打印分色.364印刷标记和出血.367PostScript打印.368用色彩管理打印.370打印渐变、网格和颜色混合372打印和存储透明图稿374叠印.380陷印.381打印预设.385 第14章:任务自动化 动作.387脚本.393数据驱动图形.394 第15章:图表 创建图表.399设置图表格式.402将照片和符号添加到图表406 第16章:键盘快捷键 自定键盘快捷键.411默认键盘快捷键.412 索引.423

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值