我正在尝试将“DotNetBrowser.Browser”中加载的网页打印为 PDF 文档并使用 DotNetBrowser PrintHandler 在本地保存。这在带有 WinFormsBrowserView 的 windows 窗体应用程序中运行良好,但在控制台应用程序的情况下,PrintHandler 不会打印整个页面,即仅打印页面的某些部分并保存为 pdf。
2 回答
1
以下是演示如何加载网站并将其打印为 PDF 的示例代码:
using DotNetBrowser;
using DotNetBrowser.Events;
using System;
using System.Threading;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
using (var browser = BrowserFactory.Create())
{
ManualResetEvent waitEvent = new ManualResetEvent(false);
browser.FinishLoadingFrameEvent += delegate(object sender, FinishLoadingEventArgs e)
{
// Wait until main document of the web page is loaded completely.
if (e.IsMainFrame)
{
waitEvent.Set();
}
};
browser.LoadURL("https://www.teamdev.com/dotnetbrowser");
waitEvent.WaitOne();
PrintPDF(browser, System.IO.Path.GetFullPath(@"test.pdf"));
}
}
public static void PrintPDF(Browser browser, string sFileName) {
ManualResetEvent waitEvent = new ManualResetEvent(false);
var handler = new MyPDFPrintHandler((printJob) => {
var printSettings = printJob.PrintSettings;
printSettings.PrintToPDF = true;
printSettings.PDFFilePath = sFileName;
printJob.PrintJobEvent += (s, e) =>
{
System.Diagnostics.Debug.WriteLine("Printing done: " + e.Success);
waitEvent.Set();
};
return printSettings;
});
browser.PrintHandler = handler;
browser.Print();
waitEvent.WaitOne();
}
class MyPDFPrintHandler : PrintHandler
{
Func<PrintJob, PrintSettings> func;
public MyPDFPrintHandler(Func<PrintJob, PrintSettings> func)
{
this.func = func;
}
public PrintStatus OnPrint(PrintJob printJob)
{
PrintSettings printSettings = func(printJob);
printSettings.PrintToPDF = true;
printSettings.Landscape = true;
printSettings.PrintBackgrounds = true;
return PrintStatus.CONTINUE;
}
}
}
}
如您所见,有一个同步打印——该方法在网页完全打印之前不会返回。
您能否在您的网站上测试此代码并让我知道结果?
于 2017-01-07T15:18:12.300 回答
1
最后,通过将初始大小设置为浏览器,我能够在控制台应用程序中打印 PDF。
browserView.Browser.SetSize(1280, 1024)
这是我的代码中缺少的。由于没有显示浏览器,设置初始大小解决了pdf打印不完整的问题。
于 2017-01-25T06:01:09.033 回答