众所周知,PDF文件一般情况下是无法修改的,如果你有一张现成的PDF表格,这时想通过编程实现从数据库或者动态生成内容去填写这张表格,就会有些问题了,首先我们要解决以下2个重要的问题:

1.如何将内容写到现有的PDF文件里?
2.如何能将内容准确地填写到指定的表格框里?

我们先来解决第一个问题吧,其实这个问题还是比较好解决的,只需使用一个第三方的插件即可完成,而且是开源免费的,功能很强大,非常适合填写PDF表单的需求,此插件就是 iTextSharp,也许有朋友也已用过了,具体使用方法下面再介绍 

现在第二个问题是比较麻烦的,以前我们想到的笨方法是使用坐标来填写,虽然勉强可达到效果,但大家也知道这种做法是非常痛苦的,而且效果很不好,很难可以精确对齐到某个位置去填写内容的。

在此我介绍大家一个不错的方法,先说说整体思路吧。试想想,如果我们可以将PDF里的表格框当作是HTML里的字段(field)来获取和填写,这样不就可以完美解决以上问题了?通过 iTextSharp 是可以为PDF里的字段域进行填充的,但要如何为PDF添加相应的字段呢?如果使用专业的Adobe PDF软件是可以完成此操作的,但问题是这些专业软件都不是免费的,而合价格还不低,当然对于一般开发者来说不太值得使用啦!

这里推荐一个功能超强的在线PDF处理网站,之所以说其超强,是因为不单可直接在线创建PDF,填写内容,而且还可以任意地方添加PDF字段域,并为字段设置ID名称等,同时这些字段还支丰富控件域,如:TextBox,RadioButton,CheckBox,DorpDown,ListBox 等,就像HTML里的一样,这些已可以满足所有PDF字段的需求了!

OK,现在就看看其如何强大吧,首先登录 http://www.PDFescape.com,如果你第一次使用,就先注册一个账号,步骤很简单,只要输入email和密码就可以了。登录进去后会看到几个选项,是上传一张现有的PDF还是创建新的文件,在此我就直接创建新文件以做测试吧:

使用此网站,可以非常方便地创建PDF文件内容,在左上角有很多控件可以使用,大家可自己试试,以下是我创建的内容:

其中绿色的就是添加的字段,使用左上角的控件工具可以直接添加多种控制,以下是添加控件时的对话框:

不同的控件还可以设置其相关属性,只需鼠标右击此控件即可:

如果要添加单选框分组,就必须将这些单选框控件设置为一样的名称,这样就自动成为一组,每次点击只会选择到一个了:

当然你还可以选择不同的样式哦,这个就大家自己尝试好了,呵呵  。另外请注意在上面控件属性设置里,有一项 Export Value,这个就是此控件的默认值,之后我们在程序里获取判断就要根据这个值了,在此你可以任意设置的。

OK,现在已完成了PDF文件的制作,以下是最终成品,里面的单选和下划线全部可在左边工具栏里生成的:

这时再点击左边下载并保存的按钮,就是一样绿色的里面有箭头的,在保存按钮下面,这时就可生成一个完整的PDF文件,大家再看看此文件的效果吧:

看到了吧,之前添加的字段现在已可以直接在PDF里填写了,而且也可以保存填写后的内容哦,现在接下来的事情就好办了吧 :tongue:

有了字段的PDF文件,我们只需将此文件做为一个模板,再从数据库里获取数据对其填写就可以了,就像填写一张普通的HTML表单一样简单哦!现在就使用 iTextSharp 进行相关的操作吧:

 

