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.
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:
- Comment puis-je obtenir un aperçu des documents?
- Obtenir un aperçu jpeg de un pdf sur windows?
- .NET ouvrez le PDF dans le winform sans dépendances externes
- PDF Prévisualisation et de la visualisation
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.
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:
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é.
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.
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();
}
}
}
}
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.
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.
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.
avertissement: je travaille pour Atalasoft
nous avons un PDF Rasterizer qui peut faire cela pour .NET""
cela ressemble à la bonne chose: http://code.google.com/p/lib-pdf/
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.