Example #1
0
        /// <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);
        }
Example #2
0
        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);
        }
Example #4
0
        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);
        }