ITextSharpでPDF作成


ArcGISの吐くPDFの仕様が気に食わない場合は自分で作成

ちなみにArcの吐くPDFに追加するとレイヤ情報が飛ぶ(扱い方が違う)
PdfLayerをイメージに与えない場合はレイヤ情報が飛ばないが、後付けのイメージは
表示非表示切り替え不可
PdfLayerを使う場合は一画像ずつ自分で作る必要あり。

72dpiベースの計算だった気がする。

以下コード  ※using iTextSharp.text.pdf;

using (Stream inputPdfStream = new FileStream(@"c:test.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
using (Stream inputImageStream = new FileStream(@"c:\test.png", FileMode.Open, FileAccess.Read, FileShare.Read))
using (Stream outputPdfStream = new FileStream(@"c:result.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
{
    PdfReader reader = new PdfReader(inputPdfStream);
    PdfStamper stamper = new PdfStamper(reader, outputPdfStream);
    PdfContentByte pdfContentByte = stamper.GetOverContent(1);

    PdfLayer layer = new PdfLayer("Other", stamper.Writer);

    iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(inputImageStream);
    image.SetAbsolutePosition(100, 100);
    image.Layer = layer;

    pdfContentByte.AddImage(image);
    stamper.Close();
}

新規の場合のイメージ追加方法

iTextSharp.text.Rectangle pageSize = new iTextSharp.text.Rectangle(100, 100);
iTextSharp.text.Document doc = new iTextSharp.text.Document(pageSize);

PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(@"c:test2.pdf", FileMode.Create));
doc.Open();

using (FileStream fs = new FileStream(@"c:\test.png", FileMode.Open))
using (Image dNetImg = Image.FromStream(fs))
{
    iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(dNetImg, System.Drawing.Imaging.ImageFormat.Png);

    PdfLayer layer = new PdfLayer("Other", writer);
    img.SetAbsolutePosition(doc.PageSize.Width / 2, doc.PageSize.Height / 2);
    img.Layer = layer;

    doc.Add(img);

    img.SetAbsolutePosition(doc.PageSize.Width / 2 + 5, doc.PageSize.Height / 2 + 5);
    doc.Add(img);
}
doc.Close();
カテゴリー: 開発 パーマリンク