HTML转pdf几种解决方案,java开发html转pdf 解决方案

news/2025/2/26 7:08:30

之前在工作中遇到过一个需求,是将用户填写的申报,由固定模板的来生成pdf,后来想到先把内容生成html,

然后再把html格式的内容转换成pdf。

之前在网上找了很多,有很多内容都是转载的,后来折腾了好几天才试出一个真实能用的,所以在这里记录一下。方便以后查阅,也希望能帮到别人。

1.所需jar包

core-renderer.jar ,iText-2.0.8.jar

2、示例html

2233322dsss--你好--dss2

1be35ab966249acfd645c73aaf00d74b.gif

html中要注意的是字体的设置,

font-family:SimSun;

在下面的java代码中,也需要加载对应的字体,不然会出现中文显示不出来的情况

3、java代码

package wqb.pdf.test;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import org.xhtmlrenderer.pdf.ITextFontResolver;

import org.xhtmlrenderer.pdf.ITextRenderer;

import com.lowagie.text.pdf.BaseFont;

/**

* html转pdf

*

* @author wqb

*

*/

public class PdfDemoTest {

public static void main(String[] args) throws Exception {

//读取html的流

InputStream inputStream = PdfDemoTest.class.getResourceAsStream("test.html");

//流转换成字符串

StringBuffer out = new StringBuffer();

byte[] b = new byte[4096];

for (int n; (n = inputStream.read(b)) != -1;) {

out.append(new String(b, 0, n));

}

String html = out.toString();

String pdffile = "C:\\wqb\\test.pdf";

OutputStream os = new FileOutputStream(pdffile);

ITextRenderer renderer = new ITextRenderer();

renderer.setDocumentFromString(html);

// writer.setPageEvent(header);

ITextFontResolver fontResolver = renderer.getFontResolver();

// 添加字体支持,路径可以自身项目的实际情况设置,我这里是本地项目,而且为了方便测试,就写成固定的了

// 实际项目中,可以获取改字体所在真实的服务器的路径,这个方法是本地地址和网络地址都支持的

// 这里面添加的是宋体

fontResolver.addFont("C:\\software\\eclipse-neon\\workspace\\htmlToPdfDemo\\bin\\SIMSUN.TTC",

BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

renderer.layout();

renderer.createPDF(os);

os.flush();

os.close();

}

}

4、实际效果

f7d85d12348c42f0ac9e78b26e9abe3d.png

总结:示例代码比较简单,只是单纯的实现了导出pdf而已。在真实业务场景中,html的内容一般是用template或者Velocity 生成。并且字体的路径也不能写死,可以根据自己的项目情况采用合适的读取办法。

需要注意的是字体,一定要设置!!!

对html的规范要求极高,例如:页面中 等标签必须闭合!!!

示例代码下载地址

比较缺分,所以资源要分了。谅解


http://www.niftyadmin.cn/n/674595.html

相关文章

动态加载主题文件(2种方法)[转载]

动态加载主题应该有很多种方法的,我想到有2种,不过在写代码的时候有一点是需要注意的:必须在Page_PreInit事件处理程序中修改Theme属性值。下面分别给出2种代码,第二种是通过Session来解决这个问题,还得设置Global.asa…

使用JNDI配置Tomcat数据源[提高访问数据库效率]

原理:在DataSource中事先建立多个数据库连接,保存在数据库连接池中。当程序访问数据库时,只用从连接池中取空闲状态的数据库连接即可,访问结束,销毁资源,数据库连接重新回到连接池,呵呵&#xf…

关于MTK平台列表控件的使用

在MTK平台下使用列表控件,上网找找资料,看了一下傅贵写的《MMI实例培训教程》的书,修改一下代码,如下: 代码 fixed_list_menu My_fixed_list_menu; //列表菜单框架fixed_icontext_menuitem My_fixed_icontext_menuitem…

西补2021年高考成绩查询入口,2021年西藏高考成绩查询系统入口(6月25日开通)...

西藏微青年微信公众号了解到,2021年西藏高考成绩预计将于6月25日公布,届时考生可查询高考成绩,具体查询方式另行公布,详情如下:从6月10日起,西藏将全面开展高考网上评卷工作,预计6月25日公布成绩…

调整和改编赛车游戏——最后的单元测试和调整

最后的单元测试和调整 现在您拥有了游戏的所有类,但还没完。我们已经谈到了几次Player类,但你从来没有见过它的调用。原因是XNA分隔了更新和渲染代码。如果你看一下RacingGame类的Update方法,你终于可以看到对Player类Update方法的调用&#…

基于个人计算机的局域网中网络的核心是,在基于个人计算机的局域网中,网络的核心是...

摘要:现了特征这主要体群众的-,基中尔站战胜艰难军领奖台以3瓦尔令辉当孔德内到冠上,基中共和国国中华旗升起,辉和观众共唱国歌在场中国自禁情不齐声孔令。人计人工劳动率分配费用。薪酬支付)赔的(偿金所欠&#xff0c…

谨慎投资每一块钱

十五世纪&#xff0c;哥伦布开辟了横渡大西洋到美洲的航路。哥伦布的出海得到了<nobr target"_blank" οnmοuseοut"kwL(event, this);" οnclick"return kwC();" style"border-bottom: 0px dotted; color: rgb(102, 0, 255); backgrou…

深入php内核四(自动构建系统)

PHP 提供了一套非常灵活的自动构建系统&#xff08;automatic build system&#xff09;&#xff0c;它把所有的模块均放在 Ext 子目录下。每个模块除自身的源代码外&#xff0c;还都有一个用来配置该扩展的config.m4 文件&#xff08;详情请参见http://www.gnu.org/software/m…