Skriv ut PDF-filer C#

Många företag minskar användningen av papper i stor utsträckning. Det finns dock vissa scenarier där utskrift är viktigt. Ett system kan till exempel innehålla information om onlinebeställning i PDF-format. De måste skriva ut PDF medan de skickar en onlinebeställning för leverans. De bearbetar föremål i stor skala så att skriva ut varje dokument manuellt kan vara ganska jobbigt. Aspose.PDF for .NET API, förutom många andra filmanipulerings- och konverteringsfunktioner, stöder effektiv utskrift av PDF-filer. Låt oss utforska följande användningsfall relaterade till utskrift av PDF-filer i .NET-applikationer med C#:

Skriv ut PDF-fil med C#

Utskrift av PDF-filer kan automatiseras i dina .NET-applikationer med C# eller VB.net. Du kan skriva ut PDF-filer genom att följa de enkla stegen nedan:

  1. Skapa ett objekt av klassen PdfViewer
  2. Ladda inmatat PDF-dokument
  3. Skriv ut PDF-filen

Kodavsnittet nedan visar hur man skriver ut en PDF-fil med C#:

//Skapa PdfViewer-objekt
PdfViewer viewer = new PdfViewer();
//Öppna inmatad PDF-fil
viewer.BindPdf(dataDir + "Test.pdf");
//Skriv ut PDF-dokument
viewer.PrintDocument();
//Stäng PDF-fil
viewer.Close();

Skriv ut flera PDF-filer med C#

Om du behöver skriva ut flera filer på grund av din verksamhets natur, stöds funktionen redan av Aspose.PDF för .NET API. Att skriva ut flera PDF-filer, en efter en med ovanstående kodavsnitt kan vara lite långsam. Låt oss därför ta PDF-utskriften ytterligare ett steg längre för att göra processen enklare. Här kommer vi att använda List samtidigt som vi lägger till namnet på varje PDF-fil till den listan. Följande steg förklarar hur vi kommer att skriva ut flera PDF-filer:

  1. Initiera en lista med strängtyp
  2. Lägg till PDF-filer till listan
  3. Ladda inmatad PDF-fil
  4. Skriv ut flera PDF-filer

Kodavsnittet visar hur man skriver ut flera PDF-filer med C#:

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

foreach (String file in files)
{
    //Skapa PdfViewer-objekt
    PdfViewer viewer = new PdfViewer();
    //Öppna inmatad PDF-fil
    viewer.BindPdf(file);
    //Skriv ut PDF-dokument
    viewer.PrintDocument();
    //Stäng PDF-fil
    viewer.Close();
}

Skriv ut specifika PDF-sidor med C#

Funktionen att skriva ut specifika sidor av PDF-dokument är tillgänglig i API:et. Vi kommer att överväga ett exempel som inkluderar utskrift av flera sidintervall. Du måste ange från och till sidnumren som förklaras i stegen nedan:

  • Ställ in filinmatnings- och utmatningsvägar
  • Ställ in utskrift av specifika sidor genom att definiera ett intervall
  • Ange parametrar för utskrift
  • Skriv ut sidorna som specificerats tidigare

Kodavsnittet nedan visar hur man skriver ut specifika sidor i dokumentet med 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())
        {
            // Dokumentutskriftskoden går här
            // Skriv ut dokument med skrivar- och sidinställningar                    
            theViewer.BindPdf(inPdf);
            theViewer.AutoResize = true;
            theViewer.AutoRotate = true;
            theViewer.PrintPageDialog = false;
            theViewer.PrintDocumentWithSettings(pgs, ps);
            theViewer.Close();
        }
    }
}

Skriv ut säkrad PDF-fil med C#

En PDF-fil kan säkras och skyddas med ett lösenord. Lösenordet kan dock vara av två typer, dvs. Användar- och Ägarlösenord. PDF-filerna som är säkrade med användarlösenordet behöver ett lösenord för att öppna och visa den krypterade PDF-filen. Å andra sidan krävs ägarlösenordet för att ändra innehållet i den säkra och lösenordsskyddade PDF-filen. Följande steg förklarar utskrift av säker PDF:

  1. Ladda säkrad PDF med lösenord
  2. Skapa PdfViewer objekt
  3. Skriv ut säkrad PDF-fil

Följande kodavsnitt visar hur man skriver ut en säker PDF-fil med C#:

//Ladda säkert PDF-dokument medan du anger användar- eller ägarlösenord
Document document = new Document(dataDir + "Password.pdf" , "userORowner");
//Skapa PdfViewer-objekt
PdfViewer viewer = new PdfViewer();
//Öppna inmatad PDF-fil
viewer.BindPdf(document);
//Skriv ut PDF-dokument
viewer.PrintDocument();
//Stäng PDF-fil
viewer.Close();

Skriv ut PDF till ett specifikt pappersfack på en skrivare med C#

