Jak drukować za pomocą okna dialogowego w języku C

This article was translated from English: Does it need improvement?
Translated
View the article in English

Okno dialogowe drukowania to standardowe okno systemu operacyjnego, które pozwala użytkownikom wybrać drukarkę, ustawić liczbę kopii, wybrać zakres stron i dostosować opcje papieru przed drukowaniem. W przypadku aplikacji desktopowych, w których użytkownicy muszą mieć kontrolę nad tym, jak i gdzie drukowane są ich dokumenty, wyświetlenie tego okna dialogowego jest oczekiwanym zachowaniem.

IronPrint udostępnia jedną metodę — Printer.ShowPrintDialog() — która wyświetla natywny dialog drukowania, stosuje wybory użytkownika i wysyła dokument do wybranej drukarki. Instalujemy jeden pakiet NuGet i piszemy jedną linię kodu.

Szybki start: Drukowanie za pomocą okna dialogowego

  1. Zainstaluj IronPrint za pośrednictwem NuGet: Install-Package IronPrint
  2. Dodaj using IronPrint; do pliku
  3. Wywołaj Printer.ShowPrintDialog("filepath"), aby otworzyć natywny dialog drukowania
  4. (Opcjonalnie) Przekaż obiekt PrintSettings, aby wstępnie skonfigurować domyślne ustawienia dialogu
  5. Użytkownik wybiera drukarkę, liczbę kopii i opcje, a następnie klika "PRINT"
  1. Install IronPrint with NuGet Package Manager

    PM > Install-Package IronPrint
  2. Skopiuj i uruchom ten fragment kodu.

    using IronPrint;
    
    // Display the print dialog and print the document
    Printer.ShowPrintDialog("document.pdf");
  3. Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronPrint w swoim projekcie już dziś z darmową wersją próbną

    arrow pointer

Jak działa okno dialogowe PRINT w języku C#?

Metoda Printer.ShowPrintDialog() otwiera natywne okno dialogowe drukowania systemu operacyjnego. Użytkownik widzi pełny zestaw opcji drukowania — wybór drukarki, liczbę kopii, zakres stron, orientację i rozmiar papieru — i klika PRINT, aby wysłać zadanie, lub Anuluj, aby zamknąć okno dialogowe bez drukowania.

Za kulisami, natywne podejście .NET wymaga utworzenia instancji System.Windows.Forms.PrintDialog, podłączenia jej do PrintDocument, obsługi zdarzenia PrintPage, aby narysować zawartość na powierzchni graficznej drukarki, sprawdzenia DialogResult, a następnie wywołania PrintDocument.Print(). Taka konfiguracja zazwyczaj obejmuje 15–25 linii kodu. Nie obejmuje to również wbudowanego renderowania plików PDF lub obrazów — drukowanie pliku PDF za pomocą natywnego okna dialogowego oznacza najpierw parsowanie pliku PDF na strony nadające się do rysowania, co wymaga jeszcze jednej biblioteki.

IronPrint obsługuje cały proces w jednym wywołaniu:

:path=/static-assets/print/content-code-examples/how-to/print-with-dialog/print-with-dialog-show-print-dialog-open-and-print.cs
using IronPrint;

// Open the dialog, let the user configure settings, and print
Printer.ShowPrintDialog("quarterly-report.pdf");
Imports IronPrint

' Open the dialog, let the user configure settings, and print
Printer.ShowPrintDialog("quarterly-report.pdf")
$vbLabelText   $csharpLabel

Metoda akceptuje ścieżkę pliku jako string lub dane surowego pliku jako byte[]. IronPrint wykrywa format dokumentu, renderuje go za pomocą odpowiedniego silnika i wyświetla okno dialogowe. Po potwierdzeniu przez użytkownika dokument zostanie wydrukowany zgodnie z wybranymi ustawieniami. Samouczek dotyczący drukowania dokumentów szczegółowo omawia cały cykl drukowania.

Jak wstępnie skonfigurować ustawienia okna dialogowego?

