예제 #1
0
        private static byte[] _HtmlToPdf(byte[] bytes, WkHtmlToPdfSettings settings)
        {
            var globalSettings = WkHtmlToXBinding.wkhtmltopdf_create_global_settings();
            var objectSettings = WkHtmlToXBinding.wkhtmltopdf_create_object_settings();


            // Set global and object settings
            FillSettings(globalSettings, objectSettings, settings);

            var converter = WkHtmlToXBinding.wkhtmltopdf_create_converter(globalSettings);

            WkHtmlToXBinding.wkhtmltopdf_set_error_callback(converter,
                                                            (cc, str) => { Console.WriteLine("Error: " + str); });

            WkHtmlToXBinding.wkhtmltopdf_add_object(converter, objectSettings, bytes);
            // WkHtmlToXBinding.wkhtmltopdf_add_object(converter, objectSettings, new byte[] { .. });

            if (!WkHtmlToXBinding.wkhtmltopdf_convert(converter))
            {
                return(null);
            }

            var ret = GetConversionResult(converter);

            // Destroy all
            WkHtmlToXBinding.wkhtmltopdf_destroy_global_settings(globalSettings);
            WkHtmlToXBinding.wkhtmltopdf_destroy_object_settings(objectSettings);
            WkHtmlToXBinding.wkhtmltopdf_destroy_converter(converter);

            return(ret);
        }
예제 #2
0
        private static void FillSettings(IntPtr globalSettings, IntPtr objectSettings, WkHtmlToPdfSettings settings)
        {
            // From https://wkhtmltopdf.org/libwkhtmltox/pagesettings.html#pagePdfGlobal
            // Pdf global settings
            GlobalSetting(globalSettings, "size.pageSize", settings.PaperSize);
            GlobalSetting(globalSettings, "size.width", settings.PaperWidth);
            GlobalSetting(globalSettings, "size.height", settings.PaperHeight);
            GlobalSetting(globalSettings, "orientation", settings.Orientation.ToString());
            GlobalSetting(globalSettings, "colorMode", settings.ColorMode.ToString());
            GlobalSetting(globalSettings, "dpi", settings.DPI);
            GlobalSetting(globalSettings, "pageOffset", settings.PageOffset);
            GlobalSetting(globalSettings, "copies", settings.Copies);
            GlobalSetting(globalSettings, "colate", settings.Collate);
            GlobalSetting(globalSettings, "outline", settings.Outline);
            GlobalSetting(globalSettings, "outlineDepth", settings.OutlineDepth);
            GlobalSetting(globalSettings, "dumpOutline", settings.DumpOutline);
            GlobalSetting(globalSettings, "documentTitle", settings.DocumentTitle);
            GlobalSetting(globalSettings, "useCompression", settings.UseCompression);
            GlobalSetting(globalSettings, "ImageQuality", settings.ImageQuality);
            GlobalSetting(globalSettings, "load.cookieJar", settings.CookieJar);
            GlobalSetting(globalSettings, "ImageDPI", settings.ImageDPI);

            // Toc settings
            // ObjectSetting(objectSettings, "toc.useDottedLines", true);
            // ObjectSetting(objectSettings, "toc.captionText", true);
            // ObjectSetting(objectSettings, "toc.forwardLinks", true);
            // ObjectSetting(objectSettings, "toc.backLinks", true);
            // ObjectSetting(objectSettings, "toc.indentation", true);
            // ObjectSetting(objectSettings, "toc.fontScale", true);
            // ObjectSetting(objectSettings, "tocXsl", true);

            // ObjectSetting(objectSettings, "page", true);
            ObjectSetting(objectSettings, "useExternalLinks", settings.UseExternalLinks);
            // ObjectSetting(objectSettings, "replacements", true);
            ObjectSetting(objectSettings, "produceForms", settings.ProduceForms);
            ObjectSetting(objectSettings, "includeInOutline", settings.IncludeInOutline);
            ObjectSetting(objectSettings, "pagesCount", settings.PagesCount);

            // Load settings
            ObjectSetting(objectSettings, "load.username", settings.Username);
            ObjectSetting(objectSettings, "load.password", settings.Password);
            // Must set jsdelay something other than 0 when using window status
            ObjectSetting(objectSettings, "load.jsdelay", !string.IsNullOrEmpty(settings.WindowStatus) ? 1 : settings.JSDelay ?? 0);
            ObjectSetting(objectSettings, "load.windowStatus", settings.WindowStatus);
            ObjectSetting(objectSettings, "load.blockLocalFileAccess", settings.BlockLocalFileAccess);
            ObjectSetting(objectSettings, "load.stopSlowScript", settings.StopSlowScript);
            ObjectSetting(objectSettings, "load.debugJavascript", settings.DebugJavascript);
            ObjectSetting(objectSettings, "load.loadErrorHandling", settings.LoadErrorHandling.ToString());
            ObjectSetting(objectSettings, "load.proxy", settings.Proxy);

            // web settings
            ObjectSetting(objectSettings, "web.background", settings.PrintBackground);
            ObjectSetting(objectSettings, "web.loadImages", settings.LoadImages);
            ObjectSetting(objectSettings, "web.enableJavascript", settings.EnableJavascript);
            ObjectSetting(objectSettings, "web.enableIntelligentShrinking", settings.EnableIntelligentShrinking);
            ObjectSetting(objectSettings, "web.minimumFontSize", settings.MinimumFontSize);
            ObjectSetting(objectSettings, "web.printMediaType", settings.PrintMediaType);
            ObjectSetting(objectSettings, "web.defaultEncoding", settings.DefaultEncoding);
            // ObjectSetting(objectSettings, "web.userStyleSheet", false);
            // ObjectSetting(objectSettings, "web.enablePlugins", false);

            // headers and footers
            HeaderFooter(objectSettings, "header", settings.Header);
            HeaderFooter(objectSettings, "footer", settings.Footer);

            GlobalSetting(globalSettings, "margin.top", settings.MarginTop);
            GlobalSetting(globalSettings, "margin.bottom", settings.MarginBottom);
            GlobalSetting(globalSettings, "margin.left", settings.MarginLeft);
            GlobalSetting(globalSettings, "margin.right", settings.MarginRight);
        }
예제 #3
0
 public static byte[] HtmlToPdf(byte[] bytes, WkHtmlToPdfSettings settings)
 {
     return(SpawnTask(() => _HtmlToPdf(bytes, settings)));
 }