C#实战:基于ItextSharp技术标签生成小工具

简介: 今天给大家分享小编基于ItextSharp制作的一款标签生成小工具,可供大家学习或者二次开发满足实际的需求使用。使用技术:C\#+ItextSharp+Winfrom+Net4.0

image_75d6bbd9.png

今天给大家分享小编基于ItextSharp制作的一款标签生成小工具,可供大家学习或者二次开发满足实际的需求使用。

使用技术:C\#+ItextSharp+Winfrom+Net4.0

1、运行主界面

运行主界面根据窗体输入相应的内容,点击生成pdf按钮会生成对应的pdf文件。

image_bf32bf15.png

2、标签生成界面

生成的标签pdf文件效果,直接运行

3、需要引入的依赖包

开发的时候需要导入以下两个包

iTextSharp 版本为5.5.13.13

QRCoder 版本为1.4.3

image_23b25895.png

4、解决方案目录

image_1c18c0bf.png

5、主要代码

1、新建PdfUtils工具类

class PdfUtils
    {
       
         
         
        const string ITextExamplesFolder = "iTextExamples";
        const string ResourcesFolder = "resources";


        public static string Author => "haogm";


        public static string GetBaseDir()        {
       
         
         
          
            return Environment.CurrentDirectory; 
        }    
        /// <summary>
        /// 创建列 插入文本内容
        /// </summary>
        /// <param name="table"></param>
        /// <param name="content"></param>
        /// <param name="font"></param>
        /// <param name="minimumHeight"></param>
        /// <param name="colspan"></param>
        /// <param name="rowspan"></param>
        public static void CreateCell(PdfPTable table, string content, Font font, int minimumHeight = 20, int colspan = 0, int rowspan = 0)
        {
       
         
         
            var cell = new PdfPCell(new Phrase(content, font));
            cell.UseAscender = true;// 设置可以居中
            cell.MinimumHeight = minimumHeight;// 设置单元格高度
            cell.HorizontalAlignment = PdfPCell.ALIGN_CENTER;// 设置水平居中
            cell.VerticalAlignment = PdfPCell.ALIGN_MIDDLE;// 设置垂直居中
            if (rowspan != 0)
            {
       
         
         
                cell.Rowspan = rowspan; //行合并
            }
            if (colspan != 0)
            {
       
         
         
                cell.Colspan = colspan; //列合并
            }
            table.AddCell(cell);
        }
        /// <summary>
        /// 创建列 插入图片
        /// </summary>
        /// <param name="table"></param>
        /// <param name="image"></param>
        /// <param name="minimumHeight"></param>
        /// <param name="colspan"></param>
        /// <param name="rowspan"></param>
        public static void CreateCell(PdfPTable table, Image image, int minimumHeight = 3, int colspan = 0, int rowspan = 0)
        {
       
         
                    
            var cell = new PdfPCell(image,true);// 是否填充
            cell.Padding = 5.5f; // 设置二维码在单元格中的边距
            cell.UseAscender = true;// 设置可以居中
            cell.MinimumHeight = minimumHeight;// 设置单元格高度
            cell.HorizontalAlignment = Element.ALIGN_CENTER;// 设置水平居中
            cell.VerticalAlignment = Element.ALIGN_MIDDLE;// 设置垂直居中
            if (rowspan != 0)
            {
       
         
         
                cell.Rowspan = rowspan; //行合并
            }
            if (colspan != 0)
            {
       
         
         
                cell.Colspan = colspan; //列合并
            }
            table.AddCell(cell);
        }    


        //生成二维码的路径
        public static string GetQRFileName()
        {
       
         
         
            return Path.Combine(GetOutputFolder(), $"Qr.jpg");
        }   


        public static string GetOutputFolder()
        {
       
         
         
            var dir = Path.Combine(GetBaseDir(), "bin", "out");
            if (!Directory.Exists(dir))
            {
       
         
         
                Directory.CreateDirectory(dir);
            }
            return dir;
        }


    
        public static string GetOutputFolderPdf()
        {
       
         
         
            var dir = Path.Combine(GetBaseDir(), "bin", "outpdf\\");
            if (!Directory.Exists(dir))
            {
       
         
         
                Directory.CreateDirectory(dir);
            }
            return dir;
        }


        /// <summary>
        /// 验证pdf文件
        /// </summary>
        /// <param name="file"></param>
        public static void VerifyPdfFileIsReadable(byte[] file)
        {
       
         
         
            PdfReader reader = null;
            try
            {
       
         
         
                reader = new PdfReader(file);
                var author = reader.Info["Author"] as string;
                if (string.IsNullOrWhiteSpace(author) || !author.Equals(Author))
                {
       
         
         
                    throw new InvalidPdfException("This is not a valid PDF file.");
                }
            }
            finally
            {
       
         
         
                reader?.Close();
            }
        }


        public static void VerifyPdfFileIsReadable(string filePath)
        {
       
         
         
            VerifyPdfFileIsReadable(File.ReadAllBytes(filePath));
        }


    }

