Comment rendre les fichiers PDF avec C #

Je veux charger et dessiner graphiquement des fichiers pdf en utilisant C #. Je n’ai pas besoin de les éditer ou quoi que ce soit, il suffit 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 puis-je faire cela?

Merci.

Il existe quelques autres choix dans le cas où Adobe ActiveX n’est pas ce que vous recherchez (car Acrobat doit être présent sur la machine utilisateur et que vous ne pouvez pas l’expédier vous-même).

Pour créer l’aperçu PDF, consultez d’abord d’autres discussions sur le sujet dans StackOverflow:

  • Comment puis-je avoir un aperçu des documents?
  • Obtenir un aperçu JPEG d’un pdf sur Windows?
  • .NET open PDF in winform sans dépendances externes
  • Prévisualisation et visualisation PDF

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

  • Vous pouvez obtenir un moteur de rendu commercial ( PDFViewForNet , PDFRasterizer.NET , ABCPDF , ActivePDF , XpdfRasterizer et autres dans les autres réponses …).
    La plupart sont assez chers, surtout si tout ce qui vous intéresse est de créer un simple aperçu / vignettes.

  • En plus de l’extrait de code d’Omar Shahine, il existe un article CodeProject qui montre comment utiliser Adobe ActiveX, mais il est peut-être obsolète, facilement cassable par les nouvelles versions et sa légalité est obscure. ne le transportez pas et vous ne pouvez pas l’utiliser sur un serveur pour produire des images de PDF).

  • Vous pouvez consulter le code source de SumatraPDF , une visionneuse PDF OpenSource pour Windows.

  • Il existe également Poppler , un moteur de rendu utilisant Xpdf comme moteur de rendu. Tous ces éléments sont excellents, mais ils nécessiteront beaucoup d’engagement pour les faire fonctionner et s’interfacer avec .Net et ils ont tendance à être dissortingbués sous la GPL.

  • Vous pouvez envisager d’utiliser GhostScript en tant qu’interpréteur, car le rendu des pages est un processus assez simple.
    L’inconvénient est que vous devrez soit le reconditionner pour l’installer avec votre application, soit en faire un pré-requirejs (ou du moins une partie de votre processus d’installation).
    Ce n’est pas un grand défi, et c’est certainement plus facile que de devoir masser les autres moteurs de rendu pour coopérer avec .Net.
    J’ai fait un petit projet que vous trouverez sur les forums Developer Express en pièce jointe.
    Faites attention aux exigences de licence pour GhostScript via.
    Si vous ne pouvez pas partir, les logiciels commerciaux sont probablement votre seul choix.

Google a ouvert son excellent moteur de rendu PDF – PDFium – qu’il a écrit avec Foxit Software.

Il existe un package C # nuget appelé PdfiumViewer qui fournit un wrapper C # autour de PDFium et permet d’afficher et d’imprimer des fichiers PDF.

Je l’ai utilisé et j’ai été très impressionné par la qualité du rendu.


PDFium fonctionne directement avec les stream, il ne nécessite donc aucune donnée sur le disque.

Ceci 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 contrôle pdfRenderer dans WinForm: Ajoutez le PdfiumViewer PdfiumViewer NuGet au projet; ouvrez le dossier des packages de projets dans l’Explorateur Windows et faites glisser le fichier PdfiumViewer.dll sur la fenêtre Toolbox ; Un contrôle appelé PdfRenderer sera disponible pour append:

Ajout du contrôle PdfRenderer à WinForms

Voici ma réponse à une autre question.

Vous devez d’abord faire référence au contrôle ActiveX Adobe Reader

Bibliothèque de types de contrôle du navigateur Adobe Acrobat 1.0

% programfiles & \ Fichiers communs \ Adobe \ Acrobat \ ActiveX \ AcroPDF.dll

Ensuite, il vous suffit de le faire glisser dans votre Windows Form à partir de la boîte à outils.

Et utilisez un code comme celui-ci pour initialiser le contrôle ActiveX.

 private void InitializeAdobe(ssortingng 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 se ferme, vous disposez du contrôle ActiveX

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

Autrement, Acrobat pourrait être laissé traîner.

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

Non seulement il rendra 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 divers espaces colorimésortingques (par exemple, gris, RVB, CMJN) et les profondeurs de bits (par exemple 1, 8, 16 bits par composant).

Et ce n’est qu’une partie de ce que ça va faire!

Pour plus de détails, voir:

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

Oh, vous pouvez obtenir des licences gratuites via le programme de licence gratuite.

Il existe des problèmes de CLUF avec l’utilisation d’Acrobat pour effectuer le rendu PDF. Si vous souhaitez suivre cette voie, vérifiez d’abord les aspects juridiques.

PdfiumViewer est génial, mais relativement étroitement couplé à System.Drawing et à WinForms. Pour cette raison, j’ai créé mon propre wrapper autour de PDFium: PDFiumSharp

Les pages peuvent être rendues dans un PDFiumBitmap qui peut à son tour être enregistré sur disque ou exposé en tant que stream . De cette façon, toute structure capable de charger une image au format BMP depuis un stream peut utiliser cette bibliothèque pour afficher des pages pdf.

Par exemple, dans une application WPF, vous pouvez utiliser la méthode suivante pour afficher 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(ssortingng filename, int pageIndex, ssortingng 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(); } } } } 

Dynamic PDF Viewer du logiciel ceTe peut faire ce que vous recherchez. J’ai utilisé leur logiciel générateur et j’en étais très satisfait.

http://www.dynamicpdf.com/

Utilisez le contrôle du navigateur Web. Cela nécessite que Adobe Reader soit installé, mais vous l’avez probablement de toute façon. Définissez l’URL du contrôle sur l’emplacement du fichier.

La librairie la plus simple que j’ai utilisée est la bibliothèque de Paolo Gios . C’est fondamentalement

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

Ceci est un excellent tutoriel pour vous aider à démarrer.

Disclaimer: Je travaille pour Atalasoft

Nous avons un PDF Rasterizer qui peut le faire pour .NET

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

Cela semble être la bonne chose: http://code.google.com/p/lib-pdf/

Vous pouvez google pour le composant PDF Viewer et proposer plus de quelques hits.

Si vous n’avez pas vraiment besoin de les incorporer dans votre application, vous pouvez simplement exiger qu’Acrobat Reader ou FoxIt (ou les regrouper, si cela respecte leurs conditions de licence respectives) et y accéder . Ce n’est pas aussi cool, mais le travail est fait gratuitement.