Możemy ustawić wartości domyślne przed otwarciem okna dialogowego, tworząc obiekt PrintSettings i przekazując go jako drugi parametr. Okno dialogowe otworzy się z wstępnie zaznaczonymi wartościami, a użytkownik może je zaakceptować bez zmian lub zmienić dowolne ustawienie.

:path=/static-assets/print/content-code-examples/how-to/print-with-dialog/print-with-dialog-preconfigure-dialog-settings.cs
using IronPrint;

// Pre-configure defaults for the dialog
var settings = new PrintSettings
{
    PrinterName = "HP LaserJet Pro",
    PaperSize = PaperSize.A4,
    PaperOrientation = PaperOrientation.Portrait,
    Dpi = 300,
    NumberOfCopies = 2,
    Grayscale = false
};

// Open dialog with pre-filled settings
Printer.ShowPrintDialog("invoice.pdf", settings);
Imports IronPrint

' Pre-configure defaults for the dialog
Dim settings As New PrintSettings With {
    .PrinterName = "HP LaserJet Pro",
    .PaperSize = PaperSize.A4,
    .PaperOrientation = PaperOrientation.Portrait,
    .Dpi = 300,
    .NumberOfCopies = 2,
    .Grayscale = False
}

' Open dialog with pre-filled settings
Printer.ShowPrintDialog("invoice.pdf", settings)
$vbLabelText   $csharpLabel

Jest to przydatne, gdy aplikacja z góry zna prawdopodobny format drukarki lub papieru. Na przykład, system punktu sprzedaży, który zawsze drukuje paragony na określonej drukarce termicznej, może domyślnie ustawić PrinterName na to urządzenie. Użytkownik nadal ma możliwość zmiany go w dialogu.

Aby odkryć, które drukarki są dostępne w systemie, wywołujemy Printer.GetPrinterNames(), co zwraca List<string> wszystkich zainstalowanych drukarek. Podobnie, Printer.GetPrinterTrays() zwraca dostępne zasobniki papieru dla danej drukarki.

Pełna lista konfigurowalnych właściwości obejmuje PrinterName, PaperSize, PaperOrientation, Dpi, NumberOfCopies, Grayscale, PaperMargins, Flatten (dla pól formularzy PDF) oraz Tray. Poradnik dotyczący ustawień drukowania omawia każdą właściwość wraz z przykładami kodu. Każda właściwość, która nie jest ustawiona w PrintSettings, ustawia się na domyślną konfigurację wybranej drukarki.

Jak wyświetlić okno dialogowe asynchronicznie?

Metoda Printer.ShowPrintDialogAsync() zwraca Task, co czyni ją kompatybilną z await. Zapobiega to blokowaniu wątku interfejsu użytkownika przez okno dialogowe — co jest niezbędne w przypadku WPF, MAUI i każdej aplikacji, w której zawieszony interfejs powoduje słabe wrażenia użytkownika.

:path=/static-assets/print/content-code-examples/how-to/print-with-dialog/print-with-dialog-show-print-dialog-async.cs
using IronPrint;

// Non-blocking dialog — the UI remains responsive
await Printer.ShowPrintDialogAsync("report.pdf");
Imports IronPrint

' Non-blocking dialog — the UI remains responsive
Await Printer.ShowPrintDialogAsync("report.pdf")
$vbLabelText   $csharpLabel

ShowPrintDialogAsync() akceptuje te same parametry co wersja synchroniczna: ścieżkę pliku lub tablicę bajtów, plus opcjonalny obiekt PrintSettings. Wzorzec asynchroniczny opiera się na tym samym wzorcu asynchronicznym opartym na zadaniach, który jest stosowany we współczesnym programowaniu w środowisku .NET.

IronPrint działa w aplikacjach WinForms, WPF, MAUI i konsolowych. Wygląd okna dialogowego dostosowuje się do platformy hosta i wersji systemu operacyjnego, dzięki czemu użytkownik zawsze widzi natywne okno drukowania, którego oczekuje.

Kiedy należy używać drukowania z oknem dialogowym, a kiedy drukowania w tle?

Wybór zależy od tego, czy użytkownik potrzebuje kontroli nad zadaniem drukowania.

