45 votes

Imprimer Pdf en C#

Je suis novice en C#. J'ai cherché partout sur le net des tutoriels sur la façon d'imprimer des pdf, mais je n'en ai pas trouvé.

Je me suis alors demandé s'il était possible de le lire en utilisant itextpdf, comme indiqué ici.

Lire le contenu d'un PDF avec la dll itextsharp en VB.NET ou C#

puis l'imprimer. Si oui, comment ?

74voto

PVitt Points 5652

Une approche très simple consiste à utiliser un lecteur Adobe Reader installé ou tout autre lecteur de PDF capable d'imprimer :

Process p = new Process( );
p.StartInfo = new ProcessStartInfo( )
{
    CreateNoWindow = true,
    Verb = "print",
    FileName = path //put the correct path here
};
p.Start( );

Une autre solution consiste à utiliser un composant tiers, par exemple. PDFView4NET

3 votes

Comment spécifier la taille de la page avec cette méthode ? J'ai besoin de pouvoir spécifier un format de papier spécifique que l'imprimante par défaut prend en charge.

0 votes

Vous ne pouvez rien spécifier en utilisant cette méthode. Elle imprimera uniquement le PDF en utilisant l'imprimante par défaut et ses paramètres par défaut. Ainsi, si votre format de papier par défaut est a4, toute page plus grande sera coupée. C'est vraiment nul, mais à moins d'avoir recours à des outils tiers, je ne pense pas que l'on puisse faire quoi que ce soit à ce sujet.

8 votes

Excellente réponse, mais notez que Process hérite d'un composant qui implémente IDisposable, il est donc bien sûr recommandé de s'en débarrasser ou d'utiliser une instruction using, surtout si on l'utilise plusieurs fois.

29voto

santa Points 477

J'ai écrit une petite méthode d'aide autour de l'adobereader pour imprimer en masse des pdf à partir de c#... :

  public static bool Print(string file, string printer) {
     try {
        Process.Start(
           Registry.LocalMachine.OpenSubKey(
                @"SOFTWARE\Microsoft\Windows\CurrentVersion" +
                @"\App Paths\AcroRd32.exe").GetValue("").ToString(),
           string.Format("/h /t \"{0}\" \"{1}\"", file, printer));
        return true;
     } catch { }
     return false;
  }

On ne peut pas se fier à la valeur de retour de la méthode btw...

1 votes

@Santa : Cela ne fonctionnerait que sur une machine Windows. Si quelqu'un l'exécute à partir d'un Mac ou d'un Linux, cela ne fonctionnera pas, même s'il a Adobe. Ou est-ce que quelque chose m'échappe ?

0 votes

Comment trouver mon imprimante pour la variable chaîne "Printer" ?

2 votes

@ColtonMilne afair c'est le même nom qui apparaît dans le panneau de contrôle... à partir du code : essayez la propriété system.drawing.printing.printersettings.installedprinters !

15voto

Lessan Vaezi Points 1154

Une autre approche, si vous souhaitez simplement imprimer un fichier PDF de manière programmatique, consiste à utiliser la commande LPR : https://docs.microsoft.com/en-us/Windows-server/administration/Windows-commands/lpr

LPR est également disponible sur les versions plus récentes de Windows (par exemple Vista/7), mais vous devez l'activer dans les composants optionnels de Windows.

Par exemple :

Process.Start("LPR -S printerdnsalias -P raw C:\files\file.pdf");

Vous pouvez également utiliser l'adresse IP de l'imprimante au lieu de l'alias.

Cela suppose que votre imprimante prend en charge Impression directe en PDF sinon cela ne fonctionnera que pour les fichiers PostScript et ASCII. En outre, l'imprimante doit avoir une interface réseau installée et vous devez connaître son adresse IP ou son alias.

12voto

Andreas Reiff Points 737

Utilisez PDFiumViewer. J'ai cherché pendant longtemps jusqu'à ce que je trouve une solution similaire, puis j'ai trouvé ce code propre qui ne repose pas sur l'envoi de fichiers bruts à l'imprimante (ce qui est mauvais s'ils sont interprétés comme des fichiers texte ) ou sur l'utilisation d'Acrobat ou de Ghostscript comme aide (les deux doivent être installés, ce qui est un problème) :

https://stackoverflow.com/a/41751184/586754

PDFiumViewer est fourni via nuget, l'exemple de code ci-dessus est complet. Passez des valeurs nulles pour utiliser l'imprimante par défaut.

8voto

Murilo Points 601

J'ai eu le même problème lors de l'impression d'un fichier PDF. Il y a un paquet nuget appelé Spire.Pdf qui est très simple à utiliser. La version gratuite a une limite de 10 pages bien que, dans mon cas, c'était la meilleure solution une fois que je ne veux pas dépendre d'Adobe Reader et que je ne veux pas installer d'autres composants.

https://www.nuget.org/packages/Spire.PDF/

PdfDocument pdfdocument = new PdfDocument();
pdfdocument.LoadFromFile(pdfPathAndFileName);
pdfdocument.PrinterName = "My Printer";
pdfdocument.PrintDocument.PrinterSettings.Copies = 2;
pdfdocument.PrintDocument.Print();
pdfdocument.Dispose();

1 votes

Spire PDF est un logiciel commercial qui nécessite une licence payante. Les commentaires qui recommandent des paquets devraient être clairs sur la différence entre les achats de logiciels libres et commerciaux. La version gratuite imprime une bannière dans le PDF, donc même si vous imprimez de petits fichiers, elle apparaîtra.

1 votes

Cette réponse est assez ancienne. À l'époque, la seule limitation était le numéro de page. Maintenant, il y a une bannière comme vous l'avez dit. Bon à savoir pour alerter les nouveaux utilisateurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X