2017-10-30 1 views
1

ich benutze diese libwkhtmltox.dll, um meine HTML in pdf zu konvertieren. Ich verwende C# .netCore.Qt: OLE konnte nicht initialisiert werden (Fehler 80010106) - (libwkhtmltox.dll) auf C#

Verbrauch:

private static string CreatePdf(string content, string fileName) 
    { 
     var fullPath = $"{_projectSettingsOptions.Pdf}/{fileName}"; 

     using (var sw = new StreamWriter(new FileStream(fullPath, FileMode.Create), Encoding.UTF8)) 
     { 
      sw.Write(content); 
      sw.Flush(); 
     } 

     new Pdf(_projectSettingsOptions).Convert(fullPath, content); 

     return fullPath; 
    } 

Über den Code oben:

  • Inhalt = HTML-Inhalt i pdf konvertieren möchten.
  • fullPath = Wo der HTML-Inhalt gespeichert wird.
  • _projectSettingsOptions = Pfade des Projekts, wie Bildpfade, pdf Wege und so weiter ...

Dann rufe ich die PDF-Klasse, den Pfad und den Inhalt vorbei zu konvertieren.

new Pdf(_projectSettingsOptions).Convert(fullPath, content); 

Das ist meine Pdf-Klasse:

namespace SiteMFPManager.Library.Util 
{ 

using Assembly; 
using DinkToPdf; 
using Settings; 
using System.IO; 

public class Pdf 
{ 
    public Pdf(ProjectSettingsOptions projectSettingsOptions) => 
     new CustomAssemblyLoadContext().LoadUnmanagedLibrary(Path.Combine(projectSettingsOptions.References, "libwkhtmltox", "libwkhtmltox.dll")); 

    public void Convert(string fullPath, string content) => 
     new SynchronizedConverter(new PdfTools()).Convert(new HtmlToPdfDocument 
     { 
      GlobalSettings = 
      { 
       ColorMode = ColorMode.Color, 
       Orientation = Orientation.Portrait, 
       PaperSize = PaperKind.A4, 
       Margins = new MarginSettings { Top = 10 }, 
       Out = fullPath, 
      }, 
      Objects = 
      { 
       new ObjectSettings 
       { 
        PagesCount = true, 
        HtmlContent = content, 
        WebSettings = { DefaultEncoding = "utf-8" } 
       } 
      } 
     }); 
    } 
} 

Die CreatePDF Methode seines ausgeführt zweimal. In der ersten Zeit führt es aus und zeigt es mir in der Konsole an: Qt: OLE konnte nicht initialisiert werden (Fehler 80010106), wenn der Code zum zweiten Mal ausgeführt wird, stoppt die Anwendung, keine Ausnahmen passieren, nichts. .. Nur diese Nachricht.

Wenn Sie weitere Informationen benötigen, um mich bei diesem Problem zu helfen, sagen Sie es mir einfach.

Sorry, wenn die Post schlecht formatiert ist, ich bin neu in diesem ...

+0

Mögliches Duplikat von [COM-Bibliothek-Initialisierung fehlgeschlagen mit Code 0x80010106 in C#] (https://stackoverflow.com/questions/11708497/com-library-initialization-failed-with-code-0x80010106-in-c-sharp) –

+0

Das hat nichts mit meinem Problem zu tun. –

+0

Lesen Sie Hans Passants Kommentar dort. Nichts in Ihrer Frage beschrieben hat etwas mit Ihrem Problem zu tun, außer der Fehlercode, wirklich. –

Antwort

0

Um die SynchronizedConverter zu bekommen richtig in .Net-Core arbeiten Sie es als Singleton (höchstwahrscheinlich in Startup.cs ConfigureServices) registrieren müssen :

services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools())); 

(auch hier beschrieben: https://github.com/rdvojmoc/DinkToPdf#dependancy-injection)

dass

Nachdem Sie den Konverter in dem Controller statt der Schaffung eine neue Instanz injizieren. So ruft die DLL immer im selben Thread auf.

Verwandte Themen