- PR -

WebBrowserプレビュー画面の設定

1
投稿者投稿内容
extream
ベテラン
会議室デビュー日: 2005/12/26
投稿数: 83
投稿日時: 2008-02-13 13:48
C#のアプリからHTMLファイルを読み込み、画面に表示させずにプレビュー画面を開こうと思い、以下のようなソースを作成しました。

private void button2_Click(object sender, EventArgs e)
{
WebBrowser webBrowserForPrinting = new WebBrowser();
webBrowserForPrinting.DocumentCompleted +=
new WebBrowserDocumentCompletedEventHandler(PrintDocument);

webBrowserForPrinting.Url = new Uri(@"C:\\Users\\test\\Desktop\\test.html");
}

private void PrintDocument(object sender, WebBrowserDocumentCompletedEventArgs e)
{
((WebBrowser)sender).ShowPrintPreviewDialog();
}

上記でプレビュー画面が表示されはしたのですが、
 ・印刷向きをデフォルトで横方向
 ・倍率をデフォルトで100%
 ・プレビュー画面をWINDOWセンターに表示
 ・プレビュー画面のサイズ
などの設定をどのように行えばいいのかわかりません。
もしご存知の方おりましたら、教えてください。


− 環境 −
Windows Vista
VS2005 C#
extream
ベテラン
会議室デビュー日: 2005/12/26
投稿数: 83
投稿日時: 2008-02-13 15:41
いろいろ調査しているのですが、

private void button3_Click(object sender, EventArgs e)
{
System.Drawing.Printing.PrintDocument pd =
new System.Drawing.Printing.PrintDocument();

pd.PrintPage +=
new System.Drawing.Printing.PrintPageEventHandler(pd_PrintPage);

pd.DefaultPageSettings.Landscape = true; // 横向き
pd.DefaultPageSettings.PaperSize = new PaperSize("A4",827, 1169);// 用紙サイズ

PrintPreviewDialog ppd = new PrintPreviewDialog();
ppd.Document = pd;

ppd.SetBounds(0, 0, 1024, 768); // プレビュー画面サイズ
ppd.Document.DocumentName = "サンプル";

//印刷プレビューダイアログを表示する
ppd.ShowDialog();
}

private void pd_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
// ここでHTMLを読み込ませる?
}

のようにし、何とかしてHTMLをブラウザで表示した状態のものを印刷できないかを調べています。
しかし、今まで印刷などはやったことがないので苦戦してます。。。


アドバイス頂けたらうれしいです。
未記入
大ベテラン
会議室デビュー日: 2006/12/15
投稿数: 157
投稿日時: 2008-02-13 19:49
WebBrowserのDrawToBitmapて、使用できないんですね。

印刷対象がWebBrowserコントロール内に全て表示されていることを前提にするなら、
1、WebBrowserにHTML描画
2、表示しているWebBrowserをCopyFromScreenでクリップボードにコピー
3、イメージをPrintPageEventArgsに描画
で、OKかと思います。

半年振りのC#なんで汚いサンプルですが・・・
(USING使ってないやらイメージの扱いがヘンとかは目を瞑って下さい。)
コード:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;
using System.Drawing.Printing;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        private Bitmap bmp;  // 印刷イベントに渡すブラウザイメージ
        public Form1()
        {
            InitializeComponent();
            webBrowser1.Navigate("http://www.google.co.jp/");  // 適当にブラウズ
        }

        private void button1_Click(object sender, EventArgs e)
        {

            System.Drawing.Printing.PrintDocument pd = new System.Drawing.Printing.PrintDocument();
            pd.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(pd_PrintPage);
            pd.DefaultPageSettings.Landscape = true; // 横向き 
            pd.DefaultPageSettings.PaperSize = new PaperSize("A4", 827, 1169);// 用紙サイズ
            PrintPreviewDialog ppd = new PrintPreviewDialog();
            ppd.Document = pd;
            ppd.SetBounds(0, 0, 1024, 768); // プレビュー画面サイズ 
            ppd.Document.DocumentName = "サンプル";

            // 追加開始
            Rectangle rect = this.RectangleToScreen(webBrowser1.Bounds);
            bmp = new Bitmap(rect.Width, rect.Height, PixelFormat.Format32bppArgb);
            Graphics g = Graphics.FromImage(bmp);
            g.CopyFromScreen(rect.X, rect.Y, 0, 0, rect.Size, CopyPixelOperation.SourceCopy);
            // 追加終了

            //印刷プレビューダイアログを表示する 
            ppd.ShowDialog();
            
        }
        private void pd_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            e.Graphics.DrawImage(bmp, new Point(0, 0));
        }
    }
}

extream
ベテラン
会議室デビュー日: 2005/12/26
投稿数: 83
投稿日時: 2008-02-13 20:40
未記入さん、回答ありがとうございます。

教えていただいた方法だと、複数ページある場合は、1ページ毎に手順1〜4を繰り返す事になるのでしょうか?
 1.HTML作成
 2.WebBrowserに1で作成したHTML作成
 3.WebBrowserの内容をCopyFromScreenでコピー
 4.コピーしたイメージをメンバ変数に格納

ちなみに、WebBrowserは非表示にしているのですがCopyFromScreenでコピーできるのでしょうか?
あと、HTML内で印刷時に改行を指示するタグを入れているのですが、画像キャプチャでは改行指示は無効ですよね?



すぐに教えていただいた方法で確認できませんが、時間が空き次第確認してみたいと思います。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)