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

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


相关文章
|
3天前
|
文字识别
【PDF提取全自动改名】如何批量提取PDF指定区域的文字内容,用内容批量给PDF命名或者导出表格,学会全自动解放双手
在生活和工作中,我们常需处理大量PDF文件,如银行单据、税收单据等。手动处理效率低下,而使用“咕嘎批量PDF多区域内容提取重命名导表格系统”可快速完成数千份文档的处理,大幅提高效率。该工具通过获取PDF各区域内容坐标,导入并处理文件,最终将信息提取至表格,并根据关键信息对PDF进行重命名,方便管理和查找。
14 2
|
14天前
|
人工智能 JSON 搜索推荐
猫步简历 - 开源免费AI简历生成器 | 一键导出PDF/JSON
猫步简历是一款免费开源的AI简历生成器,帮助用户轻松创建独特、专业的简历。支持导出超高清PDF、图片、JSON等多种格式,并提供AI智能创作、润色和多语种切换等功能。拥有海量模板、高度定制化模块及完善的后台管理系统,助力求职者脱颖而出。官网:https://maobucv.com,GitHub开源地址:https://github.com/Hacker233/resume-design。
132 10
|
16天前
|
文字识别 BI
【图片型PDF】批量识别扫描件PDF指定区域局部位置内容,将识别内容导出Excel表格或批量改名文件,基于阿里云OCR对图片型PDF识别改名案例实现
在医疗和政务等领域,图片型PDF文件(如病历、报告、公文扫描件)的处理需求广泛。通过OCR技术识别这些文件中的文字信息,提取关键内容并保存为表格,极大提高了信息管理和利用效率。本文介绍一款工具——咕嘎批量OCR系统,帮助用户快速处理图片型PDF文件,支持区域识别、内容提取、导出表格及批量改名等功能。下载工具后,按步骤选择处理模式、进行区域采样、批量处理文件,几分钟内即可高效完成数百个文件的处理。
86 8
|
4月前
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
968 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
3月前
|
前端开发 API
前端界面生成PDF并导出下载
【10月更文挑战第21天】利用合适的第三方库,你可以在前端轻松实现界面生成 PDF 并导出下载的功能,为用户提供更方便的文档分享和保存方式。你还可以根据具体的需求进一步优化和定制生成的 PDF 文件,以满足不同的业务场景要求。
|
5月前
|
SQL C# 数据库
EPPlus库的安装和使用 C# 中 Excel的导入和导出
本文介绍了如何使用EPPlus库在C#中实现Excel的导入和导出功能。首先,通过NuGet包管理器安装EPPlus库,然后提供了将DataGridView数据导出到Excel的步骤和代码示例,包括将DataGridView转换为DataTable和使用EPPlus将DataTable导出为Excel文件。接着,介绍了如何将Excel数据导入到数据库中,包括读取Excel文件、解析数据、执行SQL插入操作。
EPPlus库的安装和使用 C# 中 Excel的导入和导出
|
4月前
|
资源调度 前端开发 JavaScript
安利一款基于canvas/svg的富文本编辑器-支持在线导出PDF、DOCX
高性能:利用Canvas和SVG进行图形和矢量图形的渲染,提供高性能的绘图能力。 可扩展性:Canvas-Editor是一个开源项目,支持通过插件机制扩展编辑器的功能,如DOCX、PDF导出、表格分页等。 丰富的文本编辑功能:支持多种文本编辑操作,如插入表格、分页、性能优化等。
544 0
|
5月前
|
JavaScript
vue导出pdf(接口)
vue导出pdf(接口)
48 3
|
6月前
|
JavaScript 前端开发
vue导出pdf(大数量可能有问题)
vue导出pdf(大数量可能有问题)
255 2
|
6月前
|
开发框架 前端开发 JavaScript
在Winform分页控件中集成导出PDF文档的功能
在Winform分页控件中集成导出PDF文档的功能

热门文章

最新文章