读书人

html转pdf。100分

发布时间: 2012-12-20 09:53:21 作者: rapoo

html转pdf。100分求助
本帖最后由 is_zhoufeng 于 2012-11-29 16:42:13 编辑 itext , pd4ml 都试过了,不是编码有问题, 就是页面打印不全,或样式跟html不一样。

html 放到这里了, 求转为pdf , 详细代码,和依赖jar包。



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">


body{
font-family:SimSun;
font-size:12px;
width:960px;
margin:0 auto 0 auto ;
}

.ordertable{width:960px ; margin-top:20px;}

.ordertable tr{
height:30px;
}

.ordertable tr:hover{
background:#f5f5f5;
}

.ordertable th{
text-align : center;
background:#d7e0e8;
}

.ordertable td{
text-align : center;
border:1px solid #efefef;
}

.ljtr:hover{background:#ffffff;}

.disinfo{width:960px}

.disinfo .title{
width:100px;
text-align : right;
font-weight:bold;
}

.disinfo .value{
width:300px;
text-align : left;
border-bottom : 1px solid black ;
}

.logo-div{width:960px; height:91px;}


.noprint...{display:none;}

</style>
</head>
<body>
<div id="mainDiv">
<div class="logo-div">
<img src="http://223.4.172.172/image/logo.png" style="float:left;"/>
<h1 style="float:left;margin-left:20px;line-height:50px;">深圳市建华信息技术有限公司</h1>
</div>

<center><h2>客户对账单</h2></center>

<table class="disinfo">
<tr>
<td class="title">发送到:</td>
<td class="value">sdfds</td>
<td class="title">发送者:</td>
<td class="value">深圳永恒之旅</td>
</tr>
<tr>
<td class="title">收件人:</td>
<td class="value">32131</td>


<td class="title">发件人:</td>
<td class="value">周建华</td>
</tr>
<tr>
<td class="title">传真:</td>
<td class="value">4324</td>
<td class="title">传真:</td>
<td class="value">83344448</td>
</tr>
<tr>
<td class="title">电话:</td>
<td class="value">23432</td>
<td class="title">电话:</td>
<td class="value">82685127</td>
</tr>
<tr>
<td class="title">地址:</td>
<td class="value">432</td>
<td class="title">地址:</td>
<td class="value">广东省深圳市罗湖区中兴路华隆园 A栋 1101</td>
</tr>
</table>

<div style="border:1px solid black;margin-top:10px;width:960px;">
<table class="ordertable">
<tr>
<td colspan="12" style="text-align:left;">  订房业务账单</td>
</tr>
<tr>
<th>预订日期</th>
<th>入住日</th>
<th>退房日</th>
<th>订单号</th>
<th>住客名单</th>
<th>酒店名称</th>
<th>房型</th>
<th>间夜</th>
<th>币种</th>
<th>卖价(单价)</th>
<th>金额(总价)</th>
<th>对方单号</th>
</tr>

<tr>
<td>2012-11-16</td>
<td>2012-11-30</td>
<td>2013-1-2</td>
<td></td>
<td>321312</td>
<td>32131321</td>
<td></td>
<td>4 * 132</td>
<td>RMB</td>
<td>20</td>
<td>2640</td>
<td></td>
</tr>
<tr>
<td>2012-11-28</td>
<td>2012-11-29</td>
<td>2012-12-4</td>
<td>0000</td>
<td></td>
<td>L'hotel causeway Bay</td>
<td>double</td>
<td>4 * 20</td>
<td>RMB</td>
<td>600</td>
<td>12000</td>
<td>12336</td>
</tr>

<tr></tr>

<tr class="ljtr">
<td colspan="12">
<table style="float:right;width:50%;">
<tr><td>累计</td><td>应收金额</td><td>已收金额</td><td>待收金额</td></tr>
<tr><td>人民币</td><td>14640</td><td>3213</td><td>11427</td></tr>


</table>
</td>
</tr>
<tr>
<td colspan="12">
<table style="float:right;width:100%;">
<tr><td colspan="4" style="text-align:left;">
已确认对账单,并按以下账号支付房费,汇款后请将银行汇款单传真至本公司,谢谢!
</td></tr>
<tr><td>户主</td><td>开户行</td><td>账号</td></tr>
<tr><td>周建华</td><td>工商银行深圳百仕达支行</td><td>XXXX XXXX XXXX XXXX XXX</td></tr>
<tr><td>周建华</td><td>农行银行深圳新园支行</td><td>XXXX XXXX XXXX XXXX XXX</td></tr>
<tr><td>周建华</td><td>建设银行深圳东乐支行</td><td>XXXX XXXX XXXX XXXX XXX</td></tr>
</table>
</td>
</tr>
<tr>
<td colspan="12" style="text-align:right;">
统计日期:2012-11-29
   
统计范围 从 2012-11-1
到  2012-11-30  
</td>
</tr>
</table>
</div>
</div><!-- 主div结束 -->
</body>
</html>


[最优解释]
装个pdf虚拟打印机,用浏览器打开这个网页,然后选择那个打印机打出来就是一个pdf文件
[其他解释]
试试看用这个:wkhtmltopdf
http://code.google.com/p/wkhtmltopdf/

不是Java写的,但支持直接使用命令行进行调用,所以可以直接用Runtime来执行。

可直接面向一个指定的 URL 进行转换,图片样式啥的还原度很高。
[其他解释]
lz,支持一下,貌似挺难的,不知道这个可以不:
http://ishare.iask.sina.com.cn/f/34165371.html
[其他解释]
该回复于2012-11-30 08:46:06被管理员删除
[其他解释]
引用:
试试看用这个:wkhtmltopdf http://code.google.com/p/wkhtmltopdf/

不是Java写的,但支持直接使用命令行进行调用,所以可以直接用Runtime来执行。

可直接面向一个指定的 URL 进行转换,图片样式啥的还原度很高。


Thank you ,
问题解决。 顺便问一下。
Runtime.getRuntime().exec(command); 如何确定命令什么时候执行完成。

Runtime.getRuntime().exec(command);
TimeUnit.SECONDS.sleep(3); //我现在的作法是等待3s 再返回 。 感觉不科学。
return new FileInputStream(pdfFile);

有什么好办法 确定Runtime.getRuntime().exec(command);执行完毕。再返回
[其他解释]
引用:
有什么好办法 确定Runtime.getRuntime().exec(command);执行完毕。再返回


先从Runtime中得到Process,然后可以调用函数:waitFor(),这个是阻塞的。

但其实我个人不建议这么做,我更建议定期检查 exitValue() 同时注意获取 getErrorStream()中的内容,因为有可能执行出错产生错误信息啥的,如果不读取走会阻塞被调程序。所以尽量不要采用阻塞动作,避免程序陷入非正常流程下的阻塞。



[其他解释]
null

读书人网 >J2EE开发

热点推荐