web-dev-qa-db-fra.com

Pdf d'impression en C #

Je suis nouveau à c #. Je cherchais partout sur le net des tutoriels sur la façon d’imprimer un pdf, mais je n’en ai pas trouvé.

Alors j'ai pensé, est-il possible de le lire en utilisant itextpdf, comme mentionné ici

Lecture PDF de contenu avec itextsharp dll dans VB.NET ou C #

puis imprimez-le. Si c'est le cas, comment?

29
Corbee

Une approche très simple consiste à utiliser un lecteur Adobe Reader installé ou tout autre visualiseur 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 méthode consiste à utiliser un composant tiers, par ex. PDFView4NET

49
PVitt

j'ai écrit une méthode très (!) peu assistante autour du lecteur adobe pour imprimer en vrac 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 compter sur la valeur de retour de la méthode btw ...

22
santa

Une autre approche, si vous souhaitez simplement imprimer un fichier PDF par programme, consiste à utiliser la commande LPR: http://www.Microsoft.com/resources/documentation/windows/xp/all/ proddocs/en-us/lpr.mspx? mfr = true

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

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 l'impression directe PDF, sinon cela ne fonctionnera que pour les fichiers PostScript et ASCII. En outre, l’imprimante doit disposer d’une interface réseau et connaître son adresse IP ou son alias. 

9
Lessan Vaezi

J'ai eu le même problème lors de l'impression d'un fichier PDF. Il existe un paquet de 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 lorsque je ne voulais plus dépendre d’Adobe Reader ni 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();
6
Murilo

Utilisez PDFiumViewer. Je cherchais depuis longtemps 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 grave s’ils sont interprétés sous forme de fichiers texte, etc.) Acrobat ou Ghostscript comme aide (les deux doivent être installés, ce qui est un problème):

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

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

3
Andreas Reiff

Vous pouvez créer le document PDF à l’aide de PdfSharp . C'est une bibliothèque open source .NET.

Lorsque vous essayez d'imprimer le document, la situation empire. J'ai cherché partout un moyen open source de le faire. Il y a plusieurs façons de le faire en utilisant AcroRd32.exe mais tout dépend de la version, et cela ne peut se faire sans que Acrobat Reader reste ouvert.

J'ai finalement fini par utiliser SDK VintaSoftImaging.NET . Cela coûte de l’argent, mais c’est beaucoup moins cher que l’alternative et le problème est résolu très facilement.

var doc = new Vintasoft.Imaging.Print.ImagePrintDocument { DocumentName = @"C:\Test.pdf" };
doc.Print();

Cela n'imprime que sur l'imprimante par défaut. Il existe plusieurs alternatives et options.

3
Poxet

Je vous conseil d'essayer l'outil en ligne de commande 2Printer à partir de: http://www.doc2prn.com/

Exemple de ligne de commande permettant d’imprimer tous les fichiers PDF à partir du dossier "C:\Input". Vous pouvez simplement l'appeler à partir de votre code C #.

2Printer.exe -s "C:\Input * .PDF" -prn "Imprimante série Canon MP610"

1
Mikhael Bolgov

La méthode la plus simple consiste à créer un processus C # et à lancer un outil externe pour imprimer votre fichier PDF.

private static void ExecuteRawFilePrinter() {
    Process process = new Process();
    process.StartInfo.FileName = "c:\\Program Files (x86)\\RawFilePrinter\\RawFilePrinter.exe";
    process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    process.StartInfo.Arguments = string.Format("-p \"c:\\Users\\Me\\Desktop\\mypdffile.pdf\" \"gdn02ptr006\"");
    process.Start();
    process.WaitForExit();
}

Le code ci-dessus lance RawFilePrinter.exe (similaire à 2Printer.exe), mais avec un meilleur support. Ce n'est pas gratuit, mais en faisant un don, vous pouvez l'utiliser partout et le redistribuer avec votre demande. Dernière version à télécharger: http://bigdotsoftware.pl/rawfileprinter

1
zuko

Il est possible d’utiliser Ghostscript pour lire les fichiers PDF et les imprimer sur une imprimante nommée.

1
Mark Redman

Il est également possible de le faire avec un navigateur Web intégré. Notez toutefois qu'il s'agit d'un fichier local et qu'il ne s'agit pas directement du navigateur et qu'il n'y a pas de DOM, il n'y a donc pas d'état prêt.

