Tisk souborů PDF C#

Mnoho společností do značné míry omezuje používání papíru. Existují však některé scénáře, kdy je tisk důležitý. Systém může například obsahovat podrobnosti o online objednávce ve formátu PDF. Při odesílání online objednávky k doručení potřebují vytisknout PDF. Zpracovávají položky ve velkém měřítku, takže tisk každého dokumentu ručně může být docela problém. Aspose.PDF for .NET API, kromě mnoha dalších funkcí pro manipulaci se soubory a převod, podporuje efektivní tisk souborů PDF. Podívejme se na následující případy použití související s tiskem souborů PDF v aplikacích .NET pomocí C#:

Tisk souboru PDF pomocí C#

Tisk souborů PDF lze ve vašich aplikacích .NET automatizovat pomocí C# nebo VB.net. Soubory PDF můžete vytisknout pomocí následujících jednoduchých kroků:

  1. Vytvořte objekt třídy PdfViewer
  2. Načíst vstupní PDF dokument
  3. Vytiskněte soubor PDF

Níže uvedený fragment kódu ukazuje, jak vytisknout soubor PDF pomocí C#:

//Vytvořte objekt PdfViewer
PdfViewer viewer = new PdfViewer();
//Otevřete vstupní soubor PDF
viewer.BindPdf(dataDir + "Test.pdf");
//Tisk dokumentu PDF
viewer.PrintDocument();
//Zavřete soubor PDF
viewer.Close();

Tisk více souborů PDF pomocí C#

Pokud potřebujete tisknout více souborů kvůli povaze vašeho podnikání, pak je tato funkce již podporována Aspose.PDF for .NET API. Tisk více souborů PDF, jeden po druhém s výše uvedeným fragmentem kódu, může být trochu pomalý. Udělejme proto tisk PDF o další krok dále, abychom celý proces usnadnili. Zde budeme používat seznam při přidávání názvu každého souboru PDF do tohoto seznamu. Následující kroky vysvětlují, jak budeme tisknout více souborů PDF:

  1. Inicializujte typ seznamu řetězců
  2. Přidejte soubory PDF do seznamu
  3. Načíst vstupní soubor PDF
  4. Tisk více souborů PDF

Fragment kódu ukazuje, jak tisknout více souborů PDF pomocí C#:

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

foreach (String file in files)
{
    //Vytvořte objekt PdfViewer
    PdfViewer viewer = new PdfViewer();
    //Otevřete vstupní soubor PDF
    viewer.BindPdf(file);
    //Tisk dokumentu PDF
    viewer.PrintDocument();
    //Zavřete soubor PDF
    viewer.Close();
}

Tisk konkrétních stránek PDF pomocí C#

Funkce tisku konkrétních stránek PDF dokumentů je dostupná v API. Budeme zvažovat příklad, který zahrnuje tisk více rozsahů stránek. Musíte zadat čísla stránek od a do, jak je vysvětleno v následujících krocích:

  • Nastavte vstupní a výstupní cesty souboru
  • Nastavte tisk konkrétních stránek definováním rozsahu
  • Zadejte parametry tisku
  • Vytiskněte stránky výše uvedeným způsobem

Níže uvedený fragment kódu ukazuje, jak vytisknout konkrétní stránky dokumentu pomocí 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())
        {
            // Zde je kód pro tisk dokumentu
            // Tisk dokumentu pomocí nastavení tiskárny a stránky                    
            theViewer.BindPdf(inPdf);
            theViewer.AutoResize = true;
            theViewer.AutoRotate = true;
            theViewer.PrintPageDialog = false;
            theViewer.PrintDocumentWithSettings(pgs, ps);
            theViewer.Close();
        }
    }
}

Tisk zabezpečeného souboru PDF pomocí C#

Soubor PDF lze zabezpečit a chránit heslem. Heslo však může být dvou typů, tj. heslo uživatele a heslo vlastníka. Soubory PDF zabezpečené uživatelským heslem potřebují k otevření a zobrazení zašifrovaného souboru PDF heslo. Na druhou stranu je pro úpravu obsahu zabezpečeného a heslem chráněného souboru PDF vyžadováno heslo vlastníka. Následující kroky vysvětlují tisk zabezpečeného PDF:

  1. Načtěte zabezpečené PDF s heslem
  2. Vytvořte objekt PdfViewer
  3. Vytiskněte zabezpečený soubor PDF

Následující úryvek kódu ukazuje, jak vytisknout zabezpečený soubor PDF pomocí C#:

//Načtěte zabezpečený dokument PDF při zadání hesla uživatele nebo vlastníka
Document document = new Document(dataDir + "Password.pdf" , "userORowner");
//Vytvořte objekt PdfViewer
PdfViewer viewer = new PdfViewer();
//Otevřete vstupní soubor PDF
viewer.BindPdf(document);
//Tisk dokumentu PDF
viewer.PrintDocument();
//Zavřete soubor PDF
viewer.Close();

Tisk PDF do konkrétního zásobníku papíru tiskárny pomocí C#

