LEADTOOLS ナレッジベース

画像を表示せずに印刷できますか?

LEADTOOLSではRasterImageViewerコントロールなどの表示コントロールを使用することなく、RasterImageオブジェクトに読み込んだ画像を印刷できます。

サンプルコード(VB.NET)

' 画像をロード/保存するためのRasterCodecsオブジェクト
Private codecs As RasterCodecs
Private tempImage As RasterImage
Private document As PrintDocument

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  ' RasterCodecsオブジェクトを初期化します。
  codecs = New RasterCodecs
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  ' オープンファイルダイアログを表示します。
  Dim dlg As New OpenFileDialog
  dlg.Filter = "すべてのファイル|*.*"
  If (dlg.ShowDialog(Me) = DialogResult.OK) Then
    Try
      TextBox1.Text = dlg.FileName

      ' ファイルをロードします。
      tempImage = codecs.Load(dlg.FileName)

    Catch ex As Exception
      MessageBox.Show(Me, ex.Message)
    End Try
  End If
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  ' このマシンにプリンタが接続されているかどうかをチェックします。
  If (Not PrinterSettings.InstalledPrinters Is Nothing) AndAlso (PrinterSettings.InstalledPrinters.Count > 0) Then
    ' PrintDocumentオブジェクトを初期化します。
    document = New PrintDocument
    document.PrintController = New System.Drawing.Printing.StandardPrintController
    AddHandler document.PrintPage, AddressOf printDocument_PrintPage

    document.Print()
  Else
    MessageBox.Show("印刷可能なプリンターを見つけられませんでした。")
  End If
End Sub

Private Sub printDocument_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs)
  Dim destRectangle As New LeadRect( _
       e.MarginBounds.Left, _
       e.MarginBounds.Top, _
       CType((CType(tempImage.ImageWidth, Single) / CType(tempImage.XResolution, Single) * 100.0F), Integer), _
       CType((CType(tempImage.ImageHeight, Single) / CType(tempImage.YResolution, Single) * 100.0F), Integer))

  Dim props As RasterPaintProperties = RasterPaintProperties.Default
  props.PaintEngine = RasterPaintEngine.GdiPlus

  RasterImagePainter.Paint(tempImage, e.Graphics, LeadRect.Empty, LeadRect.Empty, destRectangle, destRectangle, props)
End Sub

サンプルコード(C#)

// 画像をロード/保存するためのRasterCodecsオブジェクト
private RasterCodecs codecs;
private RasterImage tempImage;
private PrintDocument document;

private void Form1_Load(object sender, EventArgs e)
{
  // RasterCodecsオブジェクトを初期化します。
  codecs = new RasterCodecs();
}

private void button1_Click(object sender, EventArgs e)
{
  // オープンファイルダイアログを表示します。
  OpenFileDialog dlg = new OpenFileDialog();
  dlg.Filter = "すべてのファイル|*.*";
  if (dlg.ShowDialog(this) == DialogResult.OK)
  {
    try
    {
      textBox1.Text = dlg.FileName;

      // ファイルをロードします。
      tempImage = codecs.Load(dlg.FileName);
    }
    catch (Exception ex)
    {
      MessageBox.Show(this, ex.Message);
    }
  }
}

private void button2_Click(object sender, EventArgs e)
{
  // このマシンにプリンタが接続されているかどうかをチェックします。
  if (((PrinterSettings.InstalledPrinters != null)) && (PrinterSettings.InstalledPrinters.Count > 0))
  {
    // PrintDocumentオブジェクトを初期化します。
    document = new PrintDocument();
    document.PrintController = new System.Drawing.Printing.StandardPrintController();
    document.PrintPage += printDocument_PrintPage;

    document.Print();
  }
  else
  {
    MessageBox.Show("印刷可能なプリンターを見つけられませんでした。");
  }
}

private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
  LeadRect destRectangle = new LeadRect(
        e.MarginBounds.Left,
        e.MarginBounds.Top,
        (int)(((Single)tempImage.ImageWidth / (Single)tempImage.XResolution) * 100.0F),
        (int)(((Single)tempImage.ImageHeight / (Single)tempImage.YResolution) * 100.0F)
        );

  RasterPaintProperties props = RasterPaintProperties.Default;
  props.PaintEngine = RasterPaintEngine.GdiPlus;

  RasterImagePainter.Paint(tempImage, e.Graphics, LeadRect.Empty, LeadRect.Empty, destRectangle, destRectangle, props);
}

実際の動作は.NETコントロール チュートリアルの「PrintImageDirect」をご覧ください。

0 コメント

記事コメントは受け付けていません。