利用iTextSharp把DataTable导出为PDF和RTF(Rich Text Format)文件

如何用DataTable生成RTF table using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Turf.Utils {     public class RTFConvertUtil   阅读详情
利用iTextSharp把DataTable导出为PDF和RTF(Rich Text Format)文件

相信每个业务系统都有报表输出的需要,一般采用第三方报表工具,如水晶报表等等。我们也可以直接采用PDF生成类库类实现,不过代码要写多些。

使用.NET开发的生成PDF文件的类库不少,我之前也介绍过开源代码2004/1220-PDF格式/文件相关。其中最具有代表性的,我认为是iTextSharp,它来自JAVA开发的iText,已经相当稳定了,同样移植自iText的iTextDotNet(J#),但我偏好C#,所以这次采用iTextSharp。

相比其它PDF生成类库,iTextSharp有一个优势:它还能生成RTF(Rich Text Format,一些人翻译作富文本,这种是Windows的写字板专用的,也可以给Office Word正确识别和打开)、XML、HTML和Markup。而且代码非常类似,差别就在于Writer类型不一样,足见作者对OO的理解和掌握能力;

我的需求很简单,把一个DataTable(DataSet也可)导出为一个PDF文件。大家可以想像到:这个“映射”是很直接的,因为DataTable的Rows和Columns就对应PDF中的Cells(Rows)。所以可以估计,这个代码也就2个循环,10行代码左右。

关键点在于:中文的支持。iTextSharp支持中文,但来得不直接,要通过BaseFont.CreateFont()来实现:

   BaseFont baseFont  =
    BaseFont.CreateFont(
    
" C://WINDOWS//FONTS//SIMHEI.TTF " ,
    BaseFont.IDENTITY_H,
    BaseFont.NOT_EMBEDDED);
   Font font 
=   new  Font(baseFont,  9 );


这里有一个缺点,就是必须指定字体路径,而Environment.SpecialFolder却不包含字体路径,其它获取方法也是有不少的,如用Win32 API等,也可以来点野蛮的:

 Environment.GetFolderPath(Environment.SpecialFolder.System)  +   @" /../Fonts/ "


PDF函数:


        
public   static   bool  ConvertDataTableToPDF(DataTable Data,  string  PDFFile,  string  FontPath,  float  FontSize)
        
{
            Document document 
= new Document();
            PdfWriter writer 
= PdfWriter.GetInstance(document, new FileStream(PDFFile, FileMode.Create));
            document.Open();

            BaseFont baseFont 
=
                BaseFont.CreateFont(
                FontPath,
                BaseFont.IDENTITY_H,
                BaseFont.NOT_EMBEDDED);
            Font font 
= new Font(baseFont, FontSize);

            PdfPTable table 
= new PdfPTable(Data.Columns.Count);
            
for (int i = 0; i < Data.Rows.Count; i++)
            
{
                
for (int j = 0; j < Data.Columns.Count; j++)
                
{
                    table.AddCell(
new Phrase(Data.Rows[i][j].ToString(), font));
                }

            }


            document.Add(table);
            document.Close();
            writer.Close();
            
return true;
        }


PDF调用:
ConvertDataTableToPDF(Table,  @" ./test.pdf " ,  " C://WINDOWS//FONTS//SIMSUN.TTC,1 " ,  9 );  // 这里使用宋体,大小9pt。


RTF函数:

        
public   static   bool  ConvertDataTableToRtf(DataTable Data,  string  RtfFile,  string  FontPath,  float  FontSize)
        
{
            Document document 
= new Document();
            RtfWriter2 writer 
= RtfWriter2.GetInstance(document, new FileStream(RtfFile, FileMode.Create));
            document.Open();

            BaseFont baseFont 
=
                BaseFont.CreateFont(
                FontPath,
                BaseFont.IDENTITY_H,
                BaseFont.NOT_EMBEDDED);
            Font font 
= new Font(baseFont, FontSize);

            Table table 
= new Table(Data.Columns.Count);
            
for (int i = 0; i < Data.Rows.Count; i++)
            
{
                
for (int j = 0; j < Data.Columns.Count; j++)
                
{
                    table.AddCell(
new Phrase(Data.Rows[i][j].ToString(), font));
                }

            }


            document.Add(table);
            document.Close();
            
//writer.Close();
            return true;
        }


RTF调用:
ConvertDataTableToRtf(Table,  @" ./test.rtf " ,  " C://WINDOWS//FONTS//SIMSUN.TTC,1 " ,  9 );


生成PDF和RTF的代码是不是很类似?代码很直接,大家根据自己的实际需要改造吧。

生成出来的PDF和RTF在大小上差异很大:6个字段*2000条记录,PDF为200k左右,RTF竟然达到5.5M左右。大家衡量使用什么吧。

btw. iTextSharp刚推出了3.0.7版本: New release iTextSharp 3.0.7 (2005-08-24)

参考:
1、itext官方教程字体部分: http://itextdocs.lowagie.com/tutorial/fonts/index.html
2、iTextSharp全攻略: http://www.zzchina.net/article/17/16571.htm
3、iTextSharp官方教程代码: iTextSharp (iText#) tutorial update version  
itextsharp读取PDF中表格中内容,并处理 using iTextSharp.text.pdf; using iTextSharp.text.pdf.parser; private void GetPDFTableInfo(string catchDate, string institutionId, string institution, string fileName) { PdfReader reader = new PdfReader(fileName); int pageCou 阅读详情

相关推荐

C#/VB.NET 从PDF中提取表格

首先,我们需要在我们的项目中添加iTextSharp库的引用。要从PDF中提取表格,我们需要使用一个能够解析PDF文件的库。在.NET生态系统中,有几个可用的库,其中一种常用的选择是iTextSharp。iTextSharp是iText PDF库的.NET版本,它提供了丰富的功能来处理PDF文件。请注意,上述示例代码只是一个简单的示例,用于演示如何使用iTextSharp库从PDF中提取表格数据。在本文中,我们将探讨如何使用C#或VB.NET编程语言从PDF文档中提取表格数据。来提取表格的文本数据。

JwxDjango的博客 647

iTextSharp实现HTML to PDF

查了下 转PDF的各种框架   发现大部分都是收费的。 发现一款免费的iTextSharp  就想玩一下 只是简单做个HTML 转PDF  没有过深的探究。    首先 我在项目中引入iTextSharp   还是老方法 要么 NuGet上下载 或者 直接命令    然后在项目中建了一个HTML   里面就是一些简单的标签 和一些占位符   然后建了个PDF帮助类  里面实现具体...

巴萨,足球的艺术 4092

iTextSharp7库及读取表格数据源码.7z

资源包含iTextSharp7(net40及netstandard1.6下的库文件),iText.kernel源码和读取表格数据源码,运行TableExtractionFromPDF项目可查看效果。 iText.kernel版本7.1.3.0 iText.io版本7.1.3.0 原文网址:https://www.codeproject.com/Tips/1262815/Extract-Tables-from-PDFs

ITextSharp导出PDF表格和图片(C#)

    文章主要介绍使用ITextSharp导出PDF表格和图片的简单操作说明,以下为ITextSharp.dll下载链接   分享链接:http://pan.baidu.com/s/1nuc6glj 密码:3gxw   一、流程     ...

weixin_33920401的博客 1457

ItextSharp中文教程+官方代码大量示例

ItextSharp中文教程+官方代码大量示例,面向C#编程,初学者下载这个不用再看其他网上例子这个全面而又好,我看了是学会了

winform中将Datatable数据导出为PDF文件

winform中将Datatable数据导出到PDF文件中,该项目包含了例子,能使个人能更加了解winform将datatable数据导出到PDF的整个流程,本资源也可拿来即用,只需要稍加修改即可。

C# iTextSharp 创建PDF水印

刚刚有人留言说需要 iTextSharp 创建PDF水印代码 那就贴一个以前写好的。 public static void SetWatermark(string inputfilepath, string outputfilepath, string waterMarkName) { PdfReader pdfReader = null; PdfSt...

除却猩猩不是猿 1546

利用iTextSharp第三方开源代码,很方便的生成pdf文件,包括图片、格式排版.zip

利用iTextSharp第三方开源代码,很方便的生成pdf文件,包括图片、格式排版.zip

【亲测免费】 高效解析PDF表格数据:iTextSharp读取表格数据源码推荐

高效解析PDF表格数据:iTextSharp读取表格数据源码推荐 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在现代数据处理中,从PDF文件中提取表格数据是一项常见但复杂的任务。为了简化这一过程,我们推出了基于iTextSharp的PDF表格数据读取工具。该项目提供了一个完整的C#源码文件,专门用于从PDF文档中提取表格数据。无论你是数据分析师、开发人员还是研究人员...

gitblog_09814的博客 1111

利用iTextSharp第三方开源代码,很方便的生成pdf文件,包括图片、格式.zip

利用iTextSharp第三方开源代码,很方便的生成pdf文件,包括图片、格式.zip

科技中介服务机构如何高效完成技术成果的筛选与匹配服务?.docx

科技中介服务机构如何高效完成技术成果的筛选与匹配服务?

c# itextsharp根据模板导出pdf报表

c# itextsharp根据模板导出pdf报表 目录 一、前言 二、itextsharp 使用 2.1 pdf模板 2.2 新建项目 2.3 动态数据多页 回到顶部 一、前言   PDF文件在目前来说是比较流行的电子文档格式,在.Net framework 中身并不包含可以和pdf打交道的方法,也没有很好操作PDF的类库,所以我们需要对pdf进行编辑,加密,模板打印等操作不得不去找可用的第三方组件,这里就可以选择使用ITextSharp来实现,这个程序是JAVA工具ITex..

dulang842的专栏 1437

基于NXP1778的CAN自动波特率检测

一、概念 NXP1778芯片内部自带一个CAN控制器。CAN模块由两部分组成:控制器和验收滤波器。所有的寄存器和RAM都以32位字宽度来访问。 CAN自动波特率检测主要用于以一种CAN的转换的产品中。产品中CAN部分的波特率以前都是通过网页中修改然后配置下去的,依据实际情况的考虑,如果CAN部分的波特率能够根据客户设备的改变而自动改变,将会增加其灵活性。   二、原理 根据CAN控制器的

菜鸟的痕迹专栏 5271

使用第三方组件NPOI和iTextSharp根据DataTable导出Excel、Word、Pdf

源码及组件下载地址:源码及NPOI 2.0和itextsharp-all-5.5.3源码如下:using System;using System.Collections.Generic;using System.Data;using System.Text;using NPOI;using NPOI.HPSF;using NPOI.HSSF;using NPOI.HSSF.UserModel;us

功夫再高也怕菜刀 充分体现了科技的力量 6736

Mid-360激光雷达与IMU标定实战:从环境配置到参数优化

本文详细介绍了Mid-360激光雷达与IMU标定的完整流程,涵盖环境配置、驱动适配、参数优化及实战操作。重点解析了标定参数设置技巧与常见问题解决方案,帮助开发者提升机器人感知系统的定位与建图精度,确保LiDAR-IMU数据融合的最佳效果。

a1b2c3d的博客 914

STM32H750_QSPI_Flash_Configuration_With_CubeMX

本文详细介绍了如何使用STM32CubeMX配置STM32H750的QSPI Flash接口,包括硬件连接、CubeMX参数设置、代码生成与初始化流程优化。通过实战示例展示了Flash ID读取、页编程与数据读取等常用操作,并提供了调试技巧与性能优化建议,帮助开发者高效实现高速外部存储扩展。

weixin_29176179的博客 274

用iTextSharp读取PDF文档中文本内容的探索

以下c#程序可以读取大多数的PDF中的文本内容。 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.F

dkchg的专栏 8565

国产大模型 coding plan 实战决策指南:GLM、Kimi、豆包、abab 四大模型分层选型与工程落地

大模型辅助编程(coding assistant)正从概念验证走向规模化工程落地,其核心已不再是‘能否生成代码’,而是‘如何在真实开发流程中精准赋能’。理解模型能力边界、匹配技术栈特征、构建分层工作流(L1行级补全/L2函数生成/L3模块重构),是实现稳定提效的关键。GLM系列以工程稳定性见长,适合代码审计与测试生成;Kimi-Max凭借200K超长上下文胜任深度重构与合规审查;豆包响应快、框架适配深,是IDE高频补全的理想选择;abab系列则在IoT固件等跨模态场景中展现独特价值。本文聚焦国产模型在金融、

weixin_32238157的博客 427

C# 提取PDF中的表格

本文介绍在C#程序中(附VB.NET代码)提取PDF中的表格的方法,调用Spire.PDF for .NET提供的提取表格的类以及方法等来获取表格单元格中的文本内容;代码内容中涉及到的主要类及方法归纳如下表,供参考: 类型 描述 PdfDocument Class Represents a pdf document model. PdfDocument.LoadFromFile(string filename) M

Eiceblue的专栏 2156

教你如何阅读Autosar代码(6):常量变量定义

编译器抽象应该为常量的声明和定义定义CONST宏。编译器抽象应该定义VAR宏来声明和定义变量。memclass:常量本身的分类;memclass:变量本身的分类;vartype:变量的类型;type:常量的类型;

wdconan001的博客 958

大模型实战—通义千问大模型微调

这个参数仅针对 llama 类型的模型结构,默认勾选的是 q_proj 和 v_proj,具体的名词不容易理解,我就不多说了,可以简单的认为是对模型的理解能力进行优化,一般这两个就够了。当这个值较高时,适应新任务的能力会增强,但是对基础模型的影响会比较大,有过拟合的风险,尤其是在数据量有限的情况下。为了方便测试,我在云环境也创建了一个镜像,相关的环境都配置好了,可以直接使用几个国内开源的大语言模型,比如清华智谱的ChatGLM3-6B、零一万物的Yi-34B,还有最近阿里云开源的Qwen1.5-32B。

7万+
上一篇: 如何在Web.config中注册用户控件和自定义控件
下一篇: 利用iTextSharp填写中文(中日韩)PDF表单(完整解决方案)
SmartJavaer
博客等级 码龄21年 13粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值