//获取PDF模板文件
string templateFile = Path.Combine(Server.MapPath(@"~\pdftemplate\"), "coderblog.pdf");
//输出生成的PDF文件
string tempPDF = Path.Combine(Server.MapPath(@"~\output\"), Guid.NewGuid().ToString() + ".pdf"); //创建 PdfReader
PdfReader reader = new PdfReader(templateFile);
FileStream fFileStream = new FileStream(tempPDF, FileMode.Create); //进行PDF字段操作
PdfStamper stamper = new PdfStamper(reader, fFileStream);
AcroFields coderBlogForm = stamper.AcroFields;
//填充PDF里的字段内容
coderBlogForm.SetField("URL", "http://www.coderblog.in");
coderBlogForm.SetField("Name", "代码部落");
coderBlogForm.SetField("Option", "Yes");

经过以上处理后,在你网站根目录的output目录下,就会生成一个填充好表单内容的PDF文件了。使用此方法可以很方便地解决PDF表单填写的问题 

最后给出 iTextSharp 的下载地址:

http://sourceforge.net/projects/iTextSharp/

c#程序为PDF文件填写表单内容的更多相关文章

  1. c#使用itextsharp输出pdf(动态填充表单内容,显示中文)

    相关链接: iText的简单应用-字体 c#程序为PDF文件填写表单内容 示例代码: static void Main(string[] args) { BaseFont font = BaseFon ...

  2. Ext.Form 自动填写表单内容

    前台: 表单必须含有name属性 if (action == 'edit' || action == 'show') { MyForm1.getForm().load({ url: '/data/cu ...

  3. php 文件和表单内容一起上传

    <?php $filename = $_POST['filename']; $explain = $_POST['explain']; $upfile = $_FILES['upfile']; ...

  4. 为什么上传文件的表单里要加个属性enctype

    为什么上传文件的表单里要加个属性enctype 上传文件的表单中<form>要加属性enctype="multipart/form-data",很多人只是死记硬背知道上 ...

  5. 解决iphone填写表单时,表单项获取焦点时往下拉屏,导致顶部标题栏下滑错位

    $(function () { //解决iphone填写表单时,表单项获取焦点时往下拉屏,导致顶部标题栏下滑错位 var u = navigator.userAgent; var isiOS = !! ...

  6. javascript自动填写表单小技巧

    javascript自动填写表单小技巧 在平时开发过程中,或者在访问某些站点,经常要频繁地填写一大堆表单时,我们可以利用javascript,写一段脚本,预先把要填的信息准备好,然后模拟点击按钮的动作 ...

  7. Django--post提交表单内容

    本节目标:①.提交表单内容②.通过客户端提交表单新增一篇文章③.通过Django的forms组件来完成新增一篇文章 =======提交表单内容======== 1.前端html:login.html ...

  8. 分页功能实现之通过ajax实现表单内容刷新

    拿代码来说话 我们的需求就是点击翻页功能,实现表格内容局部刷新且能够翻到对应的页面上,不明白? 那么就看看下面的图,需要达到的效果如下所示: 现在要实现的功能就是把红线框起来的表单内容 在点击翻页的时 ...

  9. HTTP上下文表单内容转为实体对象

    using ServiceStack.Web; using System; using System.Collections.Generic; using System.Linq; using Sys ...

随机推荐

  1. DataSet与DataAdapter的关系

    DataSet 作用:DataSet,DataAdapter读取数据. 问:什么是DataAdapter?答:DataAdapter对象在DataSet与数据之间起桥梁作用 string strCon ...

  2. JAVA采用JDBC连接操作数据库详解

    JDBC连接数据库概述 一.JDBC基础知识 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供 ...

  3. hdu Repositoryti

    算法:字典树 题意:给你一些字符串,然后会有一些询问,输出询问在给定的字符串中出现了多少次(字串也是): 例如 add,子串有:a ,d,d,ad ,dd,add:你会发现子串d出现了两次,那么怎么办 ...

  4. js页面加载进度条

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. Front end workflow

    标签:请叫我红领巾 记一哈记一哈 ^_^ 推荐个不错的群 自己刚开始折腾的时候也是无处下手,渺茫啊.然而我是有一个很好的前端群(真的很棒,欢迎加入:[375042952]),关注群里的每一次讨论,每一 ...

  6. windows下配置lamp环境(1)---安装Apache服务器2.2.25

    window下lamp成为wamp; 安装wamp环境的第一步是安装Apache服务器.下面开始安装步骤图文并茂. 一.双击安装包点“next”进行下一步,然后同意协议(这张图没有截):

  7. NFine常见错误

    1.新增数据录入录入不进去提示:An error occurred while updating the entries.See the inner exception for details. 这样 ...

  8. position 为absolute时/float 为right,span为block

    元素分为内联元素和区块元素两类(当然也有其它的),在内联元素中有个非常重要的常识,即内两元素是不可以设置区块元素所具有的样式,例如:width | height.relative : 原来是什么类型的 ...

  9. The end of other

    The end of other For language training our Robots want to learn about suffixes. In this task, you ar ...

  10. makefile例子《一》

    一.例子 (1)makefile和src源文件不在同一目录下 (2)把.o生成到指定目录下 文件结构目录 ----inc      //放头文件 ----lib //放所需要的.a或者.so文件 -- ...