Witam,
mam prosty testowy programik napisany w celu uporania się z problemem raz wolnego a kiedy indziej szybkiego drukowania czy podglądu wydruku.
Środowisko: MS Visual C# Express 2010.
Jedna formatka a na niej komponent PrintDocument oraz menu z 3-ema poleceniami (page setup, print preview, print).
A oto kod:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Printing;
namespace WFAPrintTest {
public partial class Form1 : Form {
private PageSettings pgSettings = new PageSettings();
private PrinterSettings prtSettings = new PrinterSettings();
public Form1() {
InitializeComponent();
}
private void pageSetupToolStripMenuItem_Click(object sender, EventArgs e) {
PageSetupDialog pageSetupDialog = new PageSetupDialog();
pageSetupDialog.PageSettings = pgSettings;
pageSetupDialog.PrinterSettings = prtSettings;
pageSetupDialog.ShowDialog();
}
private void printPreviewToolStripMenuItem_Click(object sender, EventArgs e) {
printDoc.DefaultPageSettings = pgSettings;
printDoc.PrinterSettings = prtSettings;
PrintPreviewDialog dlg = new PrintPreviewDialog();
dlg.Document = printDoc;
dlg.ShowDialog();
}
private void printToolStripMenuItem_Click(object sender, EventArgs e) {
printDoc.DefaultPageSettings = pgSettings;
printDoc.PrinterSettings = prtSettings;
PrintDialog dlg = new PrintDialog();
dlg.Document = printDoc;
if (dlg.ShowDialog() == DialogResult.OK) {
printDoc.Print();
}
}
private int pageIndex = 0;
private int pageCount = 50;
private void printDoc_BeginPrint(object sender, PrintEventArgs e) {
printDoc.DocumentName = "test";
pageIndex = 0;
}
private void printDoc_PrintPage(object sender, PrintPageEventArgs e) {
string s = string.Format("page {0} of {1}", pageIndex+1, pageCount);
Font font = new Font("Arial", 40, FontStyle.Bold);
Brush brush = new SolidBrush(Color.Blue);
StringFormat stringFormat = new StringFormat();
stringFormat.Alignment = StringAlignment.Center;
stringFormat.LineAlignment = StringAlignment.Center;
int left = e.PageBounds.Width / 2;
int top = e.PageBounds.Height / 2;
e.Graphics.DrawString(s, font, brush, left, top, stringFormat);
pageIndex++;
e.HasMorePages = pageIndex < pageCount;
}
}
}
W skrócie: drukowanie 50-u stron a na nich tylko napis po środku z licznikiem i liczbą stron.
A teraz problem:
po uruchomieniu programu i wybraniu polecenia drukowania lub podglądu wydruku, obojętnie czy raz czy 100 razy, strony są tworzone w tempie 2-3/s,
natomiast gdy wybiorę polecenie ustawienia strony i zatwierdzę ten dialog przez 'OK' to od tej pory tworzenie stron odbywa się w tempie ok. 15-20/s !!!
Próbowałem podejrzeć co się dzieje wewnątrz obiektu pgSettings, przez zrzucenie jego zawartości do pliku tekstowego dzięki serializacji, następnie porównanie otrzymanych plików przed i po wyjściu z dialogu PageSetupDialog.
Podglądałem też zawartość pgSettings i prtSettings w oknie 'Watch' (chyba do 5-ego poziomu zagłębienia w strukturę), też przed i po wyjściu z dialogu PageSetupDialog.
Niestety nie zauważyłem niczego co mogłoby się zmienić dzięki kliknięciu 'OK' w dialogu 'Ustawienia strony'.
Czy ktoś się już z tym spotkał, wie o co chodzi?
Ps. na forum 'social.msdn' na ten temat cisza oraz jeden nie zakończony pozytywnie wątek (użytkownika Coder_Cool) ...
strony są tworzone w tempie 2-3/s
,tworzenie stron odbywa się w tempie ok. 15-20/s
to pierwsze jeszcze ujdzie ale to drugie? Co to za drukarka że wypluwa Ci 20 stron w sekundę?