Kryteria Drukuj z oknem dialogowym Ciche drukowanie
Interakcja z użytkownikiem Użytkownik wybiera drukarkę, liczbę kopii, zakres stron Brak interakcji — drukuje natychmiast
Najlepsze dla Aplikacje desktopowe, pojedyncze wydruki, funkcje dla użytkowników Zadania wsadowe, usługi działające w tle, aplikacje kioskowe
Wybór drukarki Użytkownik dokonuje wyboru w oknie dialogowym Ustawiane programowo za pomocą PrintSettings
Metoda IronPrint Printer.ShowPrintDialog() Printer.Print()
Wariant asynchroniczny ShowPrintDialogAsync() PrintAsync()

Użyj tego okna dialogowego, gdy użytkownicy muszą zweryfikować lub zmienić ustawienia przed drukowaniem — eksport raportów, drukowanie faktur lub w każdej sytuacji, w której niewłaściwa drukarka powoduje zmarnowanie strony. Użyj drukowania cichego, gdy aplikacja kontroluje całe zadanie i nie jest wymagana decyzja człowieka. Samouczek dotyczący drukowania dokumentów przedstawia oba podejścia obok siebie.

Jakie formaty plików obsługuje okno dialogowe PRINT?

Printer.ShowPrintDialog() obsługuje te same formaty co ciche drukowanie: PDF, PNG, TIFF, JPEG, GIF, HTML i BMP. Przekazujemy ścieżkę pliku niezależnie od formatu, a IronPrint obsługuje renderowanie i komunikację z buforem drukowania. Dane pliku jako byte[] są również akceptowane, co jest przydatne, gdy dokument jest generowany w pamięci lub pobierany z bazy danych.

:path=/static-assets/print/content-code-examples/how-to/print-with-dialog/print-with-dialog-print-dialog-image-and-byte-array.cs
using IronPrint;

// Print an image with the dialog
Printer.ShowPrintDialog("product-photo.png");

// Print from a byte array
byte[] reportData = File.ReadAllBytes("monthly-report.pdf");
Printer.ShowPrintDialog(reportData);
Imports IronPrint

' Print an image with the dialog
Printer.ShowPrintDialog("product-photo.png")

' Print from a byte array
Dim reportData As Byte() = File.ReadAllBytes("monthly-report.pdf")
Printer.ShowPrintDialog(reportData)
$vbLabelText   $csharpLabel

Strona z przykładami kodu przedstawia dodatkowe scenariusze specyficzne dla poszczególnych formatów. W przypadku procesów związanych z plikami PDF — generowania pliku PDF i natychmiastowego drukowania — IronPDF naturalnie współdziała z IronPrint. Porównanie IronPrint i IronPDF wyjaśnia, kiedy należy używać każdego z nich.

Kolejne kroki

Drukowanie z dialogiem sprowadza się do dwóch metod: Printer.ShowPrintDialog() dla wywołań synchronicznych i Printer.ShowPrintDialogAsync() dla wykonania nieblokującego. Wstępnie skonfiguruj domyślne ustawienia za pomocą PrintSettings i pozwól użytkownikowi na wprowadzenie dalszych zmian. Obie metody obsługują wszystkie formaty dokumentów IronPrint i działają w projektach WinForms, WPF, MAUI oraz konsolowych.

Zapoznaj się z samouczkami IronPrint, aby uzyskać pełne instrukcje, Dokumentacją API klasy Printer zawierającą wszystkie dostępne metody lub instrukcją dotyczącą ustawień drukowania, aby uzyskać informacje na temat zaawansowanej konfiguracji. Lista zmian zawiera informacje o ostatnich ulepszeniach i nowych funkcjach.

Rozpocznij bezpłatny 30-dniowy okres próbny, aby przetestować drukowanie okien dialogowych w rzeczywistym projekcie — nie jest wymagana karta kredytowa. Gdy produkt będzie gotowy do wysyłki, zapoznaj się z opcjami licencyjnymi już od 749 USD.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 38,948 | Wersja: 2026.4 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronPrint
uruchom próbkę obserwuj, jak twój dokument trafia do drukarki.