Drukuj pliki PDF C#

Wiele firm w dużym stopniu ogranicza zużycie papieru. Istnieją jednak scenariusze, w których drukowanie jest ważne. Na przykład system może zawierać szczegóły zamówienia online w formacie PDF. Muszą wydrukować plik PDF podczas wysyłania zamówienia online do dostawy. Przetwarzają elementy na dużą skalę, więc ręczne wydrukowanie każdego dokumentu może być nie lada zadaniem. Aspose.PDF for .NET API, oprócz wielu innych funkcji manipulacji i konwersji plików, obsługuje wydajne drukowanie plików PDF. Przyjrzyjmy się następującym przypadkom użycia związanym z drukowaniem plików PDF w aplikacjach .NET przy użyciu języka C#:

Wydrukuj plik PDF za pomocą C#

Drukowanie plików PDF można zautomatyzować w aplikacjach .NET przy użyciu języka C# lub VB.net. Możesz drukować pliki PDF, wykonując poniższe proste czynności:

  1. Utwórz obiekt klasy PdfViewer.
  2. Załaduj wejściowy dokument PDF
  3. Wydrukuj plik PDF

Poniższy fragment kodu pokazuje, jak wydrukować plik PDF za pomocą C#:

//Utwórz obiekt PdfViewer
PdfViewer viewer = new PdfViewer();
//Otwórz wejściowy plik PDF
viewer.BindPdf(dataDir + "Test.pdf");
//Wydrukuj dokument PDF
viewer.PrintDocument();
//Zamknij plik PDF
viewer.Close();

Drukuj wiele plików PDF za pomocą C#

Jeśli potrzebujesz wydrukować wiele plików ze względu na charakter swojej działalności, ta funkcja jest już obsługiwana przez Aspose.PDF for .NET API. Drukowanie wielu plików PDF jeden po drugim przy użyciu powyższego fragmentu kodu może być nieco powolne. Dlatego weźmy drukowanie PDF o krok dalej, aby ułatwić ten proces. Tutaj będziemy używać listy, dodając nazwę każdego pliku PDF do tej listy. Poniższe kroki wyjaśniają, w jaki sposób będziemy drukować wiele plików PDF:

  1. Zainicjuj listę typu String
  2. Dodaj pliki PDF do listy
  3. Załaduj wejściowy plik PDF
  4. Drukuj wiele plików PDF

Fragment kodu pokazuje, jak wydrukować wiele plików PDF przy użyciu języka C#:

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

foreach (String file in files)
{
    //Utwórz obiekt PdfViewer
    PdfViewer viewer = new PdfViewer();
    //Otwórz wejściowy plik PDF
    viewer.BindPdf(file);
    //Wydrukuj dokument PDF
    viewer.PrintDocument();
    //Zamknij plik PDF
    viewer.Close();
}

Drukuj określone strony PDF za pomocą C#

W API dostępna jest funkcja drukowania określonych stron dokumentów PDF. Rozważymy przykład obejmujący drukowanie wielu zakresów stron. Musisz określić numery stron od i do, jak wyjaśniono w poniższych krokach:

  • Ustaw ścieżki wejścia i wyjścia pliku
  • Ustaw drukowanie określonych stron, definiując zakres
  • Określ parametry drukowania
  • Wydrukuj strony zgodnie z wcześniejszymi instrukcjami

Poniższy fragment kodu pokazuje, jak wydrukować określone strony dokumentu przy użyciu języka 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())
        {
            // Tutaj znajduje się kod drukowania dokumentu
            // Wydrukuj dokument przy użyciu ustawień drukarki i strony                    
            theViewer.BindPdf(inPdf);
            theViewer.AutoResize = true;
            theViewer.AutoRotate = true;
            theViewer.PrintPageDialog = false;
            theViewer.PrintDocumentWithSettings(pgs, ps);
            theViewer.Close();
        }
    }
}

Wydrukuj zabezpieczony plik PDF za pomocą C#

Plik PDF może być zabezpieczony i chroniony hasłem. Jednak hasło może być dwojakiego rodzaju, tj. hasło użytkownika i hasło właściciela. Pliki PDF zabezpieczone hasłem użytkownika wymagają hasła do otwierania i przeglądania zaszyfrowanego pliku PDF. Z drugiej strony hasło właściciela jest wymagane do modyfikowania zawartości zabezpieczonego i chronionego hasłem pliku PDF. Poniższe kroki wyjaśniają drukowanie bezpiecznego pliku PDF:

  1. Załaduj zabezpieczony plik PDF z hasłem
  2. Utwórz obiekt PdfViewer.
  3. Wydrukuj zabezpieczony plik PDF

Poniższy fragment kodu pokazuje, jak wydrukować zabezpieczony plik PDF przy użyciu języka C#:

//Załaduj bezpieczny dokument PDF, określając hasło użytkownika lub właściciela
Document document = new Document(dataDir + "Password.pdf" , "userORowner");
//Utwórz obiekt PdfViewer
PdfViewer viewer = new PdfViewer();
//Otwórz wejściowy plik PDF
viewer.BindPdf(document);
//Wydrukuj dokument PDF
viewer.PrintDocument();
//Zamknij plik PDF
viewer.Close();

Wydrukuj plik PDF do określonej tacy papieru drukarki za pomocą C#

