|
分類:[C#]
以下は読み込んだ画像を印刷する簡単なプログラムの一部です。
// 画像読み込み private void btnLoadFile_Click(object sender, EventArgs e) { OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "image file|*.bmp;*.gif;*.jpeg;*.jpg"; if (DialogResult.OK == dlg.ShowDialog(this)) { _img.Dispose(); _img = Image.FromFile(dlg.FileName); } }
// 印刷 private void btnPrint_Click(object sender, EventArgs e) { PrintDocument doc = new PrintDocument(); doc.DocumentName = "PrintTest"; doc.PrinterSettings = _prnSettings; doc.DefaultPageSettings = _pageSettings; doc.PrintPage += new PrintPageEventHandler(doc_PrintPage); doc.Print(); }
void doc_PrintPage(object sender, PrintPageEventArgs e) { e.Graphics.DrawImage(_img, e.MarginBounds); e.HasMorePages = false; }
このコードでプリンタに仮想PDFプリンタ(PrimoPDFなど)を指定して印刷すると、doc.Print()でハングアップするのですが、その理由が分かりません。 _prnSettingsと_pageSettingsは事前にPrinterDialogやPageSetupDialogで変更しています。 たぶん、PrinterSettingsオブジェクトとPageSettingsオブジェクトの使い方も分かっていません。 投げられた例外(AccessViolationExceptionやExecutionEngineExceptionだったり)が表示される場合もあれば、表示されずただ単に「○○○は動作を停止しました」というダイアログが表示されるだけの場合もあります。
理由が分かる方、ぜひその理由を添えて、どうか私を口汚く罵ってください。 よろしくお願いします。
ちなみに開発環境は ・Windows7 Pro ・Visual Studio 2008 Pro ・C# です。仮想PDFプリンタとして ・PrimoPDF 5.1.0.2 ・CubePDF 0.9.1β ・Bullzip PDF Printer 7.1.1195 で確かめてみましたが、同じ結果になり、レーザープリンタ(Canon LBP5800)では普通に印刷できました。
|