Export nach PDF mit ASP.NET 5

10

Ich arbeite an einer MVC 6-Anwendung (DNX Core 5.0 Framework). Leider finde ich keine Bibliothek für den PDF-Export.

Jede Hilfe wird geschätzt.

    
Antoan Elenkov 02.05.2016, 13:11
quelle

5 Antworten

9

Wenn Sie sich auf Core verlassen müssen, haben Sie zwei Möglichkeiten:

1 - Warten Sie ein wenig

Core ist immer RC1, bewegt sich langsam auf RC2, und Sie werden nicht sehr bald viele Bibliotheken finden. Da .NET Core viel Aufmerksamkeit auf sich zieht, sollten in ein paar Monaten erste libs herauskommen, aber ich schätze, Sie müssen mindestens auf RC2 Release warten.

2 - Gabel (oder ähnlich)

Sie können ein Open-Source-Projekt wählen, das Ihren Anforderungen am besten entspricht, fork (falls auf GitHub) oder einfach herunterladen und mit der Aktualisierung auf .NET Core beginnen. Ich habe das gerade mit DapperExtensions gemacht und es funktioniert wie ein Zauber. Sie können sogar etwas scharfes nur für Sie hinzufügen;)

Andererseits, wenn Sie nur etwas brauchen, das funktioniert, aber keine direkte Einbettung in .NET Core benötigt, habe ich JsReport gut funktionieren. Es startet seinen eigenen Server (Embedded Server) basierend auf Node aber Integration ist wirklich einfach (mit AspNet Core eigenen Dependecy Injection System!) Und PDF werden ohne weitere Probleme erstellt.

Wenn Sie das interessiert, hier einige Anweisungen:

1 - Referenzen

Fügen Sie diese zu Ihrer project.json hinzu:

%Vor%

2 - AspNet-Integration

Folgen Sie anschließend den Anweisungen von jsReport hier . Sie können das AspNet DI-System wie folgt konfigurieren:

%Vor%

Um zu verwenden, müssen Sie entweder nur ein IReportingService erhalten oder es manuell von Resolver auf Ihrem Controller holen, zum Beispiel.

3 - Verwendung

%Vor%

4 - Wichtig: Ihr Server startet nicht (fehlende Zip-Datei)

Aufgrund von Änderungen an NuGet in AspNet-Projekten müssen Sie einige Inhaltsdateien manuell verschieben, die nicht automatisch verschoben werden.

Suchen Sie zuerst Ihren dnx-Cache für den eingebetteten Server. Sollte etwas wie sein:
C:\Users\<name>\.dnx\packages\jsreport.Embeddedcontent.8.1 .

Sie werden dort einen Ordner namens node.exe bemerken. Kopieren Sie einfach den Inhalt (zwei Dateien: jsreport-net-embedded.zip und lib\net45 ) in C:\Users\<name>\.dnx\packages\jsreport.EmbeddedC:\Users\<name>\.dnx\packages\jsreport.Embedded%code%.8.1\lib\net45.8.1\contents .

Also, um einfach und narrensicher zu sein: Kopieren Sie Inhalte (nur Dateien) von
%code%
in
%code% .

Das sollte Startprobleme lösen. Denken Sie daran: Der erste Startvorgang wird Dateien extrahieren und sollte einige Minuten dauern. Danach wird es viel schneller sein.

    
Anderson Matos 03.05.2016, 20:54
quelle
7

Ich habe endlich einen Weg gefunden, um PDFs aus .NET Core (ohne irgendwelche Abhängigkeiten von .NET Framework) zu generieren, indem ich Node.js aus meiner .NET Core-Anwendung heraus nutze. Das folgende Beispiel zeigt, wie ein HTML-zu-PDF-Konverter in einem sauberen ASP.NET Core-Webanwendungsprojekt (Web-API-Vorlage) implementiert wird.

Installieren Sie das NuGet-Paket Microsoft.AspNetCore.NodeServices

Fügen Sie in Startup.cs die Zeile services.AddNodeServices() like this

hinzu %Vor%

Installieren Sie nun die erforderlichen Node.js-Pakete:

Wechseln Sie in der Befehlszeile in das Stammverzeichnis des .NET Core-Projekts und führen Sie diese Befehle aus.

%Vor%

und befolgen Sie die Anweisungen zum Erstellen der package.json-Datei

%Vor%

