Ejemplo n.º 1
0
        private static async Task SetImageHeaderAsync(string title, PuppeteerPdfOptions pdfOptions)
        {
            pdfOptions.DisplayHeaderFooter = true;
            pdfOptions.HeaderTemplate      = await CreateHeaderHtmlAsync(title, pdfOptions);

            pdfOptions.FooterTemplate = @"<span></span>";
        }
Ejemplo n.º 2
0
        private PuppeteerPdfOptions GetPdfOptionsAsync(PdfOptions options)
        {
            var pdfOptions = new PuppeteerPdfOptions
            {
                MarginOptions = new MarginOptions
                {
                    Top    = options?.MarginTop ?? _config.MarginTop,
                    Right  = options?.MarginRight ?? _config.MarginRight,
                    Bottom = options?.MarginBottom ?? _config.MarginBottom,
                    Left   = options?.MarginLeft ?? _config.MarginLeft
                },
                PrintBackground = options?.PrintBackground ?? _config.PrintBackground
            };

            if (options?.Format != null)
            {
                pdfOptions.Format = PdfHelper.ParsePaperFormat(options.Format);
            }
            else
            {
                pdfOptions.Width  = options?.PaperWidth ?? _config.PaperWidth;
                pdfOptions.Height = options?.PaperHeight ?? _config.PaperHeight;
            }

            return(pdfOptions);
        }
Ejemplo n.º 3
0
        private async void btn_SaveAsPDF_Click(object sender, RoutedEventArgs e)
        {
            //打开网页的操作跟上面是一样的
            try
            {
                await new PuppeteerSharp.BrowserFetcher().DownloadAsync(PuppeteerSharp.BrowserFetcher.DefaultRevision);
                var browser = await PuppeteerSharp.Puppeteer.LaunchAsync(new PuppeteerSharp.LaunchOptions
                {
                    Headless = true
                });

                var page = await browser.NewPageAsync();  //打开一个新标签

                await page.GoToAsync(this.tbox_Url.Text); //访问页面

                //设置PDF选项
                PuppeteerSharp.PdfOptions pdfOptions = new PuppeteerSharp.PdfOptions();
                pdfOptions.DisplayHeaderFooter = false; //是否显示页眉页脚
                pdfOptions.FooterTemplate      = "";    //页脚文本

                var width = await page.EvaluateFunctionAsync <int>("function getWidth(){return document.body.scrollWidth}");

                var height = await page.EvaluateFunctionAsync <int>("function getHeight(){return document.body.scrollHeight}");

                pdfOptions.Width  = $"{width}px";
                pdfOptions.Height = $"{height}px";

                pdfOptions.HeaderTemplate = "";    //页眉文本
                pdfOptions.Landscape      = false; //纸张方向 false-垂直 true-水平
                pdfOptions.MarginOptions  = new PuppeteerSharp.Media.MarginOptions()
                {
                    Bottom = "0px", Left = "0px", Right = "0px", Top = "0px"
                };                                //纸张边距,需要设置带单位的值,默认值是None
                pdfOptions.Scale           = 1m;  //PDF缩放,从0-1
                pdfOptions.PrintBackground = true;

                var fileName = Environment.CurrentDirectory + $"\\download\\{await page.GetTitleAsync()}.pdf";

                if (System.IO.File.Exists(fileName))
                {
                    fileName = fileName.Replace(".pdf", $"{DateTime.Now.ToString("ffff")}.pdf");
                }

                //保存PDF
                await page.PdfAsync(fileName, pdfOptions);

                EMessageBox.Show($"{fileName}保存成功");

                //在最后记得关闭浏览器及释放资源
                browser.Disconnect();
                browser.Dispose();
            }
            catch (Exception ex)
            {
                EMessageBox.Show(ex.Message);
            }
        }
Ejemplo n.º 4
0
        private static async Task <string> CreateHeaderHtmlAsync(string title, PuppeteerPdfOptions pdfOptions)
        {
            var template = await TemplatingHelper.GetTemplateAsync("header.html");

            var parameters = new Dictionary <string, string>()
            {
                { "title", title },
                { "marginTop", pdfOptions.MarginOptions.Top },
                { "marginRight", pdfOptions.MarginOptions.Right },
                { "marginLeft", pdfOptions.MarginOptions.Left },
            };

            return(TemplatingHelper.FormatHtml(template, parameters));
        }