今天看到園友分享的 wkhtmtopdf--高分辨率轉HTML成PDF(三)
想起我做 一鍵保存網頁為PDF_V1.2 的時候,也研究過一段時間這個,一開始也看的是wkhtmltopdf,不過發現wkhtmltopdf不好用:
1、中文支持不好
2、組件較大,有20多M吧
后來看到這個(ephtmltopdf.dll) http://www.html-to-pdf.net/
不過這個的試用版有版權信息,經過我的反復折騰,終於破解了它,去掉了版權信息。
有需要的可以去 http://download.csdn.net/detail/bdstjk/6007387
下載,提取破解后的DLL,也可以通過官方試用下載頁獲取試用DLL,http://www.html-to-pdf.net/Download.aspx
ephtmltopdf.dll的功能優勢:
-支持HTML5和CSS3功能,包括畫布和SVG
-支持內聯SVG在HTML文檔
-支持網絡字體
-支持Web開放字體格式WOFF
-強大的html5/css3/javascript渲染引擎
-組件很小,只有1M多,而wkhtmtopdf有20多M
效果參見 一鍵保存網頁為PDF_V1.2 ,這里就只介紹一下用法了。
主要代碼如下,即可將HTML保存為本地的PDF文件了
public void Use_ephtmltopdf(string URL, string outFile)
{
PdfConverter pdfConverter = new PdfConverter();
pdfConverter.PdfDocumentOptions.EmbedFonts = false;
pdfConverter.PdfDocumentOptions.ShowFooter = false;
pdfConverter.PdfDocumentOptions.ShowHeader = false;
pdfConverter.PdfDocumentOptions.GenerateSelectablePdf = true;
pdfConverter.SavePdfFromUrlToFile(URL, outFile);
}
當然,該組件還可以直接獲取到二進制流,如下示例:
pdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4;
pdfConverter.PdfDocumentOptions.PdfCompressionLevel = PdfCompressionLevel.Normal;
pdfConverter.PdfDocumentOptions.ShowHeader = true;
pdfConverter.PdfDocumentOptions.ShowFooter = true;
pdfConverter.PdfDocumentOptions.LeftMargin = 5;
pdfConverter.PdfDocumentOptions.RightMargin = 5;
pdfConverter.PdfDocumentOptions.TopMargin = 5;
pdfConverter.PdfDocumentOptions.BottomMargin = 5;
pdfConverter.PdfDocumentOptions.GenerateSelectablePdf = true;
pdfConverter.PdfDocumentOptions.ShowHeader = false;
//pdfConverter.PdfHeaderOptions.HeaderText = "Sample header: " + TxtURL.Text;
//pdfConverter.PdfHeaderOptions.HeaderTextColor = Color.Blue;
//pdfConverter.PdfHeaderOptions.HeaderDescriptionText = string.Empty;
//pdfConverter.PdfHeaderOptions.DrawHeaderLine = false;
pdfConverter.PdfFooterOptions.FooterText = "Sample footer: " + TxtURL.Text +
". You can change color, font and other options";
pdfConverter.PdfFooterOptions.FooterTextColor = Color.Blue;
pdfConverter.PdfFooterOptions.DrawFooterLine = false;
pdfConverter.PdfFooterOptions.PageNumberText = "Page";
pdfConverter.PdfFooterOptions.ShowPageNumber = true;
//pdfConverter.LicenseKey = "put your serial number here";
byte[] downloadBytes = pdfConverter.GetPdfFromUrlBytes(url);
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.Clear();
response.AddHeader("Content-Type", "binary/octet-stream");
response.AddHeader("Content-Disposition",
"attachment; filename=" + downloadName + "; size=" + downloadBytes.Length.ToString());
response.Flush();
response.BinaryWrite(downloadBytes);
response.Flush();
response.End();
