用itextsharp打印pdf示例
学习了用itextsharp输出PDF文档,支持用XML定义文档,可定义多个数据源,简单的表达式,用于项目中效果还不错,其中PdfPageEvent类由包大人提供。
示例程序定义了一个简单的xml文件,如图:

输出的PDF文档,如图:

------------------------华丽的分隔线-----------------------------
定义PDF打印的Xml格式说明
参考示例:合同PDF打印,SettingItem表 /Application/Wxht/PdfSetting
PDF文档结构:
文档包含表格: Document.Add(Table)
表格包含单元格:Table.Add(Cell)
单元格内可以有文本或图片Cell.Add(Text),Cell.Add(Image) , 也可以内嵌表格Cell.Add(Table)
Xml文档结构:
<Document Margin = "10,30,10,100" >
<Document.PageEvent>
定义页眉页脚
</Document.PageEvent>
<table Font.Size="11" HeaderRows = "1" RelativeWidths="{*} - 470,90" >
<tr DataContext =”Default[*]” > 循环显示该行内容
<td Content=”{wxhth}” /> 单元格内显示字段值
<td>
<table> 单元格内嵌套表格 </table>
</td>
</tr>
</table>
<Document.DataSource> 定义数据源
<DataSource Name="Default">
<![CDATA[ SQL语句 ]]>
</DataSource>
</Document.DataSource>
</Document>
节点及属性说明:
大小写敏感, 类似XAML语法
|
Document |
大小写敏感, 是Xml的根节点 |
|
Document.Margin |
页边距, 整型列表, 可以用空格或逗号(,)或坚线(|)分隔, 如 Margin =”10,30,10,100” 表示左边距为10,上边距为30,右边距10,下边距为100 |
|
Document.PageEvent |
用于定义页脚, 可设置一个图片, 通常是签名 |
|
Table |
也可以记作TABLE或table, 用于定义表格, 通常一个文档以一个表格排版 |
|
Table.HeaderRows |
表头行数,该表跨页时, 每页会重复打印此行, 通用于用定义单据抬头部分 |
|
Table.RelativeWidths |
表格分列, 以逗号分隔, 支持简单表达式, {*} 表示父Table的宽度 |
|
Tr |
表格的行, 意义不大, 不会真正分行, 也可以记作tr或TR |
|
Tr.DataContext |
可用于定义数据源, 多行数据源, 循环呈现多行, 如: Default[*], |
|
Td |
表格的单元格, 也可以记作: td或TD |
|
Td.Content |
单元格文本内容, 默认有内边距, 左边齐, 垂直居中, 支持表达式 |
|
Td.ColSpan |
合并3列单元格, 如果满足所属Table的总列数, 自动换行, 真正实现分行 |
|
Td.RowSpan |
合并3行单元格 |
|
Td.HorizontalAlignment |
水平对齐, 属性值可以是 c或Center. |
|
Font.Name |
文本字体大小, 如果未定义, 继承父节点的定义 |
|
Font.Size |
文本字体大小, 如果未定义, 继承父节点的定义 |
|
Font.Style |
如果未定义, 继承父节点的定义, 例如: Bold+UnderLine |
|
Cell.Border |
边框宽度, 如果未定义, 继承父节点的定义。 以左上右下顺序定义, 只能是个位数, 相领单元格同时定义边框会加粗。 1:表示左边框为1, 等同于:1000 1111:表示有边框 0000:表示无边框, 默认无边框 |
|
Cell.Padding |
内边距, 整型列表, 可以用空格或逗号(,)或坚线(|)分隔。 如果未定义, 继承父节点的定义 Padding =”10,30” 表示左内边距为10,上内边距为30,右内边距0,下内边距为0 |
|
Cell.Height |
单元格高度, 默认自动高度 |
|
Cell.Table |
单元内显示子表, 通常用于排版分列 |
|
Cell.Image |
单元格内显示图片 Image.Source 图片绝对路径, 空值不显示图片, 支持表达式 也可以是byte[]类型,format必须是Stream, 如 {mtPic:Stream} Image.Width 图片宽度 |
|
Document.DataSource |
定义数据源, 支持多个数据源 |
|
DataSource.Name |
定义数据源名称, 默认第一个数据源作为 “Default” 数据源 |
表达式语法:
|
{colname} |
取默认数据源的第0行colname列值, 例如: {mdka} |
|
{tablename.colname:format} |
取指定数据源的第0行colname列值, 以fomat格式显示, 列如: {Default.wxdj:#,##0.00#} 以2位或3位小数显示单价 {qyrq:yyyy/MM/dd} 日期以yyyy/MM/dd格式显示 |
|
=expression |
计算表达式, 以等号开始, 例如: Cell.Content=”= 1 + 2” 显示 3 Cell.Content=”=’a’+’b’ “ 单引号会自动替换成双引号, 显示 ab Cell.Content=”=DateTime.Parse('{qyrq:yyyy-MM-dd}').ToString('yyyy/MM/dd')” 日期值转成yyyy-MM-dd格式字符串, 分析字符串, 转换成日期值 最后以 yyyy/MM/dd 格式字符串显示 Image.Source=”=State==’批准’?’c:\pic.jpg’:string.Empty” 批准时显示图片 Image Source="{colPic:Stream}" 显示二进制类型字段的图片 |
|
{=expression} |
通过Table计算表达式, 通常用于统计, 例如: Cell.Content=” {=sum(amt):0.00}” 合计金额 Cell.Content="='$'+{=sum(amt):0.##}" 合计金额 |
|
tablename[*] |
定义行的数据上下文, 例如: Tr.DataContext=”Default[*]” 以默认数据源行重复显示 Tr.DataContext=”Table2[0]” 以Tabe2, 取第0行作为数据源 Tr.DataContext=”Table2[*]” 以Table2 作为数据源, 自动重复显示 |
此程序原用于测试,现上传到CSDN。
用itextsharp打印pdf示例的更多相关文章
- C#使用iTextSharp+ZXing.Net+FreeSpire.PDF生成和打印pdf文档
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.Net+FreeSpire.PDF三个类库实现了生成pdf.生成条形码和打印pdf功能. 首先在项 ...
- 基于iTextSharp的PDF操作(PDF打印,PDF下载)
基于iTextSharp的PDF操作(PDF打印,PDF下载) 准备 1. iTextSharp的简介 iTextSharp是一个移植于java平台的iText项目,被封装成c#的组件来用于C#生成P ...
- ITextSharp导出PDF表格和图片(C#)
文章主要介绍使用ITextSharp导出PDF表格和图片的简单操作说明,以下为ITextSharp.dll下载链接 分享链接:http://pan.baidu.com/s/1nuc6glj 密码:3g ...
- itextsharp生成pdf后的直接打印问题
原文 itextsharp生成pdf后的直接打印问题 小弟这两天用itextsharp生成pdf文档,生成的pdf可以直接保存在指定路径的文件夹下,可是user不想保存,想要点一下button,就可以 ...
- 基于iTextSharp的PDF文档操作
公司是跨境电商,需要和各种物流打交道,需要把东西交给物流,让他们发到世界各地.其中需要物流公司提供一个运单号,来追踪货物到达哪里?! 最近在和DHL物流公司(应该是个大公司)对接,取运单号的方式是调用 ...
- C# 打印PDF文档的10种方法
操作PDF文档时,打印是常见的需求之一.针对不同的打印需求,可分多种情况来进行,如设置静默打印.指定打印页码范围和打印纸张大小.双面打印.黑白打印等等.经过测试,下面将对常见的几种PDF打印需求做一些 ...
- C#使用ITextSharp操作pdf
在.NET中没有很好操作pdf的类库,如果你需要对pdf进行编辑,加密,模板打印等等都可以选择使用ITextSharp来实现. 第一步:可以点击这里下载,新版本的插件升级和之前对比主要做了这几项重大改 ...
- 使用iTextSharp修改PDF文件(一)
这个iTextSharp确实是个好东西,可以创建.读取PDF格式的文档,虽然我的需求比较简单,但我首先还是基本上.完整地看完了它的相关文档,不喜欢英文的同志,可以搜索一篇<用C#制作PDF文件全 ...
- .NET的那些事儿(9)——C# 2.0 中用iTextSharp制作PDF(基础篇) .
该文主要介绍如何借助iTextSharp在C# 2.0中制作PDF文件,本文的架构大致按照iTextSharp的操作文档进行翻译,如果需要查看原文,请点击一下链接:http://itextsharp. ...
随机推荐
- Delphi XE 10 DataSnap TCP 与 HTTP 比较
在网络程序开发过程中,面临TCP HTTP 的选择上往往让人陷入犹豫不决中,http的灵活和较强的穿透能力是TCP无法与之相提并论的,然而在响应速度和处理能力上却能看出后者比前者足够强大的地方.因此 ...
- 文件上传大小js判断
function fileChange(target) { var fileSize = 0; if (isIE && !target.files) { var filePath = ...
- 用markdown简化书写
引言 markdown是什么, 谁在使用markdown, 以及为什么我应该/不应该使用它? 我能从这篇文章中了解到什么, 怎么开始使用? markdown有两个含义: 一套标记语法(类比html,w ...
- Spring Security4.X 简单实例介绍
简介 本例子采用的是SpringMVC.SpringSecurity和Spring整合的简单使用 使用gradle搭建的项目(gradle比maven更加便捷),可以自行了解 web.xml配置 &l ...
- 【leetcode】Minimum Depth of Binary Tree
题目简述: Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along th ...
- Linux下设置Mysql数据库编码
重装系统后,要装个mysql服务器,发现添加数据时,一直错误,查其原因,原来时编码问题.Google了一下,可都不太一样,可能时数据库版本问题吧. 查看数据库版本: select version(); ...
- notepad++快捷键
notepad++现在是我最常用的文本编辑工具,其中使用的列模式编辑,也是很好使用的. 基本的快捷键: Ctrl-C,Ctrl-X,Ctrl-V,Ctrl-Y,Ctrl-A,Ctrl-F,Ctrl-S ...
- spin.js
$ajax提交,菊花加载的方式和位置: $.ajax({ type: "get", url: "http://www.xxx.com/test.html", b ...
- NXP恩智浦P87C51/52/54/58/591芯片解密单片机破解多少钱?
NXP恩智浦P87C51/52/54/58/591芯片解密单片机破解 芯片解密型号: P87C51x2.P87C52x2.P87C54x2.P87C58x2.P87C591 单片机解密 #####[ ...
- 用js把数据从一个页面传到另一个页面
用js把数据从一个页面传到另一个页面的层里? 如果是传到新页面的话,你网站基于什么语言开发直接用get或者post获取,然后输出到这个层 通过url传参 如果是HTML页面的话JS传到新页面就wind ...