iTextSharp 生成pdf Form 实例

使用Adobe acrobat Pro先手工做一个Pdf Form的模板:

1.新建:,选择新建/Pdf form file(Ctrl+N), 可以选择先有的某些类型的文件作为最处的模板,选择一个文件后(例如.txt的),就新建好了.

2.编辑:选择右边的工具栏,选择Content/Edit Document Text/Edit Object或者是Content/Edit Document Text?Edit Document Text可以编辑新  建时导入的静态文本(.txt).

3.添加表单字段:点击右边工具栏 Content/Edit Or Edit Interactive Object/下面的 Button,然后鼠标移动到文档中就可以添加字段,Button 说对应的是图片等多媒体字段. 新建一个Button 类型的字段后,右击新建的字段会出现(Add New Field)选项,里面有很多种Form字段的类型可以选择(Text Field,checkbo,radioButton,Dropdown,ListBox等)。

4.字段位置调整:选择工具 Content/Edit Or Edit Interactive Object/Select Object  可以对当前的Form 字段进行大致位置调整.如果需要对Form字段进行非常准确的放置,可以选择 工具条 Forms/Edit,这里面有对齐的工具尺。

 

程序代码部分:

 1 static void BuildPdfForm()
 2        {
 3            if (File.Exists("form.pdf"))
 4                File.Delete("form.pdf");
 5            FileStream stream = new FileStream("form.pdf", FileMode.Create);
 6            PdfReader reader = new PdfReader("template.pdf");
 7            PdfStamper stamper = new PdfStamper(reader, stream);
 8            AcroFields af = stamper.AcroFields;
 9            af.SetField("Name", "WangWang");
10            af.SetField("Date", "2012-11-11");
11            string imagepath="flower.jpg";
12            if (!string.IsNullOrEmpty(imagepath) && File.Exists(imagepath))
13            {
14                iTextSharp.text.Image gif = iTextSharp.text.Image.GetInstance(imagepath);
15                if (gif != null)
16                {
17                    PushbuttonField bf = af.GetNewPushbuttonFromField("Header");
18                    bf.Image = gif;
19                    af.ReplacePushbuttonField("Header", bf.Field);
20                }
21            }
22            //stamper.FormFlattening=true; 是否将 pdf Form 转为 pdf文档
23            stamper.Close();
24 
25        }

注意:Pdf Form 跟普通直接生成pdf文件的区别在于生成的表单是可以编辑的,保存后,其他人打开页面就是编辑后的内容。就像Name字段,程序写  入的是"WangWang" ,后面三个Add 是我后面添加的。

当然生成的Form pdf 也可以不让他人编辑,只要在field的属性里面选择只读的,这种情况字段的背景颜色是透明的,当前是可编辑的所以有颜色。

即使表单设置为只读,但结果跟普通生成的文档还是有区别:图片,字段等在pdf里面 是可移动的,如果字段里面的内容太长还可以通过拖动内容来查看。如果要将Form 文档只当做Pdf报表的模板来使用,只要设置属性  stamper.FormFlattening=true;  所生成的文档就不是表单了.这种方法对于排版比较麻烦的报表,应该是很用的.

【嵌入新字体】

1.  在目录  C:\Program Files\Adobe\Acrobat 10.0\Resource\Font 添加.otf字体

2. 选择 开始/程序/Adobe Acrobat Distiller X 软件,选择Settings/Edit Adobe PDF Settings 添加字体

3. Form 模板 打开编辑 保存后 相应的字体 就会嵌入到模板里面了。

【通过代码嵌入】

1   BaseFont font = BaseFont.CreateFont(HttpContext.Current.Server.MapPath("~/PDFTemplate/font/ArialMT.otf") , 
2   BaseFont.IDENTITY_H , BaseFont.EMBEDDED);
3 af.SetFieldProperty("FieldName" , "textfont" , font , null);

【嵌入字体的另一种方法(嵌入子集)】

1.点击File->Print->Properties->纸张质量->高级—>TrurType字体: 选择‘下载为软字体’,如图

 【使用form的形式,有个麻烦的东西是对于多行文本的间距设置,说实在的找了很久没找到,不过我们依然有其他办法来实现】

   下面的代码是利用PdfContentByte跟排版(columnText), 将某一段文本定位显示于某个区域内.

 1    private void SetBlockAtPoint(PdfStamper stamper , string content , Font font ,float lineHeihgt=10,int pageNum=1 , int llx=42 , int lly=1 , int urx=525 , int ury=31)
 2         {
 3             PdfContentByte cbc =stamper.GetOverContent(pageNum); 
 4             ColumnText ct = new ColumnText(cbc);
 5             Phrase fieldtext = new Phrase();
 6 
 7             fieldtext.AddSpecial(new Paragraph(lineHeihgt , content , font));
 8             ct.SetSimpleColumn(fieldtext , llx , lly , urx , ury , lineHeihgt , Element.ALIGN_LEFT | Element.ALIGN_TOP);
 9 
10             ct.Go();
11         }
原文地址:https://www.cnblogs.com/AspDotNetMVC/p/2766545.html