Du kan skriva ut en PDF till ett specifikt pappersfack med Aspose.PDF för .NET API. Du kanske till exempel vill skriva ut en PDF-fil med många foton till ett annat pappersfack och en text-PDF-fil till ett annat pappersfack. Följ stegen nedan för att ställa in utmatningsfack eller fack för utskrift av PDF-filer:

  1. Ladda inmatad PDF-fil
  2. Ställ in attribut för utskrift
  3. Ange PageSettings och PaperSource
  4. Anropa metoden PrintDocumentWithSettings

Det är anmärkningsvärt här att du kan ändra namnet på skrivaren. Här kommer vi att använda Microsoft Print till PDF, som ett exempel. Följande kodavsnitt följer dessa steg och visar hur man skriver ut ett dokument till ett specifikt pappersfack eller fack på en skrivare med 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;
// Ställ in attribut för utskrift
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;
// Skapa objekt för skrivar- och sidinställningar och PrintDocument
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
// Ställ in skrivarens namn
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);
// Skriv ut dokument med skrivar- och sidinställningar
viewer.PrintDocumentWithSettings(pgs, ps);

///<summary>
/// Returnera PaperSource-objektet för den angivna skrivaren och facknamnet.
///</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;
}

Skriva ut sidintervall till olika papperskällor med C#

Det kan finnas scenarier där du kan behöva skriva ut olika sidor i ett PDF-dokument till olika pappersfack eller fack. Till exempel en annan papperskälla för försättsbladet och annorlunda för de andra sidorna. Du kan verkligen följa stegen nedan för att skriva ut sidintervall till olika papperskällor inom samma utskriftsjobb:

  1. Initiera ett objekt av klassen PdfViewer
  2. Använd PdfQueryPageSettings händelsehanterare ombud
  3. Ställ in sida och skrivarinställningar
  4. Anropa metoden PrintDocumentWithSettings

Följande kodavsnitt visar hur du följer dessa steg och skriver ut olika sidintervall till olika papperskällor eller fack med 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];
}

Kontrollera utskriftsjobbstatus när du skriver ut PDF med C#

Du kan skriva ut PDF-filer till olika skrivare. Till exempel Microsoft Print to PDF, Microsoft XPS Document Writer eller någon fysisk skrivare. Men utskriften kan ta lång tid för stora PDF-dokument eller så kan utskriften misslyckas av någon anledning. Därför erbjuder API:et en funktion som låter dig kontrollera utskriftsjobbstatus med följande steg:

  1. Ladda inmatad PDF-fil
  2. Ange sidinställningar
  3. Ställ in skrivarens namn
  4. Skriv ut PDF-dokument med PrintDocumentWithSettings

Nedan kodavsnitt visar hur du kontrollerar utskriftsjobbstatus eller utskriftsförlopp för PDF med C#:

// Instantiera PdfViewer-objekt
PdfViewer viewer = new PdfViewer();

// Bind käll PDF-fil
viewer.BindPdf(dataDir + "Sample Document with Bookmark.pdf");
viewer.AutoResize = true;

// Dölj utskriftsdialogrutan
viewer.PrintPageDialog = false;

// Skapa objekt för skrivarinställningar
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();

// Ange skrivarens anme
//ps.PrinterName = "Microsoft XPS Document Writer";
ps.PrinterName = "Microsoft Print to PDF";

// Resulterande utskriftsnamn
//ps.PrintFileName = "ResultantPrintout.xps";
ps.PrintFileName = "ResultantPrintout.pdf";

// Skriv ut utdata till fil
ps.PrintToFile = true;
ps.FromPage = 1;
ps.ToPage = 2;
ps.PrintRange = System.Drawing.Printing.PrintRange.SomePages;

// Ange sidstorleken för utskriften
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);

// Skriv ut dokumentet med de inställningar som anges ovan
viewer.PrintDocumentWithSettings(pgs, ps);

// Kontrollera utskriftsstatusen
if (viewer.PrintStatus != null)
{
    // Ett undantag gjordes
    Exception ex = viewer.PrintStatus as Exception;
    if (ex != null)
    {
        // Få meddelande om undantag
    }
}
else
{
    // Inga fel hittades. Utskriftsjobbet har slutförts
    Console.WriteLine("printing completed without any issue..");
}

Som ett resultat skrivs det här kodavsnittet ut på .NET-applikationens konsol om utskriftsstatus för PDF-filen:

C# Skriv ut pdf

Slutsats

Sammanfattningsvis har vi lärt oss olika tillvägagångssätt och användningsfall för att skriva ut lösenordssäkra och osäkra PDF-filer med C# eller VB NET i dina programmeringsapplikationer. Dessutom har vi utforskat utskrift av hela PDF-dokument. På samma sätt har vi lärt oss att skriva ut vissa sidintervall efter specifika sidfack, fack eller papperskällor. Dessutom har vi också kontrollerat hur man övervakar utskriftsstatus eller utskriftsförlopp för dokument med C#.

Se även