Stampa file PDF C#

Molte aziende stanno riducendo in larga misura l’uso della carta. Tuttavia, ci sono alcuni scenari in cui la stampa è importante. Ad esempio, un sistema può contenere i dettagli di un ordine online in formato PDF. Devono stampare un PDF durante la spedizione di un ordine online per la consegna. Elaborano articoli su larga scala, quindi stampare manualmente ogni documento potrebbe essere un compito piuttosto impegnativo. Aspose.PDF for .NET API, oltre a molte altre funzioni di manipolazione e conversione dei file, supporta la stampa efficiente di file PDF. Esaminiamo i seguenti casi d’uso relativi alla stampa di file PDF in applicazioni .NET utilizzando C#:

Stampa file PDF con C#

La stampa di file PDF può essere automatizzata nelle applicazioni .NET utilizzando C# o VB.net. È possibile stampare file PDF seguendo i semplici passaggi seguenti:

  1. Crea un oggetto della classe PdfViewer.
  2. Carica il documento PDF di input
  3. Stampa il file PDF

Il frammento di codice seguente mostra come stampare un file PDF utilizzando C#:

//Crea oggetto PdfViewer
PdfViewer viewer = new PdfViewer();
//Apri il file PDF di input
viewer.BindPdf(dataDir + "Test.pdf");
//Stampa documento PDF
viewer.PrintDocument();
//Chiudi file PDF
viewer.Close();

Stampa più file PDF con C#

Se devi stampare più file a causa della natura della tua attività, la funzionalità è già supportata da Aspose.PDF per .NET API. La stampa di più file PDF, uno per uno con lo snippet di codice sopra può essere un po’ lenta. Pertanto, facciamo un ulteriore passo avanti nella stampa del PDF per semplificare il processo. Qui useremo List mentre aggiungeremo il nome di ogni file PDF a quell’elenco. I seguenti passaggi spiegano come stamperemo più file PDF:

  1. Inizializza un tipo di elenco di stringhe
  2. Aggiungi file PDF all’elenco
  3. Carica il file PDF di input
  4. Stampa più file PDF

Il frammento di codice mostra come stampare più file PDF utilizzando C#:

var files = new List<string>();
files.Add(dataDir + "First.pdf");
files.Add(dataDir + "Second.pdf");

foreach (String file in files)
{
    //Crea oggetto PdfViewer
    PdfViewer viewer = new PdfViewer();
    //Apri il file PDF di input
    viewer.BindPdf(file);
    //Stampa documento PDF
    viewer.PrintDocument();
    //Chiudi file PDF
    viewer.Close();
}

Stampa pagine specifiche di PDF con C#

La funzione di stampa di pagine specifiche di documenti PDF è disponibile nell’API. Prenderemo in considerazione un esempio che include la stampa di più intervalli di pagine. È necessario specificare i numeri di pagina da e verso come spiegato nei passaggi seguenti:

  • Imposta i percorsi di input e output del file
  • Imposta la stampa di pagine specifiche definendo un intervallo
  • Specificare i parametri di stampa
  • Stampare le pagine come specificato in precedenza

Il frammento di codice seguente mostra come stampare pagine specifiche del documento utilizzando C#:

string inPdf = dataDir + "Test.pdf";
string output = dataDir;
IList<PrintingJobSettings> printingJobs = new List<PrintingJobSettings>();
PrintingJobSettings printingJob1 = new PrintingJobSettings();
printingJob1.FromPage = 2;
printingJob1.ToPage = 3;
printingJobs.Add(printingJob1);

PrintingJobSettings printingJob2 = new PrintingJobSettings();
printingJob2.FromPage = 5;
printingJob2.ToPage = 7;
printingJobs.Add(printingJob2);

{
    for (var printingJobIndex = 0; printingJobIndex < printingJobs.Count; printingJobIndex++)
    {
        System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
        System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
        ps.PrinterName = "Microsoft Print to PDF";
        ps.PrintRange = System.Drawing.Printing.PrintRange.SomePages;
        ps.FromPage = printingJobs[printingJobIndex].FromPage;
        ps.ToPage = printingJobs[printingJobIndex].ToPage;
        System.Console.WriteLine(ps.FromPage);
        System.Console.WriteLine(ps.ToPage);
        System.Console.WriteLine(printingJobIndex);
        using (var theViewer = new Aspose.Pdf.Facades.PdfViewer())
        {
            // Il codice di stampa del documento va qui
            // Stampa il documento utilizzando le impostazioni della stampante e della pagina                    
            theViewer.BindPdf(inPdf);
            theViewer.AutoResize = true;
            theViewer.AutoRotate = true;
            theViewer.PrintPageDialog = false;
            theViewer.PrintDocumentWithSettings(pgs, ps);
            theViewer.Close();
        }
    }
}