2、Form1.cs 窗体主要代码

/// <summary>
        /// 导出生成标签
        /// </summary>
        /// <returns></returns>
        public bool ExportReceipt()
        {
       
         
         
            try
            {
       
         
         


                // 生成二维码的内容
                string strCode = "";
                StringBuilder sb = new StringBuilder();
                sb.Append(txtName.Text);
                sb.Append("$");
                sb.Append(txtName.Text);
                sb.Append("$");
                sb.Append(txtAge.Text);
                sb.Append("$");
                sb.Append(txtAddress.Text);
                sb.Append("$");
                sb.Append(txtNation.Text);
                sb.Append("$$");
                sb.Append(txtQQ.Text);
                sb.Append("$");
                strCode = sb.ToString();
                QRCodeGenerator qrGenerator = new QRCoder.QRCodeGenerator();
                QRCodeData qrCodeData = qrGenerator.CreateQrCode(strCode, QRCodeGenerator.ECCLevel.Q);
                QRCode qrcode = new QRCode(qrCodeData);


                // GetGraphic 第一个参数设置图形的大小
                Bitmap qrCodeImage = qrcode.GetGraphic(3, Color.Black, Color.White, null, 15, 1, false);


                MemoryStream ms = new MemoryStream();
                qrCodeImage.Save(ms, ImageFormat.Jpeg);


                // 保存图片 
                var ImgPath = PdfUtils.GetQRFileName();
                qrCodeImage.Save(ImgPath);


                // 保存pdf文件
                var pdfFilePath = PdfUtils.GetOutputFolderPdf() + DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf";
                if (File.Exists(Path.GetFullPath(pdfFilePath)))
                {
       
         
         
                    File.Delete(Path.GetFullPath(pdfFilePath));
                }
                var fileStream = new FileStream(pdfFilePath, FileMode.Create);
                //var pdfDoc = new Document(PageSize.A4);
                var pdfDoc = new Document(new iTextSharp.text.Rectangle(226.4f, 169.8f)); // 80*60 mm
                var pdfWriter = PdfWriter.GetInstance(pdfDoc, fileStream);
                pdfDoc.SetMargins(0.2f, 0.2f, 3.2f, 0.2f);
                pdfDoc.AddAuthor(PdfUtils.Author);
                pdfDoc.Open();


                // 中文字体,解决中文不能显示问题
                BaseFont bfChinese = BaseFont.CreateFont("C:\\WINDOWS\\FONTS\\SIMSUN.TTC,0", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
                // 五号
                iTextSharp.text.Font fiveFont = new iTextSharp.text.Font(bfChinese, 8f);   // 五号 10.5f 小三号 15     
                iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(ImgPath);
                // 新建表格 3列.
                PdfPTable table0 = new PdfPTable(3)
                {
       
         
         
                    WidthPercentage = 98,// 宽度100%填充,
                };
                table0.DefaultCell.VerticalAlignment = Element.ALIGN_CENTER;


                // 设置列宽
                float[] columnWidths0 = { 0.4f, 0.8f, 0.8f };
                table0.SetWidths(columnWidths0);
                //正文第1行
                PdfUtils.CreateCell(table0, "姓名", fiveFont);                
                PdfUtils.CreateCell(table0, txtName.Text, fiveFont);
                PdfUtils.CreateCell(table0, image, 30, 0, 5);
                PdfUtils.CreateCell(table0, "学历", fiveFont);               
                PdfUtils.CreateCell(table0, txtEducation.Text, fiveFont);         


                
                PdfUtils.CreateCell(table0, "年龄", fiveFont);
                PdfUtils.CreateCell(table0, txtAge.Text, fiveFont);


                PdfUtils.CreateCell(table0, "地址", fiveFont);
                PdfUtils.CreateCell(table0, txtAddress.Text, fiveFont);


                PdfUtils.CreateCell(table0, "民族", fiveFont);
                PdfUtils.CreateCell(table0, txtNation.Text, fiveFont);


                PdfUtils.CreateCell(table0, "QQ号", fiveFont);
                PdfUtils.CreateCell(table0, txtQQ.Text, fiveFont,0,2);
                pdfDoc.Add(table0);
                pdfDoc.Close();
                fileStream.Dispose();


                PdfUtils.VerifyPdfFileIsReadable(pdfFilePath);
                //直接打开pdf文件


                System.Diagnostics.Process.Start(pdfFilePath); 
                return true;
            }
            catch (Exception ex)
            {
       
         
         
                return false;
            }
        }

代码地址:https://gitee.com/hgm1989/itext-sharp-demo

相关文章
|
4月前
|
数据采集 JavaScript C#
C#图像爬虫实战:从Walmart网站下载图片
C#图像爬虫实战:从Walmart网站下载图片
|
6天前
|
开发框架 搜索推荐 算法
一个包含了 50+ C#/.NET编程技巧实战练习教程
一个包含了 50+ C#/.NET编程技巧实战练习教程
54 18
|
4天前
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
|
4天前
|
开发框架 Cloud Native .NET
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
|
6天前
|
程序员 C# 数据库
C# 比较对象新思路,利用反射技术打造更灵活的比较工具
中途接手的项目,碰到需要在更新对象信息时比较并记录差异的需求,最变态的还有附加要求,怎么办?有没有既能满足需求又能对项目影响最小的方法呢?分享这个我封装的方法,一个利用反射技术打造的更灵活的比较工具
|
2月前
|
人工智能 开发框架 前端开发
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
|
2月前
|
人工智能 开发框架 安全
C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)
C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)
|
4月前
|
SQL API 定位技术
基于C#使用winform技术的游戏平台的实现【C#课程设计】
本文介绍了基于C#使用WinForms技术开发的游戏平台项目,包括项目结构、运行截图、实现功能、部分代码说明、数据库设计和完整代码资源。项目涵盖了登录注册、个人信息修改、游戏商城列表查看、游戏管理、用户信息管理、数据分析等功能。代码示例包括ListView和ImageList的使用、图片上传、图表插件使用和SQL工具类封装,以及高德地图天气API的调用。
基于C#使用winform技术的游戏平台的实现【C#课程设计】
|
3月前
|
人工智能 开发框架 C#
C#/.NET/.NET Core技术前沿周刊 | 第 6 期(2024年9.16-9.22)
C#/.NET/.NET Core技术前沿周刊 | 第 6 期(2024年9.16-9.22)
|
3月前
|
人工智能 开发框架 Cloud Native
C#/.NET/.NET Core技术前沿周刊 | 第 9 期(2024年10.07-10.13)
C#/.NET/.NET Core技术前沿周刊 | 第 9 期(2024年10.07-10.13)