Comment imprimer un fichier PDF avec C#
Ive essayer de résoudre ce problème depuis 2 jours. Il y a beaucoup de plus ou moins bonne des solutions sur le net, mais pas un seul correspond à ma tâche à la perfection.
Tâche:
- Imprimer un fichier PDF par programme
- Le faire avec une imprimante
- Ne pas permettre à l'utilisateur de faire plus d'un Button_Click
- Faire le silence - le plus, le mieux
- Le faire côté client
Premières Solutions:
Le faire avec un Formes.WebBrowser
Si nous avons Adobe Reader est installé, il y a un plugin pour afficher les fichiers Pdf dans le navigateur. Avec cette solution, nous avons un bel aperçu et avec webbrowserControlName.Print (), nous pouvons déclencher le contrôle d'imprimer son contenu.
Problème - nous avons encore un PrintDialog.
Démarrer l'AcroRd32.exe avec le départ des arguments
La suite de commande CMD laissez-nous utiliser Adobe Reader pour imprimer des PDF.
InsertPathTo..\AcroRd32.exe /t "C:\sample.pdf" "\printerNetwork\printerName"
Problèmes - nous avons besoin de le chemin absolu AcroRd32.exe | il y a un Adobe Reader ouverture de la Fenêtre et il doit être ouvert jusqu'à ce que la tâche d'impression est prêt.
Utiliser windows presets
Process process = new Process();
process.StartInfo.FileName = pathToPdf;
process.StartInfo.Verb = "printto";
process.StartInfo.Arguments = "\"" + printerName + "\"";
process.Start();
process.WaitForInputIdle();
process.Kill();
Problème - il y a encore une fenêtre d'Adobe Reader popping up, mais après l'impression, il se ferme de lui-même.
Solution - convaincre le client d'utiliser Foxit Reader (à ne pas utiliser ces deux dernières lignes de code).
Convertir des pages PDF à Dessin.Image
Ive aucune idée de comment le faire avec le code, mais quand je reçois cela fonctionne, le reste est juste un morceau de gâteau. De l'impression.PrintDocument peut répondre à toutes les demandes.
Quelqu'un une idée pour obtenir un peu de Dessin.Les Images de ces fichiers Pdf ou d'une autre approche, comment le faire?
Meilleures Salutations,
Max
- essayez de Imprimer en PDF (ou autres fichiers) en C#.
- Pour obtenir le Dessin.Image, vous pouvez prendre un coup d'oeil à cet exemple: ghostscriptnet.codeplex.com/SourceControl/...
- C'est un couple d'années plus tard... avez-vous été en mesure de comprendre la
Drawing.Image
route? - Malheureusement ce n'est pas - mais peut-il y est une meilleure façon aujourd'hui
- J'ai été en regardant autour de plusieurs mois et je n'ai pas encore trouver une solution qui n'implique pas d'installer quelque chose sur la machine du client... ce qui n'est pas une option dans mon cas.
- Est-il une solution à cela. Je suis exactement le même problème. Serions reconnaissants si il n'y a aucune recommandation
- Toujours rien qui correspond à ce besoin spécifique. Je suis allé avec l'ajout d'un service supplémentaire qui permettrait de gérer l'Impression. Voici un grand nombre de bonnes réponses qui pourraient vous aider.
- alright. Merci
Vous devez vous connecter pour publier un commentaire.
Les plus flexibles, les plus simples et les plus performants de la méthode que j'ai pu trouver a l'aide de GhostScript. Elle peut imprimer sur des imprimantes windows directement par le nom de l'imprimante.
Ajouter ces commutateurs pour réduire le document à une page de format A4.
Une autre approche serait d'utiliser spouleur fonction dans les .NET pour envoyer les pré-formaté données d'impression à une imprimante. Mais, malheureusement, vous avez besoin de travailler avec win32 API de spouleur d'
vous pouvez regarder Comment envoyer des données brutes à une imprimante à l'aide de Visual C# .NET
vous ne pouvez utiliser cette méthode lorsque le support de l'impression du document PDF en natif.
Si une bibliothèque commerciale est une option, vous pouvez essayer avec Amyuni PDF Creator. Net.
D'impression directement auprès de la bibliothèque:
Pour l'ouverture d'un fichier PDF et l'envoyer à imprimer directement, vous pouvez utiliser la méthode IacDocument.Imprimer. Le code en C# ressemblera à ceci:
L'exportation d'images (impression si nécessaire):
Choix 1: Vous pouvez utiliser la méthode IacDocument.ExportToJPeg pour la conversion de toutes les pages dans un document PDF en images JPG que vous pouvez imprimer ou l'affichage à l'aide du Dessin.Image
Choix 2: Vous pouvez dessiner chaque page dans un bitmap à l'aide de la méthode IacDocument.DrawCurrentPage avec la méthode Système.De dessin.Les graphiques.FromImage. Le code en C# doit ressembler à ceci:
Disclaimer: je travaille pour Amyuni Technologies
Vous pouvez utiliser ghostscript pour convertir PDF en formats d'image.
L'exemple suivant convertit un seul fichier PDF en une séquence de PNG-Fichiers:
Si vous préférez utiliser Adobe Reader au lieu de cela, vous pouvez cacher sa fenêtre:
J'ai trouvé une version légèrement différente de votre code qui utilise la printto verbe. Je ne l'ai pas essayé, mais peut-être qu'il vous aide à:
http://vbcity.com/forums/t/149141.aspx
Je sais que la balise a
Windows Forms
; cependant, en raison du titre général, certaines personnes pourraient se demander si ils peuvent utiliser l'espace de nom avec unWPF
application -- ils le peuvent.Voici le code:
Maintenant, cet espace de noms doit être utilisé avec un
WPF
application. Il ne joue pas bien avecASP.NET
ouWindows Service
. Il ne doit pas être utilisé avecWindows Forms
, comme il l'aSystem.Drawing.Printing
. Je n'ai pas un seul problème avec les PDF de mon impression à l'aide du code ci-dessus.Notez que si votre imprimante ne prend pas en charge l'Impression Directe de fichiers PDF, cela ne fonctionne pas.
Que sur l'utilisation de l'
PrintDocument
classe?http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.aspx
Vous suffit de passer le nom de fichier du fichier que vous souhaitez imprimer (basé sur l'exemple).
HTH
Si vous êtes intéressé par solutions commerciales qui font exactement ce que vous avez besoin, puis il ya quelques options. Mon entreprise offre une de ces options dans un developer toolkit appelé Debenu Quick PDF Library.
Voici un exemple de code (fonctions clés sont PrintOptions et PrintDocument):
J'ai essayé beaucoup de choses et celui qui a le mieux fonctionné pour moi a été le lancement d'un SumatraPDF à partir de la ligne de commande:
Il ya tellement de nombreux avantages à cela:
De
July 2018
, il n'y a toujours pas de réponse pour l'OP. Il n'y a pas de moyen gratuit pour 1) en silence imprimer vos pdf pour 2) fermé source du projet.1) Vous pouvez certainement utiliser un processus d'Adobe Acrobat ou Foxit Reader
2) les solutions Libres GPL (GNU General Public License). Cela signifie que vous devez ouvrir votre code source, si le logiciel, même à titre gratuit, à toute personne à l'extérieur de votre entreprise.
Que l'OP dit, si vous pouvez obtenir un PDF pour le Dessin.L'Image, vous pouvez l'imprimer avec .NET méthodes. Malheureusement, les logiciels permettant de faire cela nécessite également le paiement ou GPL.