C# DataTable导出PDF,解决引入中文字体失败的问题

简介: C# DataTable导出PDF,解决引入中文字体失败的问题

 不引入中文字体,导出的pdf文件中的中文不会正常显示,网上的引入中文字体的方式很多都直接读取本地文件“C:\Windows\Fonts”,这样写死了很容易出错。

 解决方法是把字体文件放到项目中的Properties.Resources下,资源文件都放在指定目录也符合良好编程习惯。


 右击Properties,点击“新建项”,添加资源文件

  选择上传“其他”类型的资源,点击“添加资源”上传字体文件。

  会在项目中自动创建Resources文件夹,从里面找到添加的字体文件,右击编辑属性,选择“始终复制”。

  这样项目运行后字体文件就会出现在项目运行目录bin/Debug/Resources中

  然后通过Directory.GetCurrentDirectory()方法获取应用程序的当前工作目录,后面再拼接上字体的目录。

  代码如下:

        /// <summary>
        /// 导出Pdf
        /// </summary>
        /// <param name="localFilePath">文件保存路径</param>
        /// <param name="dtSource">数据源</param>
        private void ExportPDF(string localFilePath, DataTable dtSource)
        {
            string path = Directory.GetCurrentDirectory();//获取应用程序的当前工作目录
            BaseFont bf = BaseFont.CreateFont(path+ "\\Resources\\STSONG.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//添加中文字体
            Font font = new Font(bf);
            iTextSharp.text.Document pdf = new iTextSharp.text.Document(PageSize.A4.Rotate());
            PdfPTable table = new PdfPTable(dtSource.Columns.Count);
            table.HorizontalAlignment = Element.ALIGN_CENTER;
            PdfPCell cell;
            for (int i = 0; i < dtSource.Rows.Count + 1; i++)
            {
                for (int j = 0; j < dtSource.Columns.Count; j++)
                {
                    if (i == 0)
                    {
                        cell = new PdfPCell(new Phrase(dtSource.Columns[j].ColumnName, font));
                    }
                    else
                    {
                        cell = new PdfPCell(new Phrase(dtSource.Rows[i - 1][j].ToString(), font));
                    }
                    table.AddCell(cell);
                }
            }
            using (FileStream fs = new FileStream(localFilePath, FileMode.Create, FileAccess.Write))
            {
                PdfWriter.GetInstance(pdf, fs);
                pdf.Open();
                pdf.Add(table);
                pdf.Close();
            }
        }

对外的方法:

        /// 导出文档
        /// </summary>
        /// <param name="path">文件保存路径</param>
        /// <param name="dtSource">数据源</param>
        /// /// <param name="FileName">默认文件名称</param>
        public void Export(DataTable dtSource,string FileName)
        {
            try {
                SaveFileDialog fileDialog = new SaveFileDialog();
                fileDialog.Filter = "Excel|*.xls|TXT|*.txt|PDF|*.pdf";
                fileDialog.FileName = FileName+"-"+DateTime.Now.ToString("D");
                if (fileDialog.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)
                {
                    return;
                }
                string FileSavePath = fileDialog.FileName;
                switch (fileDialog.FilterIndex)
                {
                    case 1:
                        ExportXls(FileSavePath, dtSource); //导出xls
                        break;
                    case 2:
                        ExportTxt(FileSavePath, dtSource); //导出txt
                        break;
                    case 3:
                        ExportPDF(FileSavePath, dtSource); //导出pdf
                        break;
                    case 4:
                        ExportDocx(FileSavePath, dtSource); //导出docx
                        break;
                }
                MessageBox.Show("文件 "+ FileSavePath + " 导出成功");
            }
            catch(Exception e){
                MessageBox.Show("导出文件失败,请稍后重新尝试"+ e);
            }
        }

需要其他几种导出方法可在评论区回复。


相关文章
|
6月前
|
C#
C# DataTable不能通过已删除的行访问该行的信息
C# DataTable不能通过已删除的行访问该行的信息
|
6月前
|
人工智能 缓存 Linux
Confluence PDF导出中文支持
Confluence PDF导出中文支持
|
21天前
|
前端开发 API
前端界面生成PDF并导出下载
【10月更文挑战第21天】利用合适的第三方库,你可以在前端轻松实现界面生成 PDF 并导出下载的功能,为用户提供更方便的文档分享和保存方式。你还可以根据具体的需求进一步优化和定制生成的 PDF 文件,以满足不同的业务场景要求。
|
2月前
|
SQL C# 数据库
EPPlus库的安装和使用 C# 中 Excel的导入和导出
本文介绍了如何使用EPPlus库在C#中实现Excel的导入和导出功能。首先,通过NuGet包管理器安装EPPlus库,然后提供了将DataGridView数据导出到Excel的步骤和代码示例,包括将DataGridView转换为DataTable和使用EPPlus将DataTable导出为Excel文件。接着,介绍了如何将Excel数据导入到数据库中,包括读取Excel文件、解析数据、执行SQL插入操作。
EPPlus库的安装和使用 C# 中 Excel的导入和导出
|
1月前
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
410 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
1月前
|
资源调度 前端开发 JavaScript
安利一款基于canvas/svg的富文本编辑器-支持在线导出PDF、DOCX
高性能:利用Canvas和SVG进行图形和矢量图形的渲染,提供高性能的绘图能力。 可扩展性:Canvas-Editor是一个开源项目,支持通过插件机制扩展编辑器的功能,如DOCX、PDF导出、表格分页等。 丰富的文本编辑功能:支持多种文本编辑操作,如插入表格、分页、性能优化等。
147 0
|
2月前
|
JavaScript
vue导出pdf(接口)
vue导出pdf(接口)
24 3
|
3月前
|
JavaScript 前端开发
vue导出pdf(大数量可能有问题)
vue导出pdf(大数量可能有问题)
165 2
|
3月前
|
开发框架 前端开发 JavaScript
在Winform分页控件中集成导出PDF文档的功能
在Winform分页控件中集成导出PDF文档的功能
|
3月前
|
XML Java BI
怎么通过itextpdf架包实现报表导出为pdf文件?
Java通过itextpdf架包实现报表导出为pdf文件