2017-05-25 56 views
8

Mam opcję, że użytkownik może wybrać opcję drukowania, gdzie wywołuje PrintDialog, gdzie użytkownik może wybrać już zdefiniowany profil drukarki.Drukuj plik z wybranym profilem drukarki/rozmiarem strony

Dla tej drukarki domyślny rozmiar papieru to A4, ale wybór tego profilu powoduje zmianę na A5.

Korzystam z poniższego kodu, który wysyła zadanie drukowania, aby poprawić drukarkę, ale nie pobiera prawidłowego rozmiaru papieru, ponieważ zawsze jest drukowany w formacie A4. Czy tu brakuje czegoś lub czy istnieje alternatywny sposób osiągnięcia tego?

using (var pd = new PrintDialog()) 
{ 
    if (pd.ShowDialog() == DialogResult.OK) 
     { 
     var info = new ProcessStartInfo(filepath) 
        { 
         Arguments = "\"" + pd.PrinterSettings + "\"", 
         CreateNoWindow = true, 
         WindowStyle = ProcessWindowStyle.Hidden, 
         UseShellExecute = true, 
         Verb = "Print" 
        }; 
     Process.Start(info); 
     } 
    } 
+3

Jest zbyt mało prawdopodobne, że bez względu na program związany jest z * filepath * idzie docenić tych przekazanych argumentów. Zasadniczo każdy program, który implementuje czasownik Drukuj, sam decyduje, jakiego papieru użyć. Prawie zawsze domyślny wybór skonfigurowany w Panelu sterowania. –

+0

Wygląda to podejrzanie jak domyślne okno dialogowe opcji konfiguracyjnych sterownika drukowania, ale wydaje się, że otwierasz go jako oddzielny proces. Czy próbujesz utworzyć program, który zmienia domyślne ustawienia drukarki? Innymi słowy, jestem bardzo zdezorientowany tym, co dokładnie próbujesz zrobić. Odpowiedź S. Hooleya pokazuje zwykły sposób drukowania strony z poziomu aplikacji. Uważam, że można go używać w połączeniu z PrintDialog, aby umożliwić użytkownikom dostosowanie ustawień drukowania. TLDR: Proszę wyjaśnić, co dokładnie próbujesz zrobić. – ashbygeek

Odpowiedz

0

powinny być w stanie określić page settings przy użyciu kodu jak poniżej, który opiera się na PrintDocument z System.Drawing.Printing. W razie potrzeby można również zdefiniować obsługi zdarzeń dla zdarzenia printpage stosując klasę PrintDocument:

PrintDocument pd = new PrintDocument(); 
//pd.PrintPage += new PrintPageEventHandler(handlePagePrint); 
pd.PrinterSettings.PrinterName = "Printer name goes here"; 
// select the appropriate item from the PaperSizes collection 
pd.DefaultPageSettings.PaperSize = pd.PrinterSettings.PaperSizes[0]; 

if (pd.PrinterSettings.IsValid) 
{ 
    pd.Print(); 
} 
+0

Byłoby dobrze pokazać, jak to jest powiązane z oknem dialogowym ustawień drukarki. – ashbygeek