C#使用iTextSharp+ZXing.Net+FreeSpire.PDF生成和打印pdf文档
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.Net+FreeSpire.PDF三个类库实现了生成pdf、生成条形码和打印pdf功能。
首先在项目作用使用NuGet获取这三个类库的引用。
其次把C:\Windows\Fonts里面的微软雅黑字体复制到bin\debug\Fonts目录下
以下为实现代码:
using System;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using Newtonsoft.Json;
using iTextSharp.text;
using iTextSharp.text.pdf;
using it = iTextSharp.text;
using System.Drawing.Imaging; //打印确认表
private void Btn_print_Click(object sender, EventArgs e)
{
string path = Application.StartupPath + "\\PDFs";
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
//使用微软雅黑字体,解决中文无法显示,注意msyh.ttc后面的,0是必须的
BaseFont baseFont = BaseFont.CreateFont(Application.StartupPath + "\\Fonts\\msyh.ttc,0", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
it.Font font = new it.Font(baseFont, 14, it.Font.BOLD, it.BaseColor.BLACK);
using (var doc1 = new Document(PageSize.A4, 5, 5, 35, 5))
{
PdfWriter.GetInstance(doc1, new FileStream(path + "\\Doc1.pdf", FileMode.Create));
doc1.Open();
//生成条形码
var bmp = ZXingHelper.GenerateBarcode("12345678900000");
var txm = it.Image.GetInstance(System.Drawing.Image.FromHbitmap(bmp), ImageFormat.Bmp);
//txm.ScalePercent(24f);
txm.ScaleAbsoluteHeight(40);
txm.SetAbsolutePosition(doc1.PageSize.Width - 220, doc1.PageSize.Height - 32);
doc1.Add(txm);//把条形码放到页面右上角 PdfPTable table = new PdfPTable(7); PdfPCell cell = new PdfPCell(new Phrase("X X X X 验 证 意 见 确 认 处 理 记 录 表", font))
{
Colspan = 7,
Border = 0,
MinimumHeight = 30,
HorizontalAlignment = 1
};
table.AddCell(cell); it.Font fontCell = new it.Font(baseFont, 10, it.Font.NORMAL, it.BaseColor.BLACK);
float[] cellWidths = new float[] { 10, 35, 35, 45, 40, 65, 40 };
table.SetWidths(cellWidths); cell = new PdfPCell(new Phrase("县区: XX: XX: XXXX: 日期: 月 日 时间: ", fontCell))
{
Colspan = 7,
Border = 0,
HorizontalAlignment = 0,
MinimumHeight = 15
};
table.AddCell(cell); cell = new PdfPCell(new Phrase("座\r\n号", fontCell))
{
HorizontalAlignment = 1,
VerticalAlignment = 5,
MinimumHeight = 35
};
table.AddCell(cell); cell = new PdfPCell(new Phrase("姓 名", fontCell))
{
HorizontalAlignment = 1,
VerticalAlignment = 5
};
table.AddCell(cell); cell = new PdfPCell(new Phrase("xx号", fontCell))
{
HorizontalAlignment = 1,
VerticalAlignment = 5
};
table.AddCell(cell); cell = new PdfPCell(new Phrase("XX(通过/未通过/未验证)", fontCell))
{
HorizontalAlignment = 1,
VerticalAlignment = 5
};
table.AddCell(cell); cell = new PdfPCell(new Phrase("XXXX(采集/未采集)", fontCell))
{
HorizontalAlignment = 1,
VerticalAlignment = 5
};
table.AddCell(cell); cell = new PdfPCell(new Phrase("验证意见(XX/XX/XXXX/XXXX)", fontCell))
{
HorizontalAlignment = 1,
VerticalAlignment = 5
};
table.AddCell(cell); cell = new PdfPCell(new Phrase("XXXX确认处理情况)", fontCell))
{
HorizontalAlignment = 1,
VerticalAlignment = 5
};
table.AddCell(cell); for (var i = 1; i < 31; i++)
{
table.AddCell(new PdfPCell(new Phrase(i.ToString(), fontCell))
{
HorizontalAlignment = 1,
VerticalAlignment = 5,
MinimumHeight = 17
});
table.AddCell(new PdfPCell(new Phrase("正大·光明龑", fontCell))
{
HorizontalAlignment = 1,
VerticalAlignment = 5
});
table.AddCell(new PdfPCell(new Phrase(" ", fontCell))
{
HorizontalAlignment = 1,
VerticalAlignment = 5
});
table.AddCell(new PdfPCell(new Phrase(" ", fontCell))
{
HorizontalAlignment = 1,
VerticalAlignment = 5
});
table.AddCell(new PdfPCell(new Phrase(" ", fontCell))
{
HorizontalAlignment = 1,
VerticalAlignment = 5
});
table.AddCell(new PdfPCell(new Phrase(" ", fontCell))
{
HorizontalAlignment = 1,
VerticalAlignment = 5
});
table.AddCell(new PdfPCell(new Phrase(" ", fontCell))
{
HorizontalAlignment = 1,
VerticalAlignment = 5
});
} fontCell = new it.Font(baseFont, 12, it.Font.NORMAL, it.BaseColor.BLACK);
cell = new PdfPCell(new Phrase("XXXXX签字: XXXXX丙签字: ", fontCell))
{
Colspan = 7,
Border = 0,
MinimumHeight = 20,
HorizontalAlignment = 0
};
table.AddCell(cell); it.Font fontFooter = new it.Font(baseFont, 10, it.Font.NORMAL, it.BaseColor.BLACK);
PdfPCell cellFooter = new PdfPCell(new Phrase("说明:1.文字描述文字描述文字描述文字描述文字描述文字描述文字描述\r\n2、文字描述文字描述文字描述文字描述文字描述文字描述文字描述文字描述文字描述文字描述;3、文字描述文字描述文字描述文字描述文字描述文字描述文字描述文字描述,存档备查。", fontFooter))
{
Colspan = 7,
Border = 0,
MinimumHeight = 40,
Left = 0,
PaddingLeft = 0,
HorizontalAlignment = 0//0=Left, 1=Centre, 2=Right
};
table.AddCell(cellFooter);
doc1.Add(table);
doc1.Close();
}
if (MessageBox.Show("生成成功,是否打印?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
Spire.Pdf.PdfDocument pdf = new Spire.Pdf.PdfDocument(path + "\\Doc1.pdf");
pdf.Print();
} }
条形码生成的代码
public static IntPtr GenerateBarcode(string barcode)
{
BarcodeWriter writer = new BarcodeWriter();
writer.Format = BarcodeFormat.CODE_128;
writer.Options = new ZXing.Common.EncodingOptions
{
Height = 100,
Width = 200,
PureBarcode = false
}; Bitmap bitmap = writer.Write(barcode);
return bitmap.GetHbitmap();
}
C#使用iTextSharp+ZXing.Net+FreeSpire.PDF生成和打印pdf文档的更多相关文章
- 自动生成并导出word文档
今天很荣幸又破解一现实难题:自动生成并导出word文档 先看页面效果: word效果: 代码: 先搭建struts2项目 创建action,并在struts.xml完成注册 <?xml vers ...
- 无需编译、快速生成 Vue 风格的文档网站
无需编译.快速生成 Vue 风格的文档网站 https://docsify.js.org/#/#coverpage https://github.com/QingWei-Li/docsify/
- 基于DevExpress实现对PDF、Word、Excel文档的预览及操作处理
http://www.cnblogs.com/wuhuacong/p/4175266.html 在一般的管理系统模块里面,越来越多的设计到一些常用文档的上传保存操作,其中如PDF.Word.Excel ...
- 【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档
对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...
- 基于数据库的自动化生成工具,自动生成JavaBean、数据库文档、框架代码等(v5.8.8版)
TableGo v5.8.8版震撼发布,此次版本更新如下: 1.新增两个扩展字段,用于生成自定义模板时使用. 2.自定义模板新增模板目录,可以选择不同分类目录下的模 ...
- SpringBoot入门教程(二十)Swagger2-自动生成RESTful规范API文档
Swagger2 方式,一定会让你有不一样的开发体验:功能丰富 :支持多种注解,自动生成接口文档界面,支持在界面测试API接口功能:及时更新 :开发过程中花一点写注释的时间,就可以及时的更新API文档 ...
- 生成表结构数据库文档sql语句
CREATE PROCEDURE [dbo].[生成表结构数据库文档]ASBEGIN -- SET NOCOUNT ON added to prevent extra result sets from ...
- 用python批量生成简单的xml文档
最近生成训练数据时,给一批无效的背景图片生成对应的xml文档,我用python写了一个简单的批量生成xml文档的demo,遇见了意外的小问题,记录一下. 报错问题为:ImportError: No m ...
- apidoc 生成Restful web Api文档
在服务器项目开发过程中,总会牵扯到接口文档的设计与编写,之前使用的都是office写一个文档,不够直观.下面介绍一种工具生成Apidoc.,该工具是Nodejs的模块,请务必在使用前安装好nodejs ...
随机推荐
- OpenGL中投影矩阵基础知识
投影矩阵元素Projection Matrix 投影矩阵构建: 当f趋向于正无穷时: 一个重要的事实是,当f趋于正无穷时,在剪裁空间中点的z坐标跟w坐标相等.计算方法如下: 经过透视除法后,z坐标变为 ...
- Jenkins部署报weblogic.deploy.api.tools.deployer.DeployerException: Java heap space
Jenkins部署报weblogic.deploy.api.tools.deployer.DeployerException: Java heap space异常 解决办法: 在MAVEN_OPTS中 ...
- BBS(第二天) Django之Admin 自动化管理数据页面 与创建一个用户注册的验证码
1.admin的概念 # Admin是Django自带的一个功能强大的自动化数据管理界面 # 被授权的用户可以直接在Admin中操作数据库 # Django提供了许多针对Admin的定制功能 2. 配 ...
- https://github.com/commonsguy/cw-omnibus.git
https://github.com/commonsguy/cw-omnibus.git
- python中的异常处理常用方法
异常处理 什么是异常? 异常就是与正常情况不同,程序在执行过程中出现错误,导致无法执行完毕.异常其实就是代码执行过程中出错. 常见的一些异常 AttributeError 试图访问一个对象没有的属性, ...
- 1011 A+B 和 C (15 分)
pragma warning(disable:4996) a-c+b>0? 考虑可能越界 在循环体内判断,然后有序号输出 输入输出格式看多个题然后总结下 不会处理单行数据 include < ...
- ELK6.0部署:Elasticsearch+Logstash+Kibana搭建分布式日志平台
一.前言 1.ELK简介 ELK是Elasticsearch+Logstash+Kibana的简称 ElasticSearch是一个基于Lucene的分布式全文搜索引擎,提供 RESTful API进 ...
- VueJs学习笔记
在cmd下,进入目录之后 cd 到项目目录下 1 安装node cnpm install 2 启动或者调试 cnpm start (或是npm run dev) 3 上线: npm run b ...
- Python设计模式 - UML - 组件图(Component Diagram)
简介 组件图又称构建图,用于显示系统各组件及各组件关系的物理视图. 组件图通常包括组件.接口.关系.端口和连接器,用来显示程序代码中相应的模块.源文件或源文件集合之间的依赖和泛化关系. 组件图中的组件 ...
- idea编辑项目出现【Information:java: javacTask: 源发行版 7 需要目标发行版 1.7】
在编译项目时候出现问题: Information:java: javacTask: 源发行版 7 需要目标发行版 1.7 解决方案:按着图片操作,这几个地方设置的一样就可以了