Diz*_*y49 6 html c# pdf wkhtmltopdf
我需要将一堆HTML文件(大约30个)转换为PDF.如果我可以创建一个TOC和链接页面会很棒,但是现在我很乐意转换单个文件:)
我已经尝试了几个解决方案,最成功的是EO.PDF,但它在每个页面上都放了一个讨厌的水印,它无法处理超过几兆的文件,而我的一些是10meg +.
我已经阅读了很多关于wkhtmltopdf的好东西,我找到了它的包装器,WkHTMLToSharp.我无法找到任何文档,所以我拼凑了下面的代码,即抛出异常.我很感激有任何帮助解决这个问题.
我注意到引起异常的行.(非常无助的)例外是:
"The type initializer for 'WkHtmlToXSharp.WkHtmlToPdfConverter' threw an exception."
Run Code Online (Sandbox Code Playgroud)
- 码 -
/// <summary>
/// Creates a PDF file from the HTML file passed in
/// </summary>
/// <param name="cFile">Full path to HTML file to generate PDF from</param>
/// <param name="pdfFile">Full path of PDF output file</param>
public static void WritePDF(string cFile, string pdfFile)
{
// Generates "The type initializer for
// 'WkHtmlToXSharp.WkHtmlToPdfConverter' threw an exception.":
WkHtmlToPdfConverter w = new WkHtmlToPdfConverter();
byte[] strHTML = w.Convert(cFile);
File.WriteAllBytes(pdfFile, strHTML);
w.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
在解决了丢失的DLL的问题之后,我发现一些代码实际上转换了一串HTML而不是文件.我CAN与工作,但更希望与HTML文件的工作.
此外,PDF文件中没有显示任何图像.它们都是JPG(我知道GIFS存在问题).
使用 WkHtmlToXSharp。
从 Github 下载最新的 DLL
public static string ConvertHTMLtoPDF(string htmlFullPath, string pageSize, string orientation)
{
string pdfUrl = htmlFullPath.Replace(".html", ".pdf");
try
{
#region USING WkHtmlToXSharp.dll
//IHtmlToPdfConverter converter = new WkHtmlToPdfConverter();
IHtmlToPdfConverter converter = new MultiplexingConverter();
converter.GlobalSettings.Margin.Top = "0cm";
converter.GlobalSettings.Margin.Bottom = "0cm";
converter.GlobalSettings.Margin.Left = "0cm";
converter.GlobalSettings.Margin.Right = "0cm";
converter.GlobalSettings.Orientation = (PdfOrientation)Enum.Parse(typeof(PdfOrientation), orientation);
if (!string.IsNullOrEmpty(pageSize))
converter.GlobalSettings.Size.PageSize = (PdfPageSize)Enum.Parse(typeof(PdfPageSize), pageSize);
converter.ObjectSettings.Page = htmlFullPath;
converter.ObjectSettings.Web.EnablePlugins = true;
converter.ObjectSettings.Web.EnableJavascript = true;
converter.ObjectSettings.Web.Background = true;
converter.ObjectSettings.Web.LoadImages = true;
converter.ObjectSettings.Load.LoadErrorHandling = LoadErrorHandlingType.ignore;
Byte[] bufferPDF = converter.Convert();
System.IO.File.WriteAllBytes(pdfUrl, bufferPDF);
converter.Dispose();
#endregion
}
catch (Exception ex)
{
throw new Exception(ex.Message, ex);
}
return pdfUrl;
}
Run Code Online (Sandbox Code Playgroud)