« Zipファイルがうまく投稿できない | トップページ | WebBrowserコントロールを制御する »

Webページを丸ごとビットマップに

 インターネットエクスプローラで印刷をすると右端が切れることがある。これは仕様なので知っていればこんなもんだと納得するが,小学生は簡単には納得しない。それはそうだ。はっきり言って切れる方がおかしい。ワープロ等で作った文書が印刷したら右端が切れて,「こういうものなんです」と説明されて「はいそうですか」と答える人がいる訳がない。そして「インターネットの印刷はこうやるんだ」と何回いったかわからない説明を繰り返すために授業の多くの時間を費やすことになる。

 そこでWebページの右端が切れないように印刷する方法を考えてみる。

 まず,余白や用紙の向きを変えて印刷してみる。  確かに右端が切れなくなるようにできるが,小学校ではこれは論外である。児童はまず印刷しちゃってから右端が切れていることに気づくのだ。印刷プレビューなんてする気の利いた子どもは100人に1人だ。もう一度印刷したら紙が2倍必要になる。インクも2倍,時間も2倍だ。 

 次に,EpsonとCanonがそれぞれ右端が切れないように調節して印刷してくれるソフトを無料で配付している。しかたがないことだが,それぞれの社のプリンタしか使用できない。ちょっとせこい気もするが,やはりしかたがないだろう。ちなみに私のまわりにはhpやNec,果てはミノルタのプリンタがあったりする。さすがにカラーレーザーはEpsonだが。

 次に,HtmlをPDFに変換して印刷してみる。・・・・・・ダメ,面倒くさい。フリーソフトは大概,懐かしのトラの絵のゴーストスクリプトを使う。インストールも設定も使うのも手間がかかって面倒くさい。パソコン教室の全機にインストールするなんて考えただけで面倒くさい。そして簡単なやつは有料だ。そんで学校には金はない。

 最終手段はソフトの自作だ。ソフトのインストールは面倒くさいが,ソフトの自作は面倒くさくないのは不思議だ。前置きが長くなったが,とりあえず,できた。Webページを丸ごとビットマップにして保存する仕組みだ。ピットマップにしちゃえば,あとは煮るなり焼くなり簡単なはずだ。市販ソフトで ScanWeb というのがあるが,とりあえず,それと似たものだ。

 例によってVB2005β2用のリストだ。早く正式版を出荷してほしいものだ。でもエキスプレス版が無料との話もあり,そうだとしたら少しくらい遅くてもまぁ我慢することにします。

Imports System
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Runtime.InteropServices

Public Class form1

    Const DVASPECT_CONTENT As Integer = 1
    Const DVASPECT_THUMBNAIL As Integer = 2
    Const DVASPECT_ICON As Integer = 4
    Const DVASPECT_DOCPRINT As Integer = 8

    <DllImport("ole32.dll")> _
    Public Shared Function OleDraw( _
        ByVal pUnk As IntPtr, _
        ByVal dwAspect As Integer, _
        ByVal hdcDraw As IntPtr, _
        ByRef lprcBounds As Rectangle) _
        As Integer
    End Function

    Dim WithEvents WebBrowser1 As WebBrowser
    Dim PictureBox1 As PictureBox

    Private Sub form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.WebBrowser1 = New WebBrowser
        Me.Controls.Add(WebBrowser1) 'フォームに追加しないと保護エラーになる
        Me.WebBrowser1.Visible = False
        Me.PictureBox1 = New PictureBox
        Me.Controls.Add(Me.PictureBox1)
        Me.PictureBox1.Dock = DockStyle.Fill
        Me.WebBrowser1.Navigate("http://www.yahoo.co.jp")
    End Sub

    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        Me.WebBrowser1.Document.Body.Style = "overflow-x:hidden;overflow-y:hidden" 'スクロールバーを消す(ScrollBarsEnabled=Falseでは消えない)
        Dim Rect As Rectangle = Me.WebBrowser1.Document.Body.ScrollRectangle
        Dim BodySize As New Size(Rect.Width, Rect.Height)
        Me.Size = BodySize
        Me.WebBrowser1.Size = BodySize
        Me.PictureBox1.Size = BodySize
        Me.PictureBox1.Image = New Bitmap(BodySize.Width, BodySize.Height)
        Dim Graph As Graphics = Graphics.FromImage(Me.PictureBox1.Image) 'こうしないと後で画像が消える
        Dim Browser As Object = Me.WebBrowser1.ActiveXInstance
        Dim pUnk As IntPtr = Marshal.GetIUnknownForObject(Browser)
        Dim hDc As IntPtr = Graph.GetHdc
        OleDraw(pUnk, DVASPECT_CONTENT, hDc, Me.PictureBox1.ClientRectangle)
        Marshal.Release(pUnk)
        Graph.ReleaseHdc(hDc)
        Me.Refresh()
    End Sub
End Class

|

« Zipファイルがうまく投稿できない | トップページ | WebBrowserコントロールを制御する »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: Webページを丸ごとビットマップに:

« Zipファイルがうまく投稿できない | トップページ | WebBrowserコントロールを制御する »