Stampa file PDF protetto con C#

Un file PDF può essere protetto e protetto da una password. Tuttavia, la password potrebbe essere di due tipi, ovvero la password dell’utente e del proprietario. I file PDF protetti con la password utente necessitano di una password per aprire e visualizzare il file PDF crittografato. D’altra parte, la password del proprietario è necessaria per modificare il contenuto del file PDF protetto e protetto da password. I seguenti passaggi spiegano la stampa di PDF protetti:

  1. Carica PDF protetto con password
  2. Crea un oggetto PdfViewer.
  3. Stampa file PDF protetto

Il seguente frammento di codice mostra come stampare un file PDF protetto utilizzando C#:

//Carica un documento PDF protetto specificando la password dell'utente o del proprietario
Document document = new Document(dataDir + "Password.pdf" , "userORowner");
//Crea oggetto PdfViewer
PdfViewer viewer = new PdfViewer();
//Apri il file PDF di input
viewer.BindPdf(document);
//Stampa documento PDF
viewer.PrintDocument();
//Chiudi file PDF
viewer.Close();

Stampa PDF su vassoio carta specifico di una stampante con C#

È possibile stampare un PDF su un vassoio carta specifico con Aspose.PDF per .NET API. Ad esempio, potresti voler stampare un PDF con molte foto su un vassoio carta diverso e un file PDF di testo su un vassoio carta diverso. Attenersi alla procedura seguente per impostare il vassoio di uscita o lo scomparto per la stampa di file PDF:

  1. Carica il file PDF di input
  2. Imposta gli attributi per la stampa
  3. Specificare Impostazioni Pagina e Fonte Carta
  4. Chiama il metodo PrintDocumentWithSettings.

È interessante notare che è possibile modificare il nome della stampante. Qui useremo Microsoft Print to PDF, come esempio. Il frammento di codice seguente segue questi passaggi e mostra come stampare un documento su un vassoio carta o un contenitore specifico di una stampante con C#:

Document doc = new Document("Test.pdf");
PdfViewer viewer = new PdfViewer();
viewer.BindPdf(doc);
viewer.PrinterJobName = System.IO.Path.GetFileName(doc.FileName);
viewer.Resolution = 110;
// Imposta gli attributi per la stampa
viewer.AutoResize = true; // Print the file with adjusted size
viewer.AutoRotate = false; // Print the file with adjusted rotation
viewer.PrintPageDialog = false; // Do not produce the page number dialog when printing
viewer.RenderingOptions.UseNewImagingEngine = true;
// Crea oggetti per le impostazioni della stampante e della pagina e PrintDocument
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
// Imposta il nome della stampante
ps.PrinterName = "Microsoft Print to PDF";
pgs.PaperSize = new System.Drawing.Printing.PaperSize(paperTypeName, paperWidth, paperHeight);
pgs.Margins = new System.Drawing.Printing.Margins(margins.Left, margins.Right, margins.Top, margins.Bottom);
pgs.PaperSource = GetPaperSource(printerName, trayName);
// Stampa il documento utilizzando le impostazioni della stampante e della pagina
viewer.PrintDocumentWithSettings(pgs, ps);

///<summary>
/// Restituire l'oggetto PaperSource per la stampante e il nome del vassoio forniti.
///</summary>
///<param name="printerName"></param>
///<param name="trayName"></param>
///<returns></returns>
public static System.Drawing.Printing.PaperSource GetPaperSource(string printerName, string trayName)
{
    System.Drawing.Printing.PaperSource ps = null;
    System.Drawing.Printing.PrintDocument prtDoc = new System.Drawing.Printing.PrintDocument();
    prtDoc.PrinterSettings.PrinterName = printerName;
    for (int i = 0; i < prtDoc.PrinterSettings.PaperSources.Count; i++)
    {
        if (prtDoc.PrinterSettings.PaperSources[i].SourceName.ToLower().Equals(trayName.ToLower()))
        {
            ps = prtDoc.PrinterSettings.PaperSources[i];
            break;
        }
    }
    return ps;
}

Stampa dell’intervallo di pagine su diverse origini carta utilizzando C#

Potrebbero verificarsi scenari in cui potrebbe essere necessario stampare pagine diverse di un documento PDF su vassoi carta o contenitori diversi. Ad esempio, un’origine carta diversa per la copertina e diversa per le altre pagine. Puoi certamente seguire i passaggi seguenti per stampare intervalli di pagine su diverse origini carta all’interno dello stesso lavoro di stampa:

  1. Inizializza un oggetto della classe PdfViewer.
  2. Usa PdfQueryPageSettings delegato del gestore eventi
  3. Imposta le impostazioni della pagina e della stampante
  4. Chiama il metodo PrintDocumentWithSettings.

Il frammento di codice seguente mostra come seguire questi passaggi e stampare diversi intervalli di pagine su diverse origini carta o vassoi usando C#:

