众所周知,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. unity 之2D游戏简单操作

    unity 做2D项目也很方便.  首先要调整camera的模式,camera 的检视面板参数如下: perspective 模式就是平时用的 模式.摄像机到游戏物体是有角度的张开, 而 orthog ...

  2. Linux-统一事件源

    概念: 信号时一种异步事件:信号处理函数和程序的主循环式两条不同的执行路线,信号处理函数需要尽可能快地执行完毕,以确保该信号不被屏蔽.(为了避免一些竞态条件,信号在处理期间,系统不会再次出发它)太久. ...

  3. Js与flash交互:在html页面中用js与MyReport插件交互

    Html页面与flash的加载 如下图,flash是html页面的一个插件节点. js与flash进行交互,首先要处理好html页面和swf的加载问题. Swf调用外部js方法,要确保js方法已存在, ...

  4. 用U盘烧写Uboot.bin到Nor Flash

    1.在开发板上面插上U盘 2.打到 NAND flash模式启动U-boot,输入以下命令打开usb设备. [u-boot@SMDK2440A]# usb reset //以重启的方式 或者用 [u- ...

  5. 数据画图 jpgraph & chart.js

    今天想到要研究下“用图表的形式来呈现数据”这个主题.对比了下两种实现的方法: 方法一:通过php代码在服务器端生成图像,再将图像传回客户端.使用jpGraph类库. 方法二:通过js和html5技术, ...

  6. JavaScript可否多线程? 深入理解JavaScript定时机制(转载)

    说明:最近写 js 时需要用setinterval函数做定时操作,谁知道,刚开始后运行完好,但一段时间后他就抽风了,定时任务运行的时间间隔越来越短,频率加快,这是一个完全不能容忍的问题,带着一个可以出 ...

  7. windows安装composer方法和使用方法

    最近在学习yii2的框架的相关知识,对于yii2的许多新特性,最好还是去查看官网文档最好,如果有中文翻译的网站就更好了. 学习yii2的第一个门槛就是得安装composer这个依赖管理工具(但目前我认 ...

  8. 剖析C语言中a=a+++++a的无聊问题

    同僚们闲聊,突然就聊到了a+++++a的问题.这种纯属C语言 “二” 级的问题应该是从a+++a引申出来的吧.于是乎兄弟姐妹们开始讨论它的运算结果,以及改如何理解.更有人写出(a++)+(++a) a ...

  9. SEO教程:向百度要流量 第一季

    首先祝贺你:当你看到这篇文章时,你已经站在一条通往SEO达人捷径的路口. 笔者也是今年年初才成为SEOer的一员,在做SEO的过程中,有不少自己独特的心得体会,所以一直酝酿着写一个SEO系列的文章,将 ...

  10. Dynamics CRM 2013 初体验(2):UI

    Dynamics CRM 2013 系统的UI与2011相比改动是巨大的:传统的导航栏被去掉了,取代它的是win8风格的小磁铁:Ribbon风格的工具栏也被去掉啦,它的风格将回滚至4.0时代:新系统添 ...