LEADTOOLSフォーム(Leadtools.Forms.DocumentWritersアセンブリ)

フレームを表示

DocumentEmfPageクラス








メンバ 
文書ファイルに追加される1つのWindows Enhanced Metafile(WMF)ページのためのデータ。
オブジェクトモデル
構文
public class DocumentEmfPage : DocumentPage 
'Declaration
 
Public Class DocumentEmfPage 
   Inherits DocumentPage
'Usage
 
Dim instance As DocumentEmfPage
public sealed class DocumentEmfPage : DocumentPage 
function Leadtools.Forms.DocumentWriters.DocumentEmfPage()
public ref class DocumentEmfPage : public DocumentPage 
解説

DocumentEmfPageクラスはDocumentPageから派生し、文書ファイルに追加されるEMFページの1ページを含みます。DocumentWriter.AddPageまたはDocumentWriter.InsertPageメソッドへのパラメーターがページを追加して、それが使われます。

DocumentEmfPage.EmfHandleプロパティは、ページの可視表現を格納する有効なWindows拡張メタファイルハンドル(EMF)を格納しなければなりません。このEMFハンドルは、LEADTOOLSドキュメントライタで説明されるように複数のソースを通して取得できます。

DocumentEmfPage.EmfHandleは、DocumentWriter.AddPageまたはDocumentWriter.InsertPageが呼び出されるときにそのまま使用され、フレームワークによって削除されません。それがもはや使われないとき、オブジェクトを削除するためにウィンドウズAPIDeleteEnhMetaFileを使用しなければなりません。

DocumentEmfPage.Imageプロパティはオプションで、作成されている文書が画像/テキストのオーバーレイオプション付きのPDFである場合のみ使用されます。image/テキストオーバレイでPDF文書を作成して、以下の手順を実行すること:

ページの1インチあたりドット数(DPI)は、DocumentEmfPage.EmfHandleプロパティで格納したものと同じです。したがって、300 DPIのページを作成するには、DPIが300のEMF(水平方向と垂直方向の両方。LEADTOOLSドキュメントライタはさまざまなDPI値をサポートしますが)を持つ文書ページを追加しなければなりません。image/テキスト機能でPDFを使っているならば、RasterImageオブジェクトのDPIをEMFがRasterImage.XResolutionRasterImage.YResolutionプロパティを使用して処理するのと同じDPIに設定しなければなりません。この動作をオーバーライドして、カスタム解像度を設定するために、DocumentOptions.DocumentResolutionプロパティの値を目的の最終的な解像度に設定します。この値が、EMFハンドルの解像度の代わりに使われます。

LEADTOOLSドキュメントライタは、中に0ページ以上の空ページを持つ文書の作成をサポートします。DocumentWriter.AddPageまたはDocumentWriter.InsertPageを使用し、DocumentEmptyPageでは、空ページのサイズを事前にDocumentOptions.EmptyPageWidthとDocumentOptions.EmptyPageHeightに設定し、解像度はDocumentOptions.EmptyPageResolution。に設定します。任意のインデックスに、必要なだけの空ページを追加できます。空のページを使うために、DocumentOptions.PageRestrictionプロパティがDocumentPageRestriction.Relaxedに設定されることを確認します。

詳細については、「PdfDocumentOptions」を参照してください。

サンプル

このサンプルはEMFハンドルを作成して、それから複数ページのPDF文書を作成するために、使います。

Copy Code  
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.Forms.DocumentWriters
Imports Leadtools.Forms.Ocr

      
Public Sub DocumentEmfPageExample()
   ' Output PDF file name
   Dim pdfFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "Example.pdf")
   ' Document properties, each page is 8.5 by 11 inches at 300 DPI. Typical dimensions
   Dim resolution As Integer = 300
   Dim pageWidth As Integer = CInt(8.5 * resolution)
   Dim pageHeight As Integer = CInt(11 * resolution)

   ' Create the document writer
   Dim docWriter As New DocumentWriter()
   docWriter.BeginDocument(pdfFileName, DocumentFormat.Pdf)

   For pageNumber As Integer = 1 To 2
      Dim page As New DocumentEmfPage()
      page.EmfHandle = GetPageEmf(pageNumber, pageWidth, pageHeight, resolution)
      docWriter.AddPage(page)

      If page.EmfHandle <> IntPtr.Zero Then
         DeleteEnhMetaFile(page.EmfHandle)
      End If
   Next

   docWriter.EndDocument()

   ' Show the PDF file
   System.Diagnostics.Process.Start(pdfFileName)