Pomocí Aspose.PDF for .NET API můžete vytisknout PDF na konkrétní zásobník papíru. Můžete například chtít vytisknout PDF se spoustou fotografií do jiného zásobníku papíru a textový soubor PDF do jiného zásobníku papíru. Chcete-li nastavit výstupní zásobník nebo přihrádku pro tisk souborů PDF, postupujte podle následujících kroků:

  1. Načíst vstupní soubor PDF
  2. Nastavte atributy pro tisk
  3. Zadejte Nastavení stránky a PaperSource
  4. Zavolejte metodu PrintDocumentWithSettings

Zde je pozoruhodné, že můžete změnit název tiskárny. Zde budeme jako příklad používat Microsoft Print to PDF. Následující fragment kódu následuje tyto kroky a ukazuje, jak vytisknout dokument do konkrétního zásobníku papíru nebo přihrádky tiskárny s 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;
// Nastavte atributy pro tisk
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;
// Vytvářejte objekty pro nastavení tiskárny a stránky a PrintDocument
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
// Nastavte název tiskárny
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);
// Tisk dokumentu pomocí nastavení tiskárny a stránky
viewer.PrintDocumentWithSettings(pgs, ps);

///<summary>
/// Vraťte objekt PaperSource pro zadanou tiskárnu a název zásobníku.
///</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;
}

Tisk rozsahu stránek na různé zdroje papíru pomocí C#

Mohou nastat situace, kdy budete potřebovat vytisknout různé stránky jednoho dokumentu PDF do různých zásobníků papíru nebo přihrádky. Například jiný zdroj papíru pro titulní stránku a jiný pro ostatní stránky. Určitě můžete podle níže uvedených kroků vytisknout rozsahy stránek na různé zdroje papíru v rámci stejné tiskové úlohy:

  1. Inicializujte objekt třídy PdfViewer
  2. Použijte delegát obslužné rutiny události PdfQueryPageSettings
  3. Nastavte stránku a nastavení tiskárny
  4. Zavolejte metodu PrintDocumentWithSettings

Následující úryvek kódu ukazuje, jak postupovat podle těchto kroků a tisknout různé rozsahy stránek na různé zdroje papíru nebo zásobníky pomocí 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];
}

Kontrola stavu tiskové úlohy při tisku PDF pomocí C#

Soubory PDF můžete tisknout na různých tiskárnách. Například Microsoft Print to PDF, Microsoft XPS Document Writer nebo jakákoli fyzická tiskárna. U velkých dokumentů PDF však může tisk trvat dlouho nebo může z nějakého důvodu selhat. Proto API nabízí funkci, která vám umožní zkontrolovat stav tiskové úlohy pomocí následujících kroků:

  1. Načíst vstupní soubor PDF
  2. Zadejte nastavení stránky
  3. Nastavte název tiskárny
  4. Tisk dokumentu PDF pomocí PrintDocumentWithSettings

Níže uvedený fragment kódu ukazuje, jak zkontrolovat stav tiskové úlohy nebo průběh tisku PDF pomocí C#:

// Vytvořit objekt PdfViewer
PdfViewer viewer = new PdfViewer();

// Svázat zdrojový soubor PDF
viewer.BindPdf(dataDir + "Sample Document with Bookmark.pdf");
viewer.AutoResize = true;

// Skrýt dialogové okno tisku
viewer.PrintPageDialog = false;

// Vytvořit objekt nastavení tiskárny
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();

// Zadejte název tiskárny
//ps.PrinterName = "Zapisovač dokumentů Microsoft XPS";
ps.PrinterName = "Microsoft Print to PDF";

// Název výsledného výtisku
//ps.PrintFileName = "ResultantPrintout.xps";
ps.PrintFileName = "ResultantPrintout.pdf";

// Vytiskněte výstup do souboru
ps.PrintToFile = true;
ps.FromPage = 1;
ps.ToPage = 2;
ps.PrintRange = System.Drawing.Printing.PrintRange.SomePages;

// Zadejte velikost stránky výtisku
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);

// Vytiskněte dokument s výše uvedeným nastavením
viewer.PrintDocumentWithSettings(pgs, ps);

// Zkontrolujte stav tisku
if (viewer.PrintStatus != null)
{
    // Byla vyvolána výjimka
    Exception ex = viewer.PrintStatus as Exception;
    if (ex != null)
    {
        // Získejte zprávu o výjimce
    }
}
else
{
    // Nebyly nalezeny žádné chyby. Tisková úloha byla úspěšně dokončena
    Console.WriteLine("printing completed without any issue..");
}

V důsledku toho se tento fragment kódu vytiskne na konzole aplikace .NET o stavu tisku souboru PDF:

C# Tisk PDF

Závěr

Abych to shrnul, naučili jsme se různé přístupy a případy použití tisku heslem zabezpečených a nezabezpečených souborů PDF pomocí C# nebo VB NET ve vašich programovacích aplikacích. Kromě toho jsme prozkoumali tisk celých dokumentů PDF. Podobně jsme se naučili tisknout některé rozsahy stránek podle konkrétních zásobníků stránek, přihrádek nebo zdrojů papíru. Dále jsme také zkontrolovali, jak sledovat stav tisku nebo průběh tisku dokumentů pomocí C#.

Viz také