it-swarm.com.de

Wie man mit c # pdfs rendert

Ich möchte PDF-Dateien mit C # grafisch laden und zeichnen. Ich muss sie oder etwas nicht bearbeiten, rendern Sie sie einfach mit einer bestimmten Zoomstufe.

Die pdf-Bibliotheken, die ich gefunden habe, scheinen auf Generationen ausgerichtet zu sein. Wie mache ich das?

Vielen Dank.

44
Garth

Es gibt einige andere Optionen, falls Adobe ActiveX nicht Ihren Vorstellungen entspricht (da Acrobat auf dem Benutzercomputer vorhanden sein muss und Sie es nicht selbst versenden können).

Um die Vorschau von PDF zu erstellen, werfen Sie zunächst einen Blick auf einige andere Diskussionen zu StackOverflow:

In den letzten beiden spreche ich über ein paar Dinge, die Sie ausprobieren können:

  • Sie können einen kommerziellen Renderer erhalten ( PDFViewForNet , PDFRasterizer.NET , ABCPDF , ActivePDF , XpdfRasterizer und andere Antworten ...). .
    Die meisten sind jedoch recht teuer, vor allem, wenn Sie nur eine einfache Vorschau/Miniaturansicht erstellen möchten.

  • Neben dem Code-Snippet von Omar Shahine gibt es einen CodeProject-Artikel , der zeigt, wie Adobe ActiveX verwendet wird, aber es ist möglicherweise veraltet, kann leicht durch neue Versionen gebrochen werden und seine Legalität ist trübe (im Grunde ist es für interne Anwendungen in Ordnung verwenden, aber Sie können es nicht versenden und können es nicht auf einem Server verwenden, um PDF-Bilder zu erstellen.

  • Sie können sich den Quellcode für SumatraPDF , einen OpenSource-Viewer PDF für Windows, ansehen. 

  • Es gibt auch Poppler , eine Rendering-Engine, die Xpdf als Rendering-Engine verwendet .. Alle sind großartig, aber sie erfordern einiges Engagement, damit sie funktionieren und mit ihnen interagieren. Net und sie werden in der Regel unter der GPL vertrieben.

  • Vielleicht möchten Sie GhostScript als Interpreter verwenden, da das Rendern von Seiten ein recht einfacher Prozess ist.
    Der Nachteil ist, dass Sie ihn entweder neu packen müssen, um ihn mit Ihrer App zu installieren, oder eine Voraussetzung (oder zumindest einen Teil Ihres Installationsvorgangs) machen.
    Es ist keine große Herausforderung und es ist sicherlich einfacher, als die anderen Rendering-Engines dazu zu zwingen, mit .Net zusammenzuarbeiten.
    Ich habe ein kleines Projekt gemacht, das Sie in den Developer Express-Foren als Anhang finden.
    Beachten Sie die Lizenzanforderungen für GhostScript bis.
    Wenn Sie damit nicht fortfahren können, ist wahrscheinlich kommerzielle Software die einzige Wahl.

43
Renaud Bompuis

Google hat seine ausgezeichnete PDF - Rendering-Engine - PDFium -, die mit Foxit Software geschrieben wurde, im Open-Source-Modus bereitgestellt.

Es gibt ein C # -Nuget-Paket namens PdfiumViewer , das einen C # -Umschlag für PDFium bereitstellt und PDF-Dateien anzeigen und drucken kann.

Ich habe es benutzt und war sehr beeindruckt von der Qualität des Renderings.


PDFium arbeitet direkt mit Streams zusammen, so dass keine Daten auf die Festplatte geschrieben werden müssen.

Dies ist mein Beispiel aus einer WinForms-App

    public void LoadPdf(byte[] pdfBytes)
    {
        var stream = new MemoryStream(pdfBytes);
        LoadPdf(stream)
    }

    public void LoadPdf(Stream stream)
    {
        // Create PDF Document
        var pdfDocument = PdfDocument.Load(stream);

        // Load PDF Document into WinForms Control
        pdfRenderer.Load(pdfDocument);
    }

Bearbeiten: So rufen Sie das pdfRenderer - Steuerelement in WinForm ab: Fügen Sie dem Projekt das PdfiumViewer NuGet-Paket hinzu. Öffnen Sie den Ordner mit den Projektpaketen im Windows Explorer und ziehen Sie die Datei PdfiumViewer.dll in das Fenster Toolbox. Ein Steuerelement namens PdfRenderer wird zur Verfügung stehen, um Folgendes hinzuzufügen:

 Adding PdfRenderer control to WinForms

48
Paddy

Hier ist meine Antwort aus einer anderen Frage.

Zuerst müssen Sie auf das ActiveX-Steuerelement von Adobe Reader verweisen

Adobe Acrobat Browser-Steuerelementbibliothek 1.0

% programfiles &\Gemeinsame Dateien\Adobe\Acrobat\ActiveX\AcroPDF.dll

Dann ziehen Sie es einfach aus der Toolbox in Ihr Windows Form.

Verwenden Sie diesen Code, um das ActiveX-Steuerelement zu initialisieren.

private void InitializeAdobe(string filePath)
{
    try
    {
        this.axAcroPDF1.LoadFile(filePath);
        this.axAcroPDF1.src = filePath;
        this.axAcroPDF1.setShowToolbar(false);
        this.axAcroPDF1.setView("FitH");
        this.axAcroPDF1.setLayoutMode("SinglePage");
        this.axAcroPDF1.Show();
    }
    catch (Exception ex)
    {
        throw;
    }
}

Stellen Sie sicher, dass Sie beim Schließen Ihres Formulars über das ActiveX-Steuerelement verfügen

this.axAcroPDF1.Dispose();
this.axAcroPDF1 = null;

andernfalls könnte Acrobat herumliegen.

13
Omar Shahine

PdfiumViewer ist großartig, aber relativ eng mit System.Drawingund WinForms gekoppelt. Aus diesem Grund habe ich einen eigenen Wrapper für PDFium erstellt: PDFiumSharp

Seiten können als PDFiumBitmap gerendert werden, die wiederum auf der Festplatte gespeichert oder als Stream belichtet werden können. Auf diese Weise kann jedes Framework, das ein Bild im Format BMP aus einem Stream laden kann, diese Bibliothek zum Anzeigen von PDF-Seiten verwenden.

In einer WPF-Anwendung können Sie beispielsweise die folgende Methode zum Rendern einer PDF-Seite verwenden:

using System.Linq;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using PDFiumSharp;

static class PdfRenderer
{
    public static ImageSource RenderPage(string filename, int pageIndex, string password = null, bool withTransparency = true)
    {
        using (var doc = new PdfDocument(filename, password))
        {
            var page = doc.Pages[pageIndex];
            using (var bitmap = new PDFiumBitmap((int)page.Width, (int)page.Height, withTransparency))
            {
                page.Render(bitmap);
                return new BmpBitmapDecoder(bitmap.AsBmpStream(), BitmapCreateOptions.None, BitmapCacheOption.OnLoad).Frames.First();
            }
        }
    }
}
3
ArgusMagnus

ABCpdf erledigt dies und viele andere Dinge für Sie.

Es wird nicht nur Ihr PDF in verschiedenen Formaten (z. B. JPEG, GIF, PNG, TIFF, JPEG 2000; Vektor-EPS, SVG, Flash und PostScript) dargestellt, dies kann jedoch auch in verschiedenen Farbräumen geschehen (z. B. Gray, RGB, CMYK) und Bittiefen (z. B. 1, 8, 16 Bit pro Komponente). 

Und das ist nur ein Teil davon, was es tun wird!

Für weitere Details siehe:

http://www.websupergoo.com/abcpdf-8.htm

Und Sie können kostenlose Lizenzen über das kostenlose Lizenzprogramm erhalten.

Es gibt EULA-Probleme bei der Verwendung von Acrobat für das Rendern von PDF. Wenn Sie diesen Weg gehen wollen, prüfen Sie zuerst die Gesetzmäßigkeiten sehr sorgfältig.

3
user81888

Verwenden Sie die Webbrowser-Steuerung. Dazu muss der Adobe Reader installiert sein, aber wahrscheinlich haben Sie ihn trotzdem. Legen Sie die URL des Steuerelements auf den Dateispeicherort fest.

0
Sesh

Das sieht wie das Richtige aus: http://code.google.com/p/lib-pdf/

0
DenNukem

Haftungsausschluss: Ich arbeite für Atalasoft

Wir haben einen PDF -Rasterizer, der dies für .NET tun kann

http://www.atalasoft.com/products/dotimage/pdfrasterizer/

0
Lou Franco

Die einfachste von mir verwendete Bibliothek ist Paolo Gios ' Bibliothek. Im Grunde ist es so 

Create GiosPDFDocument object
Create TextArea object
Add text, images, etc to TextArea object
Add TextArea object to PDFDocument object
Write to stream

Dieses ist ein großartiges Tutorial, um den Einstieg zu erleichtern.

0
Dale Glaser

Der dynamische PDF Viewer von ceTe-Software kann das tun, wonach Sie suchen. Ich habe ihre Generatorsoftware verwendet und war damit ziemlich zufrieden.

http://www.dynamicpdf.com/

0
Paul Lefebvre