Comment rendre des PDF en utilisant C#

je veux charger et dessiner des fichiers pdf graphiquement en utilisant C#. Je n'ai pas besoin de les éditer ou quoi que ce soit, juste de les rendre à un niveau de zoom donné.

les bibliothèques pdf que j'ai trouvées semblent être axées sur la génération. Comment dois-je faire?

Merci.

42
demandé sur Garth 2009-02-06 05:24:02

11 réponses

il y a d'autres choix si Adobe ActiveX n'est pas ce que vous recherchez (puisque Acrobat doit être présent sur la machine de l'utilisateur et vous ne pouvez pas l'envoyer vous-même).

pour créer L'Aperçu PDF, jetez d'abord un oeil à d'autres discussions sur le sujet sur StackOverflow:

dans les deux derniers je parle de quelques choses que vous pouvez essayer:

  • , Vous pouvez obtenir un commercial renderer ( PDFViewForNet , PDFRasterizer.NET , ABCPDF , ActivePDF , XpdfRasterizer et d'autres dans les autres réponses...).

    La plupart sont assez cher, surtout si vous vous souciez est un simple aperçu/vignettes.

  • en plus du code snippet D'Omar Shahine, il y a un article Codeprojet qui montre comment utiliser L'ActiveX Adobe, mais il peut être périmé, facilement cassé par de nouvelles versions et sa légalité est trouble (essentiellement, il est ok pour l'utilisation interne, mais vous ne pouvez pas l'expédier et vous ne pouvez pas l'utiliser sur un serveur pour produire des images de PDF).

  • vous pouvez consulter le code source de SumatraPDF , un visualiseur PDF OpenSource pour windows.

  • il y a aussi Poppler , un moteur d'équarrissage qui utilise Xpdf comme moteur de rendu. Tous ces outils sont excellents, mais ils nécessiteront une bonne dose d'engagement pour qu'ils puissent fonctionner et interagir avec .Net et ils ont tendance à être distribués sous licence GPL.

  • vous pouvez envisager d'utiliser GhostScript comme interprète car rendre des pages est un processus assez simple.

    L'inconvénient est que vous aurez besoin de re-compresser l'installer avec votre application, ou de faire un pré-requis (ou au moins une partie de votre processus d'installation).

    Ce n'est pas un grand défi, et il est certainement plus facile que d'avoir à masser les autres moteurs de rendu en coopérant avec .Net.

    J'ai fait un petit projet que vous trouverez sur le Developer Express forums comme pièce jointe.

    Attention aux conditions de licence pour GhostScript.

    Si vous ne pouvez pas partir avec ça, alors le logiciel commercial est probablement votre seul choix.

43
répondu Renaud Bompuis 2017-05-23 12:18:25

Google a ouvert la source de son excellent moteur de rendu PDF - PDFium - qu'il a écrit avec le logiciel Foxit.

il y a un paquet c# nuget appelé PdfiumViewer qui donne un C # wrapper autour de PDFium et permet aux PDFs d'être affichés et imprimés.

je l'ai utilisé et a été très impressionné par la qualité du rendu.


PDFium works directement avec les flux de sorte qu'il ne nécessite pas de données à écrire sur le disque.

C'est mon exemple d'une application WinForms

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

Edit: Pour obtenir le pdfRenderer contrôle WinForm: Ajouter le PdfiumViewer package NuGet pour le projet; ouvrir les projets paquets dossier dans l'Explorateur Windows et faites glisser le PdfiumViewer.dll fichier sur le Toolbox de la fenêtre; Un contrôle appelé PdfRenderer sera disponible pour ajouter:

Adding PdfRenderer control to WinForms

42
répondu Paddy 2017-05-22 08:28:58

voici ma réponse à une autre question.

vous devez d'abord faire référence au contrôle ActiveX D'Adobe Reader

Adobe Acrobat Contrôle De Navigateur De Bibliothèque De Type 1.0

%programfiles&\Common Files\Adobe\Acrobat\ActiveX\AcroPDF.dll

ensuite, il vous suffit de le glisser dans votre formulaire Windows à partir de la boîte à outils.

et utilisez un peu de code comme ceci pour initialiser le contrôle ActiveX.

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

assurez-vous que lorsque votre formulaire ferme que vous disposez du contrôle ActiveX

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

sinon Acrobate pourrait rester allongé.

13
répondu Omar Shahine 2009-02-17 06:30:03

ABCpdf fera ceci et beaucoup d'autres choses pour vous.

non seulement il ne rend pas votre PDF à une variété de formats (par exemple JPEG, GIF, PNG, TIFF, JPEG 2000; vecteur EPS, SVG, Flash et PostScript), mais il peut également le faire dans une variété d'espaces de couleur (par exemple Gray, RGB, CMYK) et de profondeurs de bits (par exemple 1, 8, 16 bits par composant).

et c'est juste une partie de ce qu'il va faire!

pour plus de détails voir:

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

Oh, et vous pouvez obtenir gratuitement des licences via le sans système de licence.

il y a des problèmes avec L'utilisation D'Acrobat pour faire le rendu PDF. Si vous voulez suivre cette route, vérifiez d'abord la légalité avec soin.

3
répondu user81888 2009-03-24 08:41:40

PdfiumViewer est grand, mais relativement étroitement couplé à System.Drawing et WinForms. Pour cette raison j'ai créé mon propre wraper autour de PDFium: PDFiumSharp

Pages peuvent être rendues à un PDFiumBitmap qui à son tour peut être enregistré sur le disque ou exposé comme un flux . Ainsi, tout framework capable de charger une image au format BMP à partir d'un flux peut utiliser cette bibliothèque pour afficher des pages pdf.

par exemple, dans une application WPF, vous pouvez utiliser la méthode suivante pour rendre une page pdf:

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
répondu ArgusMagnus 2017-04-10 14:26:39

visualiseur PDF dynamique de ceTe software pourrait faire ce que vous recherchez. J'ai utilisé le logiciel du générateur et j'en ai été très satisfait.

http://www.dynamicpdf.com /

0
répondu Paul Lefebvre 2009-02-06 02:32:11

utilisez la commande du navigateur web. Cela nécessite Adobe reader pour être installé, mais très probablement vous l'avez quand même. Définir l'UrL du contrôle à l'emplacement du fichier.

0
répondu Sesh 2009-02-06 03:01:01

le lib le plus facile que j'ai utilisé est bibliothèque de Paolo Gios . C'est en gros

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

Ce est un bon tutoriel pour vous aider à démarrer.

0
répondu 2009-02-06 04:22:24

avertissement: je travaille pour Atalasoft

nous avons un PDF Rasterizer qui peut faire cela pour .NET""

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

0
répondu Lou Franco 2009-10-09 00:30:21

cela ressemble à la bonne chose: http://code.google.com/p/lib-pdf/

0
répondu DenNukem 2013-02-05 00:43:48

vous pouvez google pour PDF viewer component , et de venir avec plus de quelques coups.

si vous n'avez pas vraiment besoin de les intégrer dans votre application, cependant - vous pouvez juste avoir besoin D'Acrobat Reader ou de FoxIt (ou de bundle it, si cela respecte leurs conditions de licence respectives) et shell out pour cela. Ce n'est pas aussi cool, mais ça se fait gratuitement.

-1
répondu Mark Brackett 2009-02-06 04:09:19