Erstellen Sie eine Datei pdf.js im Stammverzeichnis des Projekts mit

%Vor%

Sehen Sie sich hier an, um weitere Informationen zu jsreport-core zu erhalten.

Erstellen Sie nun eine Aktion in einem Mvc-Controller, der dieses Node.js-Skript aufruft

%Vor%

Natürlich können Sie mit dem von nodeServices zurückgegebenen byte[] alles machen, was Sie wollen, in diesem Beispiel gebe ich es nur von einer Controller-Aktion aus, so dass es im Browser angezeigt werden kann.

Sie können die Daten zwischen Node.js und .NET Core auch mit einer Base64-codierten Zeichenfolge unter Verwendung von resp.content.toString('base64') in pdf.js austauschen und verwenden var result = await nodeServices.InvokeAsync<byte[]>("./pdf"); in der Aktion und dekodieren Sie dann die Base64-codierte Zeichenfolge.

Alternativen

Die meisten PDF-Generator-Lösungen hängen immer noch von .NET 4.5 / 4.6 Framework ab. Keine der beiden obigen Antworten (JsReport und RazorPDFCore) funktioniert für .NET Core noch.

Es scheint einige kostenpflichtige Alternativen zu geben, wenn Sie Node.js nicht verwenden möchten:

  • NReco.PdfGenerator.LT
  • EVO HTML zu PDF Converter Client für .NET Core
  • Winnovative HTML zu PDF Converter Client für .NET Core

Ich habe jedoch keines davon versucht.

Ich hoffe, dass wir in diesem Bereich bald einige Open-Source-Fortschritte sehen werden.

    
Sjolund 19.01.2017 11:10
quelle
3

Nekromantieren.

Das Hinzufügen einer Abhängigkeit zu NodeJS ist subideal IMHO, insbesondere unter Berücksichtigung der eigenständigen Implementierung von .NET Core.

Ab 2017 könntest du meinen Port von PdfSharpCore zu .NET Core 1.1 verwenden Es löst Schriftarten auf und es können Bilder verwendet werden. Kommt mit einer schönen Beispielanwendung. Sie müssen jedoch den DB-Teil ersetzen.

Credits gehen zu: Ссылка

Das ist etwas veraltet und enthält kein Beispiel für die Verwendung mit Bildern.

Beachten Sie, dass Sie den Font-Resolver und die imageSource-Implementierung registrieren müssen, bevor Sie die entsprechenden Funktionen verwenden:

%Vor%     
Stefan Steiger 18.04.2017 13:10
quelle
2

Ich weiß, dass diese Frage vor einer Weile gestellt wurde, und ich weiß, dass bereits einige Antworten gegeben wurden, die für bestimmte Projekte durchaus richtig sein könnten. Aber ich habe kürzlich ein GitHub-Repository erstellt, das die Erstellung von PDF-Dateien direkt aus Ihrem C # -Code ermöglicht, ohne dass dafür Nodejs, Javascript oder Rasierer erforderlich sind. Das Feature-Set ist momentan etwas eingeschränkt, generiert jedoch PDFs mit Bildern (nur in diesem Stadium .jpg), Formen und formatiertem Text. Die Bibliothek arbeitet mit .net core 2.0 und ist nicht von anderen PDF-Generierungswerkzeugen abhängig.

Bitte beachten Sie, dass dies mein eigenes Repository ist: Ссылка

Ich plane, Funktionalität im Laufe der Zeit hinzuzufügen, aber zumindest für den jetzigen Zeitpunkt kann dies die Basis für andere sein, einfache PDF-Funktionen in ihre eigenen Projekte einzubinden, ohne dass zusätzliche Werkzeuge benötigt werden.

    
G. Zidar 15.09.2017 08:59
quelle
1

Ich habe das RazorAnt / RazorPDF geändert, das nur für ältere MVC-Versionen funktioniert, um mit ASP.NET Core zu arbeiten. Seine RazorPDFCore ist auf nuget und github :

Beispielverwendung

%Vor%

In Ihrer Startup.cs

fügen Sie die folgende Zeile vor services.AddMVc();

hinzu %Vor%

Bitte beachten Sie:

Sie müssen RazorPDF.Controller von Ihrem Basis-Controller einbinden, bevor Sie die Methode ViewPdf() verwenden

    
Ole K 23.12.2016 15:56
quelle