End Sub

Private Shared Function GetPageEmf(pageNumber As Integer, pageWidth As Integer, pageHeight As Integer, resolution As Integer) As IntPtr
   ' Get the screen DC
   Using graphicsScreen As Graphics = Graphics.FromHwndInternal(IntPtr.Zero)
      Dim hdcScreen As IntPtr = graphicsScreen.GetHdc()

      ' Calculate the EMF rectangle in 1/100 mm
      Dim frameRect As New RectangleF( _
         0, _
         0, _
         CType((pageWidth * 2540.0F + resolution / 2.0) / resolution, Single), _
         CType((pageHeight * 2540.0F + resolution / 2.0) / resolution, Single))

      ' Create the EMF, GDI compatible
      Using metaFile As New Metafile(hdcScreen, frameRect, MetafileFrameUnit.GdiCompatible, EmfType.EmfOnly, Nothing)
         ' No need for this anymore
         graphicsScreen.ReleaseHdc(hdcScreen)

         ' Now create the graphics to draw in from the metafile
         Using graphics As Graphics = graphics.FromImage(metaFile)
            ' Get the EMF DPI
            Dim header As MetafileHeader = metaFile.GetMetafileHeader()
            Dim emfDpiX As Single = header.DpiX
            Dim emfDpiY As Single = header.DpiY

            ' We must convert each value we want from pixels to EMF coordinates, so use a scale
            graphics.ScaleTransform(emfDpiX / resolution, emfDpiY / resolution)

            ' To draw font, we must use this scale value to convert from point size
            Dim fontScale As Single = CType(resolution, Single) / Math.Max(graphics.DpiX, graphics.DpiY)

            ' Ready, now we can draw...

            ' Fill it with white
            Dim rc As New RectangleF(0, 0, pageWidth, pageHeight)
            graphics.FillRectangle(Brushes.White, rc)

            ' Put a frame
            rc = New RectangleF(1, 1, pageWidth - 2, pageHeight - 2)
            graphics.DrawRectangle(Pens.DarkGreen, rc.X, rc.Y, rc.Width, rc.Height)

            ' Draw some text
            Dim text As String = "This is page " + pageNumber.ToString()

            Dim pointSize As Single = 20 * fontScale
            ' fonts need to converted to scaled back, so ...
            Using font As New Font("Arial", pointSize, FontStyle.Regular)
               graphics.DrawString(text, font, Brushes.Black, 0, 0)
            End Using

            ' Add some vector objects, red line
            rc = New Rectangle(50, 50, pageWidth - 100, pageHeight - 100)
            graphics.DrawLine(Pens.Red, rc.Left, rc.Top, rc.Right, rc.Bottom)

            ' blue rect somewhere
            rc = New Rectangle(100, 100, 150, 100)
            graphics.FillRectangle(Brushes.Blue, rc)
         End Using

         Return metaFile.GetHenhmetafile()
      End Using
   End Using
End Function

' GDI interop
<DllImport("gdi32.dll")> _
Private Shared Function DeleteEnhMetaFile(hemf As IntPtr) As Integer
End Function
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Forms.DocumentWriters;
using Leadtools.Forms.Ocr;

public void DocumentEmfPageExample()
{
   // Output PDF file name
   var pdfFileName = Path.Combine(LEAD_VARS.ImagesDir, "Example.pdf");
   // Document properties, each page is 8.5 by 11 inches at 300 DPI. Typical dimensions
   var resolution = 300;
   var pageWidth = (int)(8.5 * resolution);
   var pageHeight = (int)(11 * resolution);

   // Create the document writer
   var docWriter = new DocumentWriter();
   docWriter.BeginDocument(pdfFileName, DocumentFormat.Pdf);

   for (var pageNumber = 1; pageNumber <= 2; pageNumber++)
   {
      var page = new DocumentEmfPage();
      page.EmfHandle = GetPageEmf(pageNumber, pageWidth, pageHeight, resolution);
      docWriter.AddPage(page);

      if (page.EmfHandle != IntPtr.Zero)
         DeleteEnhMetaFile(page.EmfHandle);
   }

   docWriter.EndDocument();

   // Show the PDF file
   System.Diagnostics.Process.Start(pdfFileName);
}

private static IntPtr GetPageEmf(int pageNumber, int pageWidth, int pageHeight, int resolution)
{
   // Get the screen DC
   using (var graphicsScreen = Graphics.FromHwndInternal(IntPtr.Zero))
   {
      var hdcScreen = graphicsScreen.GetHdc();

      // Calculate the EMF rectangle in 1/100 mm
      var frameRect = new RectangleF(
         0,
         0,
         ((float)pageWidth * 2540 + resolution / 2) / resolution,
         ((float)pageHeight * 2540 + resolution / 2) / resolution);

      // Create the EMF, GDI compatible
      using (var metaFile = new Metafile(hdcScreen, frameRect, MetafileFrameUnit.GdiCompatible, EmfType.EmfOnly, null))
      {
         // No need for this anymore
         graphicsScreen.ReleaseHdc(hdcScreen);

         // Now create the graphics to draw in from the metafile
         using (var graphics = Graphics.FromImage(metaFile))
         {
            // Get the EMF DPI
            MetafileHeader header = metaFile.GetMetafileHeader();
            var emfDpiX = header.DpiX;
            var emfDpiY = header.DpiY;

            // We must convert each value we want from pixels to EMF coordinates, so use a scale
            graphics.ScaleTransform(emfDpiX / resolution, emfDpiY / resolution);

            // To draw font, we must use this scale value to convert from point size
            var fontScale = (float)resolution / Math.Max(graphics.DpiX, graphics.DpiY);

            // Ready, now we can draw...

            // Fill it with white
            var rc = new RectangleF(0, 0, pageWidth, pageHeight);
            graphics.FillRectangle(Brushes.White, rc);

            // Put a frame
            rc = new RectangleF(1, 1, pageWidth - 2, pageHeight - 2);
            graphics.DrawRectangle(Pens.DarkGreen, rc.X, rc.Y, rc.Width, rc.Height);

            // Draw some text
            var text = "This is page " + pageNumber.ToString();

            float pointSize = 20 * fontScale;
            // fonts need to converted to scaled back, so ...
            using (var font = new Font("Arial", pointSize, FontStyle.Regular))
               graphics.DrawString(text, font, Brushes.Black, 0, 0);

            // Add some vector objects, red line
            rc = new Rectangle(50, 50, pageWidth - 100, pageHeight - 100);
            graphics.DrawLine(Pens.Red, rc.Left, rc.Top, rc.Right, rc.Bottom);

            // blue rect somewhere
            rc = new Rectangle(100, 100, 150, 100);
            graphics.FillRectangle(Brushes.Blue, rc);
         }

         return metaFile.GetHenhmetafile();
      }
   }
}

// GDI interop
[DllImport("gdi32.dll")]
private static extern int DeleteEnhMetaFile(IntPtr hemf);
必要条件

ターゲットプラットホーム

参照

参照

DocumentEmfPageメンバ
Leadtools.Forms.DocumentWriters名前空間
DocumentWriterクラス
DocumentFormat列挙体
LEADTOOLSドキュメントライタでのプログラミング
アプリケーションに含まれるファイル
特殊なLEAD機能のアンロック

Leadtools.Forms.DocumentWritersは、DocumentまたはMedicalツールキットのライセンスと、解除キーが必要です。詳細は、以下を参照してください。Imaging Pro/Document/Medicalの機能