Aspose.Pdf.Facades.PdfViewer pdfv = new Aspose.Pdf.Facades.PdfViewer();

pdfv.PdfQueryPageSettings += PdfvOnPdfQueryPageSettings;

System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
System.Drawing.Printing.PrinterSettings prin = new System.Drawing.Printing.PrinterSettings();

pdfv.BindPdf(dataDir + "Print-PageRange.pdf");
prin.PrinterName = "HP LaserJet M9050 MFP PCL6";
prin.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);

Aspose.Pdf.Facades.PdfPageEditor pageEditor = new Aspose.Pdf.Facades.PdfPageEditor();
pageEditor.BindPdf(dataDir + "input.pdf");

pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
pgs.PaperSize = prin.DefaultPageSettings.PaperSize;

pdfv.PrintDocumentWithSettings(pgs, prin);
pdfv.Close();

private static void PdfvOnPdfQueryPageSettings(object sender, System.Drawing.Printing.QueryPageSettingsEventArgs queryPageSettingsEventArgs, PdfPrintPageInfo currentPageInfo)
{
    bool isOdd = currentPageInfo.PageNumber % 2 != 0;

    System.Drawing.Printing.PrinterSettings.PaperSourceCollection paperSources = queryPageSettingsEventArgs.PageSettings.PrinterSettings.PaperSources;

    if (isOdd)
        queryPageSettingsEventArgs.PageSettings.PaperSource = paperSources[0];
    else
        queryPageSettingsEventArgs.PageSettings.PaperSource = paperSources[1];
}

Controlla lo stato del lavoro di stampa durante la stampa di PDF con C#

È possibile stampare file PDF su diverse stampanti. Ad esempio, Microsoft Print to PDF, Microsoft XPS Document Writer o qualsiasi stampante fisica. Tuttavia, la stampa può richiedere molto tempo per documenti PDF di grandi dimensioni o la stampa può non riuscire per qualche motivo. Pertanto, l’API offre una funzione che consente di controllare lo stato del lavoro di stampa con i seguenti passaggi:

  1. Carica il file PDF di input
  2. Specifica le impostazioni della pagina
  3. Imposta il nome della stampante
  4. Stampa documento PDF con PrintDocumentWithSettings

Di seguito il frammento di codice mostra come controllare lo stato del lavoro di stampa o l’avanzamento della stampa del PDF utilizzando C#:

// Istanziare l'oggetto PdfViewer
PdfViewer viewer = new PdfViewer();

// Associa il file PDF di origine
viewer.BindPdf(dataDir + "Sample Document with Bookmark.pdf");
viewer.AutoResize = true;

// Nascondi finestra di stampa
viewer.PrintPageDialog = false;

// Crea oggetto Impostazioni stampante
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
System.Drawing.Printing.PrintDocument prtdoc = new System.Drawing.Printing.PrintDocument();

// Specificare il nome della stampante
//ps.PrinterName = "Scrittore di documenti Microsoft XPS";
ps.PrinterName = "Microsoft Print to PDF";

// Nome della stampa risultante
//ps.PrintFileName = "ResultantPrintout.xps";
ps.PrintFileName = "ResultantPrintout.pdf";

// Stampa l'output su file
ps.PrintToFile = true;
ps.FromPage = 1;
ps.ToPage = 2;
ps.PrintRange = System.Drawing.Printing.PrintRange.SomePages;

// Specificare il formato pagina della stampa
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
ps.DefaultPageSettings.PaperSize = pgs.PaperSize;
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);

// Stampa il documento con le impostazioni specificate sopra
viewer.PrintDocumentWithSettings(pgs, ps);

// Controllare lo stato di stampa
if (viewer.PrintStatus != null)
{
    // È stata generata un'eccezione
    Exception ex = viewer.PrintStatus as Exception;
    if (ex != null)
    {
        // Ricevi messaggio di eccezione
    }
}
else
{
    // Non sono stati trovati errori. Il lavoro di stampa è stato completato correttamente
    Console.WriteLine("printing completed without any issue..");
}

Di conseguenza, questo frammento di codice viene stampato sulla console dell’applicazione .NET sullo stato di stampa del file PDF:

C# Stampa PDF

Conclusione

Per riassumere, abbiamo appreso diversi approcci e casi d’uso per la stampa di file PDF protetti da password e non protetti con C# o VB NET nelle applicazioni di programmazione. Inoltre, abbiamo esplorato la stampa di interi documenti PDF. Allo stesso modo, abbiamo imparato a stampare alcuni intervalli di pagine da vassoi, raccoglitori o origini carta specifici. Inoltre, abbiamo anche verificato come monitorare lo stato di stampa o l’avanzamento della stampa dei documenti utilizzando C#.

Guarda anche