Możesz wydrukować plik PDF do określonej tacy papieru za pomocą Aspose.PDF for .NET API. Na przykład możesz chcieć wydrukować plik PDF z dużą ilością zdjęć na innym podajniku papieru i tekstowy plik PDF na innym podajniku papieru. Wykonaj poniższe czynności, aby ustawić tacę wyjściową lub pojemnik do drukowania plików PDF:

  1. Załaduj wejściowy plik PDF
  2. Ustaw atrybuty do drukowania
  3. Określ PageSettings i PaperSource
  4. Wywołaj metodę PrintDocumentWithSettings.

Warto tutaj zaznaczyć, że istnieje możliwość zmiany nazwy drukarki. Tutaj jako przykład użyjemy Microsoft Print to PDF. Poniższy fragment kodu wykonuje następujące kroki i pokazuje, jak wydrukować dokument do określonej tacy papieru lub pojemnika drukarki za pomocą języka 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;
// Ustaw atrybuty do drukowania
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;
// Utwórz obiekty dla ustawień drukarki i strony oraz PrintDocument
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
// Ustaw nazwę drukarki
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);
// Wydrukuj dokument przy użyciu ustawień drukarki i strony
viewer.PrintDocumentWithSettings(pgs, ps);

///<summary>
/// Zwróć obiekt PaperSource dla podanej nazwy drukarki i zasobnika.
///</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;
}

Drukowanie zakresu stron do różnych źródeł papieru przy użyciu języka C#

Mogą wystąpić sytuacje, w których konieczne może być wydrukowanie różnych stron jednego dokumentu PDF na różnych tacach lub pojemnikach na papier. Na przykład inne źródło papieru dla strony tytułowej i inne dla pozostałych stron. Z pewnością możesz wykonać poniższe kroki, aby wydrukować zakresy stron do różnych źródeł papieru w ramach tego samego zadania drukowania:

  1. Zainicjuj obiekt klasy PdfViewer.
  2. Użyj delegata obsługi zdarzeń PdfQueryPageSettings.
  3. Skonfiguruj ustawienia strony i drukarki
  4. Wywołaj metodę PrintDocumentWithSettings.

Poniższy fragment kodu pokazuje, jak wykonać te kroki i wydrukować różne zakresy stron do różnych źródeł papieru lub tac przy użyciu języka 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];
}

Sprawdź status zadania drukowania podczas drukowania pliku PDF za pomocą C#

Pliki PDF można drukować na różnych drukarkach. Na przykład Microsoft Print to PDF, Microsoft XPS Document Writer lub dowolna drukarka fizyczna. Jednak drukowanie może zająć dużo czasu w przypadku dużych dokumentów PDF lub drukowanie może się nie powieść z jakiegoś powodu. Dlatego interfejs API oferuje funkcję, która pozwala sprawdzić stan zadania drukowania, wykonując następujące czynności:

  1. Załaduj wejściowy plik PDF
  2. Określ ustawienia strony
  3. Ustaw nazwę drukarki
  4. Wydrukuj dokument PDF za pomocą PrintDocumentWithSettings

Poniższy fragment kodu pokazuje, jak sprawdzić status zadania drukowania lub postęp drukowania pliku PDF za pomocą języka C#:

// Utwórz instancję obiektu PdfViewer
PdfViewer viewer = new PdfViewer();

// Powiąż źródłowy plik PDF
viewer.BindPdf(dataDir + "Sample Document with Bookmark.pdf");
viewer.AutoResize = true;

// Ukryj okno drukowania
viewer.PrintPageDialog = false;

// Utwórz obiekt ustawień drukarki
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();

// Określ nazwę drukarki
//ps.PrinterName = "Narzędzie zapisywania dokumentów Microsoft XPS";
ps.PrinterName = "Microsoft Print to PDF";

// Nazwa Wydruku Wynikowego
//ps.PrintFileName = "ResultantPrintout.xps";
ps.PrintFileName = "ResultantPrintout.pdf";

// Wydrukuj wynik do pliku
ps.PrintToFile = true;
ps.FromPage = 1;
ps.ToPage = 2;
ps.PrintRange = System.Drawing.Printing.PrintRange.SomePages;

// Określ rozmiar strony wydruku
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);

// Wydrukuj dokument z ustawieniami określonymi powyżej
viewer.PrintDocumentWithSettings(pgs, ps);

// Sprawdź stan drukowania
if (viewer.PrintStatus != null)
{
    // Zgłoszono wyjątek
    Exception ex = viewer.PrintStatus as Exception;
    if (ex != null)
    {
        // Pobierz komunikat o wyjątku
    }
}
else
{
    // Nie znaleziono żadnych błędów. Zadanie drukowania zostało zakończone pomyślnie
    Console.WriteLine("printing completed without any issue..");
}

W rezultacie ten fragment kodu jest drukowany na konsoli aplikacji .NET o statusie drukowania pliku PDF:

C# Drukuj PDF

Wniosek

Podsumowując, nauczyliśmy się różnych podejść i przypadków użycia drukowania plików PDF zabezpieczonych i niezabezpieczonych hasłem za pomocą C# lub VB NET w twoich aplikacjach programistycznych. Ponadto zbadaliśmy drukowanie całych dokumentów PDF. Podobnie nauczyliśmy się drukować niektóre zakresy stron według określonych tac, pojemników lub źródeł papieru. Ponadto sprawdziliśmy również, jak monitorować stan drukowania lub postęp drukowania dokumentów za pomocą C#.

Zobacz też