此示例演示如何从头创建XForm对象。您可以将这样的对象视为模板,一旦创建,就可以在PDF文档的任何位置频繁地绘制。
// 创建文档
PdfDocument document = new PdfDocument();
// 创建字体
XFont font = new XFont("Verdana", 16);
// 创建也
PdfPage page = document.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(page);
gfx.DrawString("XPdfForm Sample", font,
XBrushes.DarkGray, 15, 25, XStringFormat.Default);
// 第一步: Create an XForm and draw some graphics on it
//创建具有指定宽度和高度的空XForm对象
//窗体在创建时绑定到其目标文档。原因是
//窗体可以与其目标文档共享字体和其他对象。
XForm form =
new XForm(document, XUnit.FromMillimeter(70), XUnit.FromMillimeter(55));
// 创建用于绘制表单内容的XGRAPHICS对象。
XGraphics formGfx = XGraphics.FromForm(form);
// 绘制一个大的透明矩形以可视化窗体所占的区域
XColor back = XColors.Orange;
back.A = 0.2;
XSolidBrush brush = new XSolidBrush(back);
formGfx.DrawRectangle(brush, -10000, -10000, 20000, 20000);
// On a form you can draw...
// text
formGfx.DrawString("Text, Graphics, Images, and Forms",
new XFont("Verdana", 10, XFontStyle.Regular), XBrushes.Navy, 3, 0,
XStringFormat.TopLeft);
XPen pen = XPens.LightBlue.Clone();
pen.Width = 2.5;
//像B_zier曲线这样的图形
formGfx.DrawBeziers(pen, XPoint.ParsePoints("30,120 80,20, 100,140 175,33.3"));
// 光栅图像,如GIF文件
XGraphicsState state = formGfx.Save();
formGfx.RotateAtTransform(17, new XPoint(30, 30));
formGfx.DrawImage(XImage.FromFile("../../../../XGraphicsLab/images/Test.gif"),
20, 20);
formGfx.Restore(state);
// 以及类似xpdfform对象的窗体
state = formGfx.Save();
formGfx.RotateAtTransform(-8, new XPoint(165, 115));
formGfx.DrawImage(XPdfForm.FromFile("../../../../PDFs/SomeLayout.pdf"),
new XRect(140, 80, 50, 50 * Math.Sqrt(2)));
formGfx.Restore(state);
// 完成表单绘图后,请处置Xgraphic对象。
formGfx.Dispose();
//第二步: 在PDF页面上绘制xpdfform,就像图像一样
// 在文档页面上按原始大小绘制表单
gfx.DrawImage(form, 20, 50);
// 把它拉长
gfx.DrawImage(form, 300, 100, 250, 40);
//绘制并旋转
int d = 25;
for (int idx = 0; idx < 360; idx += d)
{
gfx.DrawImage(form, 300, 480, 200, 200);
gfx.RotateAtTransform(d, new XPoint(300, 480));
}
// 保存
string filename = "XForms.pdf";
document.Save(filename);
// 预览
Process.Start(filename);