画面座標変換 – 2 –


画面座標変換 – 1 –
昨日の続き座標値も変換出来るのでPDFの図形とかも当然作れる。
ちなみにiTextは72DPIくらいでA4サイズ既定だったはず(用紙はかえれるが)。

pdf_path

72DPI
210 mm = 8.26771654 インチ = 595.27559088 px
297 mm = 11.6929134 インチ = 841.8897648 px
これを縦横に合わせて地図座標側を合わせれば用紙中央とか位置合わせ出来る。

ITextSharpの参照

using iTextSharp.text.pdf;
using iTextSharp.text;
IDisplayTransformation trans = new DisplayTransformationClass();
com.ManageLifetime(trans);

trans.VisibleBounds = env;//pxEnv;
trans.Bounds = env; //pxEnv;
trans.set_DeviceFrame(ref deviceRect);
trans.Resolution = dpi;

ITransform2D t2d = (ITransform2D)feature.Shape;
t2d.Transform(esriTransformDirection.esriTransformForward, trans);

Document doc = new Document();
using (var strm = new System.IO.FileStream(@"c:\Graphics.pdf", FileMode.Create))
{
  PdfWriter writer = PdfWriter.GetInstance(doc, strm);
  doc.Open();
  PdfContentByte cb = writer.DirectContent;

  IGeometryCollection geomCol = (IGeometryCollection)t2d;
  for (int i = 0; i < geomCol.GeometryCount; i++)
  {
    var pCol = (IPointCollection)geomCol.get_Geometry(i);
    for (int pInx = 0; pInx < pCol.PointCount; pInx++)
    {
      var pt = pCol.get_Point(pInx);
      if (pInx == 0)
        cb.MoveTo((float)pt.X, (float)pt.Y);
      else
        cb.LineTo((float)pt.X, (float)pt.Y);

      Debug.Print("{0},{1}", pt.X, pt.Y);
      Console.WriteLine("{0},{1}", pt.X, pt.Y);
    }
    cb.ClosePath();
    cb.Stroke();
  }
  doc.Close();
}//end stream
カテゴリー: 開発 タグ: パーマリンク