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();
        }

 

Free Spire.PDF for .NETSpire.PDF for .NET 的免费版本,无需购买即可用于个人或商业用途。使用该组件,程序员可以 在.NET 程序中创建、读取、写入、编辑和操作 PDF 文档。这个控件能支持的功能十分全面,例如文档安全性设置(电子签名),提取 PDF 文本、附件、图片,PDF 合并和拆分,更新 Metadata,设置 Section,绘制图形、插入图片、表格制作和加工、导入数据等等。除此以外,Spire.PDF 还可以将 TXT 文本、图片、HTML 高质量地转换为 PDF 文件格式。 主要功能如下: 1.高质量的文档转换。Free Spire.PDF for .NET 支持 PDF 到 Word、XPS、SVG、EMF、Text 和图片(EMF、JPG、PNG、BMP、TIFF)的格式转换。也支持从 XML、HTML、RTF、XPS、Text、图片等格式生成 PDF 文档。 2.文档操作及域功能。支持合并、拆分 PDF 文档,在原有的 PDF 文档页添加覆盖页。同时,Spire.PDF 提供导入、邮戳、小册子功能,以及帮助用户从数据库读取数据并填充到域的域填写功能。 3. 安全性设置。用户可以通过设置密码和数字签名来保护 PDF 文档。用户密码和所有者密码可以确定加密的 PDF 文档的可读性、可修改性、是否可打印等有选择性的限制。与此同时,数字签名作为一个更有效的方法,可以应用于维护和对PDF文档进行身份验证。 4.数据提取。支持快速高效地从 PDF 文档提取图片、文本、PDF 分页,以及附件。 5.文件属性设置。支持对 Metadata、文件属性、页面方向、页面大小进行设置。其中文件属性包括文件限制(打印、页面提取、加评论等方面的权限限制)以及文件描述属性(文件名称、作者、主题、关键字等)。使用 Spire.PDF for .NET,用户还可以根据自己阅读喜好设定默认打开页码,分页模式,缩放比例和打印缩放,等等。 6.其他功能。 支持多种语言,支持字体格式、对齐方式设置。 绘制文字,图片,图形。 支持添加图层,透明图像,Color Space,条形码到 PDF。 支持 PDF/A-1b、PDF/x1a:2001 格式。 添加梯状图形和矢量图像到指定位置。 添加并格式化表格。 插入交互元素,例如添加自定义的 Annotation、Action、JavaScript、附件、书签等。
Free Spire.PDFViewer for .NETSpire.PDFViewer for .NET 的免费版本,使用 Free Spire.PDFViewer,程序员可以在 WinForm 程序中加载并查看 PDF 文档。浏览 PDF 时,用户可以自由设置浏览选项,比如:自动适应纸张/自动适应窗口,上一页/下一页,放大/缩小,等等。Free Spire.PDFViewer 支持浏览含多种元素的 PDF,这些元素包括超链接,字体(TrueType, Type 0, Type 1, Type 3, OpenType and CJK font),图形,表格, Device-Dependent Color Spaces, DCT,JPEG2000 等图片格式。 此外,该控件还支持纵向、横向和自动打印文档,支持将 PDF 保存为多种流行的图片格式(.bmp, .png, .jpeg)。作为一款独立的 PDF 查看组件,Free Spire.PDFViewer 的运行不依赖 Adobe Reader 及其他任何第三方软件。 主要功能点: 1.从文件,流,字节数组读取文档 2.加载浏览加密的 PDF 文档 3.设置浏览选项(页面跳转,缩放,自适应页面大小,旋转,单页或多页显示) 4.显示缩略图 5.识别书签目录及跳转到目标位置 6.存取附件到本地硬盘 7.支持多种打印方式:横向,纵向,自动 8.保存为图片(.bmp, .png, .jpeg) 9.支持多种PDF页面元素(超链接,字体,图形,图片,表格) 技术特点: 1.支持 .NET Framework 2.0, 3.0, 3.5, 4.0 2.仅支持 Windows Form 3.支持ASCIIHex, ASCII85, Flate, LZW, Run Length, CCITT Fax, DCT, JPX 解码 4.控件完全由 C# 代码开发 5.独立组件,无需 Adobe Reader 及其他任何第三方软件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踏平扶桑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值