Voici le code de l'approche que j'ai élaborée avec un contrôle de navigateur Web sous forme de gain:

    private void button1_Click(object sender, EventArgs e)
    {
        webBrowser1.Navigate(@"path\to\file");
    }  

    private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
    {   
        //Progress Changed fires multiple times, however after the Navigated event it is fired only once,
        //and at this point it is ready to print
        webBrowser1.ProgressChanged += (o, args) => 
        {
            webBrowser1.Print();//Note this does not print only brings up the print preview dialog
            //Should be on a separate task to ensure the main thread 
            //can fully initialize the print dialog 
            Task.Factory.StartNew(() => 
            {
                Thread.Sleep(1000);//We need to wait before we can send enter
                //This assumes that the print preview is still in focus
                Action g = () =>
                {
                    SendKeys.SendWait("{ENTER}");
                };
                this.Invoke(g);
            });
        };
    }
0
yoel halb

Si vous avez installé Adobe Reader, vous devriez pouvoir le définir simplement comme imprimante par défaut. Et VOILA! Vous pouvez imprimer au format PDF!

printDocument1.PrinterSettings.PrinterName = "Adobe PDF";
printDocument1.Print();

Aussi simple que ça!!!

0
PiggyChu515

On dirait que les suspects habituels tels que pdfsharp et migradoc ne sont pas en mesure de le faire (pdfsharp uniquement si vous avez installé Acrobat (Reader)).

J'ai trouvé ici

https://vishalsbsinha.wordpress.com/2014/05/06/how-to-programmatically-c-net-print-a-pdf-file-directly-to-the-printer/

code prêt pour copier/coller. Il utilise l'imprimante par défaut et, d'après ce que je peux voir, il n'utilise même pas de bibliothèques, il envoie directement les octets pdf à l'imprimante. Je suppose donc que l’imprimante doit également la prendre en charge. Sur une imprimante de 10 ans, j’ai testé le système, cela a parfaitement fonctionné.

La plupart des autres approches - sans bibliothèques ni applications commerciales - nécessitent que vous vous dessiniez vous-même dans le contexte du périphérique d'impression. C'est faisable, mais cela prendra un certain temps pour le comprendre et le faire fonctionner avec toutes les imprimantes.

0
Andreas Reiff

Ouvrez, importez, éditez, fusionnez, convertissez des documents Acrobat PDF avec quelques lignes de code à l’aide de l’API intuitive de Ultimate PDF. En utilisant du code 100% géré écrit en C #, le composant tire parti des nombreuses fonctionnalités intégrées du .NET Framework pour améliorer les performances. De plus, la bibliothèque est conforme à CLS et n'utilise pas de blocs non sécurisés pour les autorisations minimales requises. Les cours sont entièrement documentés avec un exemple de code détaillé qui aide à raccourcir votre courbe d'apprentissage. Si votre environnement de développement est Visual Studio, profitez de l'intégration complète de la documentation en ligne. Il suffit de marquer ou de sélectionner un mot-clé et d'appuyer sur la touche F1 de votre IDE Visual Studio. La documentation en ligne est instantanément représentée. Une bibliothèque PDF performante et fiable qui vous permet d'ajouter facilement la fonctionnalité PDF à vos applications .NET avec quelques lignes de code. 

PDF Composant pour NET

0
alexanoid

Le meilleur moyen d'imprimer automatiquement un fichier PDF à partir de C # consiste à utiliser le fichier "PDF direct" de l'imprimante. Il vous suffit de copier le fichier pdf dans le nom de partage réseau de l’imprimante. Le reste sera pris en charge par l'imprimante elle-même.

La vitesse est 10 fois plus rapide que toutes les autres méthodes. Toutefois, le modèle d’imprimante doit prendre en charge l’impression directe au format PDF et avoir au moins 128 Mo de Dram, ce qui est facile pour tout imprimeur moderne.

0
Thái Linh

Cela dépend de ce que vous essayez d’imprimer. Vous avez besoin d'une application d'imprimante PDF tierce ou si vous imprimez vos propres données, vous pouvez utiliser l'afficheur de rapports dans Visual Studio. Il peut générer des rapports sur Excel et sur des fichiers pdf.

0
Dave81