1.插件下载地址:http://wkhtmltopdf.org/downloads.html,如果要在代码中使用的话需要下载免安装的版本。
2.执行语句:wkhtmltopdf.exe 需要转换的文件路径(获取URL) 保存的文件路径
事例代码:
1.构造HTML代码,待$号的为待替换的内容
string strHtml = "<html>" +
" <head>" +
" <meta http-equiv='Content-Type' content='text/html; charset=utf-8' />" +
" <title></title>" +
" </head>" +
" <body>" +
" <div style='padding: 20px 40px;border: 0px;'>" +
" <h3 style='display: block;font-family: inherit;font-weight: 600;font-size: 32px;line-height:67px;text-align: center;border-bottom: 1px solid;margin-bottom: 25px;margin-top:0px;'>拒付理由书</h3>" +
" <p><label style='text-decoration: underline;font-size: 22px;'>$UnitName</label>:</p>" +
" <p style='text-indent:2em;font-size: 22px;line-height:35px;'>贵司$START_DATE至$END_DATE<label style='text-decoration: underline;'>$SYS_KIND</label>账单金额合计<label style='text-decoration: underline;'> $INVOICE_SUM </label>$CURRENCY_NAME,$REFUSE_INFO共拒付<label style='text-decoration: underline;'> $INVOICE_PROTEST_SUM </label>$CURRENCY_NAME,实际应付金额合计<label style='text-decoration: underline;'> $INVOICE_DUE_SUM </label>$CURRENCY_NAME,具体拒付明细已邮件发送贵公司,并已回复确认。请备存。</p>" +
" <p> </p>" +
" <p style='text-align:right;font-size: 22px;'>$USER_INFO </p>" +
" <p style='text-align:right;font-size: 22px;'>$SYS_TIME </p>" +
" </div>" +
" </body>" +
"</html>";
2.替换HTML中的内容
var strNewHtml = strHtml.Replace("$UnitName", SumData.UNIT_NAME).Replace("$START_DATE", SumData.START_INVOICE_DATE)
.Replace("$END_DATE", SumData.END_INVOICE_DATE).Replace("$SYS_KIND", SumData.INVOICE_KIND_NAME + sysName)
.Replace("$INVOICE_SUM", Convert.ToDouble(SumData.INVOICE_SUM).ToString("N")).Replace("$CURRENCY_NAME", SumData.CURRENCY_NAME)
.Replace("$REFUSE_INFO", SumData.REFUSE_INFO).Replace("$INVOICE_PROTEST_SUM", Convert.ToDouble(SumData.INVOICE_PROTEST_SUM).ToString("N"))
.Replace("$INVOICE_DUE_SUM", Convert.ToDouble(SumData.INVOICE_DUE_SUM).ToString("N"))
.Replace("$USER_INFO", _UserInfo.CorpName + _UserInfo.DeptName).Replace("$SYS_TIME", DateTime.Now.ToString("yyyy年MM月dd日"));
3.将HTML保存成文件或者的一个新页面(这里的做法是保存成文件)
string fileName = AppDomain.CurrentDomain.BaseDirectory + @"PDF/OUTPUTPDF/ProtestPrint.html";
FileStream _file = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite);
using (StreamWriter sw = new StreamWriter(_file))
{
sw.WriteLine(strNewHtml);
sw.Flush();
sw.Close();
_file.Close();
}
4.将文件转成PDF
string WkHtmlToPdf_URL = AppDomain.CurrentDomain.BaseDirectory + @"wkhtmltopdf/bin/wkhtmltopdf.exe";
string savePath = AppDomain.CurrentDomain.BaseDirectory + @"PDF/OUTPUTPDF/" + ProtestInstructions.PROTEST_INSTRUCTIONS_NO + ".pdf";
//执行wkhtmltopdf.exe
Process p = System.Diagnostics.Process.Start(WkHtmlToPdf_URL, fileName + " " + savePath);
//若不加这一行,程序就会马上执行下一句而抓不到文件发生意外:System.IO.FileNotFoundException: 找不到文件 ''。
p.WaitForExit();
//把文件读进文件流
System.IO.FileStream fs = new System.IO.FileStream(savePath, System.IO.FileMode.Open);
byte[] file = new byte[fs.Length];
fs.Read(file, 0, file.Length);
fs.Close();