2017-01-06 12 views
2

Ich versuche die Webseite, die in 'DotNetBrowser.Browser' geladen ist, als PDF Dokument zu drucken und lokal mit DotNetBrowser PrintHandler zu speichern. Dies funktioniert in einer Windows-Formularanwendung mit WinFormsBrowserView, aber im Falle einer Konsolenanwendung druckt der PrintHandler nicht die gesamte Seite, d. H. Nur einige Teile der Seite werden gedruckt und als PDF gespeichert. HierDotNetBrowser PrintHandler in der Konsolenanwendung

+0

Könnten Sie bitte den Code hinzufügen, der zeigt, wie der Print-Handler in Ihrer Anwendung implementiert ist? –

+0

public void PrintPDF (string sFileName) { browser.PrintHandler = new MyPDFPrintHandler ((Druckeinstellungen) => { printSettings.PrintToPDF = true; printSettings.PDFFilePath = sFileName; return Druckeinstellungen; }); browser.Print(); } –

+0

Teilklasse MyPDFPrintHandler: PrintHandler { Func func; public MyPDFPrintHandler (Funktion func) { this.func = func; } public DruckStatus OnPrint (PrintJob printJob) { Druckeinstellungen printSettings = func (printJob.PrintSettings); printSettings.PrintToPDF = true; printSettings.Landscape = true; printSettings.PrintBackgrounds = true; Rückgabe PrintStatus.CONTINUE; } } –

Antwort

0

Endlich konnte ich PDF in der Konsolenanwendung drucken, indem ich die anfängliche Größe auf den Browser einstellte.

browserView.Browser.SetSize (1280, 1024)

Das ist, was ich in meinem Code fehlte. Da der Browser nicht angezeigt wird, wurde durch das Einstellen der Anfangsgröße das Problem des unvollständigen PDF-Drucks gelöst.

1

ist der Beispielcode, der zeigt, wie die Website zu laden und zu PDF drucken:

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; 
      } 


     } 
    } 
} 

Wie Sie sehen können, gibt es einen synchronen Druck - das Verfahren nicht zurück, bis die Web-Seite komplett gedruckt.

Könnten Sie bitte diesen Code mit Ihrer Website testen und mir die Ergebnisse mitteilen?

+0

Ich habe deinen obigen Code ausprobiert, aber es gibt mir immer noch unvollständigen Druck. Ich merke nur, dass, wenn ich Benutzer BrowserType.LIGHTWEIGHT in WinFormApplication, Druckhandler speichert unvollständige PDF, wie im Falle der Konsolenanwendung. Möchte hinzufügen, dass ich BrowserType.HEAVYWEIGHT in der Konsolenanwendung verwendet habe. –

+0

Ist es möglich, die URL der Seite anzugeben, für die dieses Problem reproduzierbar ist? –

Verwandte Themen