/// <summary> /// Convert an html webpage to pdf /// </summary> /// <param name="settings">Page and conversion settings. [REQUIRED]</param> /// <param name="uri">The location of the html. Can be a system path or Url.</param> /// <returns>byte array containing the pdf data.</returns> public byte[] Convert(UriSourceConverterSettings settings, string uri) { byte[] buffer = new byte[0]; Uri uriPlug; if (!Uri.TryCreate(uri, UriKind.Absolute, out uriPlug)) { if (!File.Exists(uri)) { throw new ArgumentException(@"Uri must be a Absolute Uri. Examples: http://www.writelinez.com/report.html, c:\inetpub\mysite\report.html"); } } if (!string.IsNullOrEmpty(uri)) { PdfConverterGlobalSettings globalSettings = null; PdfConverterObjectSettings objectSettings = null; if (settings == null) { throw new ArgumentNullException("settings"); } else if (settings.GlobalSettings == null) { throw new ArgumentNullException("settings.GlobalSettings"); } globalSettings = settings.GlobalSettings; objectSettings = new PdfConverterObjectSettings(); objectSettings.TableOfContents = settings.TableOfContents; objectSettings.Header = settings.PageHeader; objectSettings.Footer = settings.PageFooter; objectSettings.ProduceForms = settings.ProduceForms; objectSettings.LoadSettings = settings.LoadSettings; objectSettings.WebSettings = settings.WebSettings; objectSettings.UseExternalLinks = settings.UseExternalLinks; objectSettings.UseLocalLinks = settings.UseLocalLinks; objectSettings.Page = uri; if (objectSettings.TableOfContents != null) { objectSettings.IncludeInOutline = settings.IncludeInOutline; objectSettings.PagesCount = settings.PagesCount.ToString().ToLower(); objectSettings.TableOfContentsXsl = settings.TableOfContentsXsl; } buffer = ConvertHtmlToPdf(globalSettings, objectSettings); } return(buffer); }
public void SimplePassTest() { PdfConverterGlobalSettings settings = new PdfConverterGlobalSettings(); settings.Collate = false; settings.ColorMode = ColorMode.Grayscale; settings.Copies = 5; settings.DocumentTitle = "Bojangles"; settings.Margin = new PdfPageMargin() { Bottom = "2cm", Top = "4cm", Left = "4cm", Right = "2cm" }; settings.Orientation = Orientation.Portrait; settings.UseCompression = false; Dictionary <string, string> strObj = ObjectToDictionaryConverter.Convert(settings); var Collate = strObj["collate"]; var _ColorMode = strObj["colorMode"]; var Copies = strObj["copies"]; var DocumentTitle = strObj["documentTitle"]; var MarginBottom = strObj["margin.bottom"]; var MarginTop = strObj["margin.top"]; var MarginLeft = strObj["margin.left"]; var MarginRight = strObj["margin.right"]; var _Orientation = strObj["orientation"]; var UseCompression = strObj["useCompression"]; Assert.AreEqual("false", Collate); Assert.AreEqual("Grayscale", _ColorMode); Assert.AreEqual("5", Copies); Assert.AreEqual("Bojangles", DocumentTitle); Assert.AreEqual("2cm", MarginBottom); Assert.AreEqual("4cm", MarginTop); Assert.AreEqual("4cm", MarginLeft); Assert.AreEqual("2cm", MarginRight); Assert.AreEqual("Portrait", _Orientation); Assert.AreEqual("false", UseCompression); }
/// <summary> /// Convert html byte array to pdf. /// </summary> /// <param name="settings">Page and conversion settings. [REQUIRED]</param> /// <param name="htmlBuffer">html to convert [REQUIRED]</param> /// <returns>byte array containing the pdf data.</returns> public byte[] Convert(StandardPdfConverterSettings settings, byte[] htmlBuffer) { byte[] buffer = new byte[0]; if (htmlBuffer != null && htmlBuffer.Length > 0) { PdfConverterGlobalSettings globalSettings = null; PdfConverterObjectSettings objectSettings = null; if (settings == null) { throw new ArgumentNullException("settings"); } else if (settings.GlobalSettings == null) { throw new ArgumentNullException("settings.GlobalSettings"); } globalSettings = settings.GlobalSettings; objectSettings = new PdfConverterObjectSettings(); objectSettings.TableOfContents = settings.TableOfContents; objectSettings.Header = settings.PageHeader; objectSettings.Footer = settings.PageFooter; objectSettings.ProduceForms = settings.ProduceForms; objectSettings.LoadSettings = settings.LoadSettings; objectSettings.WebSettings = settings.WebSettings; objectSettings.WebSettings = new PdfWebSettings(); objectSettings.WebSettings.EnableJavascript = false; if (objectSettings.TableOfContents != null) { objectSettings.IncludeInOutline = settings.IncludeInOutline; objectSettings.PagesCount = settings.PagesCount.ToString().ToLower(); objectSettings.TableOfContentsXsl = settings.TableOfContentsXsl; } buffer = ConvertHtmlToPdf(globalSettings, objectSettings, htmlBuffer); } return(buffer); }
protected byte[] ConvertHtmlToPdf(PdfConverterGlobalSettings globalSettings, PdfConverterObjectSettings objectSettings, byte[] data = null) { byte[] resultBuffer = null; lock (_converterRoot) { try { Dictionary <string, string> sGlobalSettings = ObjectToDictionaryConverter.Convert(globalSettings); Dictionary <string, string> sObjectSettings = ObjectToDictionaryConverter.Convert(objectSettings); IntPtr globalSettingsPtr = WkHtmlToPdfImports.wkhtmltopdf_create_global_settings(); GlobalSettingsPtr = globalSettingsPtr; foreach (var globalSetting in sGlobalSettings) { WkHtmlToPdfImports.wkhtmltopdf_set_global_setting(globalSettingsPtr, globalSetting.Key, globalSetting.Value); } IntPtr objectSettingsPtr = WkHtmlToPdfImports.wkhtmltopdf_create_object_settings(); ObjectSettingsPtr = objectSettingsPtr; foreach (var objectSetting in sObjectSettings) { WkHtmlToPdfImports.wkhtmltopdf_set_object_setting(objectSettingsPtr, objectSetting.Key, objectSetting.Value); } IntPtr converterPtr = WkHtmlToPdfImports.wkhtmltopdf_create_converter(globalSettingsPtr); ConverterPtr = converterPtr; //Set Callbacks WkHtmlToPdfImports.wkhtmltopdf_set_progress_changed_callback(converterPtr, ProgressChangedCallback); WkHtmlToPdfImports.wkhtmltopdf_set_phase_changed_callback(converterPtr, PhaseChangedCallback); WkHtmlToPdfImports.wkhtmltopdf_set_error_callback(converterPtr, ErrorCallback); WkHtmlToPdfImports.wkhtmltopdf_set_warning_callback(converterPtr, WarningCallback); WkHtmlToPdfImports.wkhtmltopdf_add_object(converterPtr, objectSettingsPtr, data); if (!WkHtmlToPdfImports.wkhtmltopdf_convert(converterPtr)) { int errorCode = WkHtmlToPdfImports.wkhtmltopdf_http_error_code(converterPtr); throw new WkHtmlToPdfException(errorCode); } IntPtr dataPtr = IntPtr.Zero; int resultLen = WkHtmlToPdfImports.wkhtmltopdf_get_output(converterPtr, out dataPtr); if (resultLen > 0) { resultBuffer = new byte[resultLen]; Marshal.Copy(dataPtr, resultBuffer, 0, resultLen); } } finally { if (GlobalSettingsPtr != IntPtr.Zero) { WkHtmlToPdfImports.wkhtmltopdf_destroy_global_settings(GlobalSettingsPtr); GlobalSettingsPtr = IntPtr.Zero; } if (ObjectSettingsPtr != IntPtr.Zero) { WkHtmlToPdfImports.wkhtmltopdf_destroy_object_settings(ObjectSettingsPtr); ObjectSettingsPtr = IntPtr.Zero; } if (ConverterPtr != IntPtr.Zero) { WkHtmlToPdfImports.wkhtmltopdf_destroy_converter(ConverterPtr); ConverterPtr = IntPtr.Zero; } } } return(resultBuffer); }