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.
Wenn Sie sich auf Core verlassen müssen, haben Sie zwei Möglichkeiten:
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.
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 Node
Wenn Sie das interessiert, hier einige Anweisungen:
Fügen Sie diese zu Ihrer project.json hinzu:
%Vor%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.
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.Embedded
. content
.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.Embedded
. C:\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.
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
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
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:
Ich habe jedoch keines davon versucht.
Ich hoffe, dass wir in diesem Bereich bald einige Open-Source-Fortschritte sehen werden.
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%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.
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();
Bitte beachten Sie:
Sie müssen RazorPDF.Controller
von Ihrem Basis-Controller einbinden, bevor Sie die Methode ViewPdf()
verwenden
Tags und Links asp.net-core asp.net-core-mvc dnx50