2007年7月20日 星期五

使用 iTextSharp 做PDF套版

iTextSharp 是一套讓.Net可以處理PDF 的 library,它是從java 版的 iText衍生過來的,官方網站在http://itextsharp.sourceforge.net/ , 下面的範例示範如何讀取當範本的PDF,然後在上面加上中文字及Barcode39 。

值得注意的是 PDF 的座標系統跟螢幕是不一樣的,PDF 是從左下開始算,而螢幕是從左上開始算,只是我目前還不曉得 SetTextMatrix(x,y) 這個Method其中的x,y單位是什麼,另外範例中的這個 PDF範本,有一個很奇怪的地方,它的座標原點並不是在左下角,而是在文件中間?????

using System;
using System.IO;
using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.pdf;
namespace PDF1
{

/// <summary>
/// Class1 的摘要描述。
/// </summary>
class Class1
{
/// <summary>
/// 應用程式的主進入點。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此加入啟動應用程式的程式碼
//
PdfReader reader = new PdfReader("c:\\960621officer_fee.pdf");
int n = reader.NumberOfPages;
PdfStamper stamp = new PdfStamper(reader, new FileStream("c:\\sample2.pdf", FileMode.OpenOrCreate));

PdfContentByte over;
BaseFont bfChinese = BaseFont.CreateFont("C:\\windows\\fonts\\KAIU.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

over = stamp.GetOverContent(1);
over.BeginText();
over.SetFontAndSize(bfChinese, 18);
over.SetTextMatrix(-325, -340);
over.ShowText("ˇ");

over.SetFontAndSize(bfChinese, 26);
over.SetTextMatrix(-210, 145);
over.ShowText("游 錫 堃");

over.SetFontAndSize(bfChinese, 18);
over.SetTextMatrix(33, 148);
over.ShowText("A 1 2 0 4 3 5 X X X");
over.EndText();

Barcode39 barcode = new Barcode39();
barcode.Code = "0123456789";
barcode.PlaceBarcode(over,Color.BLACK,Color.BLUE);

// over.SetLineWidth(1f);
// over.SetColorStroke(Color.ORANGE);
// over.MoveTo(-320,-335);
// over.LineTo(-300, -335);
// over.Stroke();

stamp.Close();

}
}
}


沒有留言: