1年前,我在文章:这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)中(第9个项目),给大家推荐了一个开源免费的PDF读写组件 PDFSharp,PDFSharp我2年前就看过,用过简单的例子,不过代码没有写成专门的文章。最近在查找资料的时候,又发现一款小巧的写PDF文件的C#组件:PDF File Writer。该开源组件是在codeproject,还没有托管到其他地方,所以花了点时间了解了一下,分享给大家。

.NET开源目录:【目录】本博客其他.NET开源项目文章目录

本文原文地址:http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_PdfFileWriter.html

1.PDF File Writer基本介绍

1.1 支持的常用功能

PDF File Writer组件可以在.NET应用程序中直接创建PDF格式的文件。最低的开发环境是.NET 4.0 + VS 2013。我们来看看该组件支持的PDF的一些功能:

  图形:支持画线、矩形、多边形、贝塞尔曲线,前景和背景颜色,模式和阴影。

  图片:支持位图图像和矢量图像

 文本:支持行文本和列文本

  条形码:支持条形码:Barcode 128, Barcode 39, Barcode interleaved 2 of 5等

  二维码:支持二维条码

加密:支持AES-128加密算法

Web链接:支持Web超链接

书签:支持文档大纲

图表:支持微软的图表,支持数据表格,支持声音,视频播放;

1.2 使用PDF File Writer创建PDF的步骤

使用PDF File Writer在程序中创建一个PDF文件的主要步骤如下:

Step 1: 创建PdfDocument文件对象

Step 2: 创建资源对象,如文字(PdfFont),图像(PdfImage)等

Step 3: 创建文件页对象PdfPage

Step 4: 创建内容对象PdfContents

Step 5: 在内容对象上添加文字,或者图像等内容

重复3, 4 ,5 创建其他页

Step 6: 使用PdfDocument对象的CreateFile方法创建PDF文

1.3 PDF File Writer创建的PDF文件效果预览

看看使用PDF File Writer创建的PDF的效果,非常不错。这也是我偶尔碰到非常震撼,拿过来分享的重要原因。

2.一个简单的使用案例

我们根据官方提供的例子,可以快速入门,一起来看看基本代码。

2.1 先创建基本对象

  1. private PdfFont ArialNormal;
  2. private PdfFont ArialBold;
  3. private PdfFont ArialItalic;
  4. private PdfFont ArialBoldItalic;
  5. private PdfFont TimesNormal;
  6. private PdfFont Comic;
  7. private PdfTilingPattern WaterMark;
  8. private PdfDocument Document;
  9. private PdfPage Page;
  10. private PdfContents Contents;

然后创建空白文档

  1. // Step 1:创建空文档,文档参数有类型,可以使用枚举进行选择,和返回的文件名称
  2. Document = new PdfDocument(PaperType.Letter, false, UnitOfMeasure.Inch, FileName);
  3. //加密测试例子
  4. //Document.SetEncryption(null, null, Permission.All & ~Permission.Print, EncryptionType.Aes128);
  5. //创建PDF文件信息目录
  6. PdfInfo Info = PdfInfo.CreatePdfInfo(Document);
  7. Info.Title("Article Example");
  8. Info.Author("Uzi Granot Granotech Limited");
  9. Info.Keywords("PDF, .NET, C#, Library, Document Creator");
  10. Info.Subject("PDF File Writer C# Class Library (Version 1.14.1)");

2.2 创建字体等资源

  1. //定义不同的字体类型,如下所示
  2. String FontName1 = "Arial";
  3. String FontName2 = "Times New Roman";
  4.  
  5. ArialNormal = PdfFont.CreatePdfFont(Document, FontName1, FontStyle.Regular, true);
  6. ArialBold = PdfFont.CreatePdfFont(Document, FontName1, FontStyle.Bold, true);
  7. ArialItalic = PdfFont.CreatePdfFont(Document, FontName1, FontStyle.Italic, true);
  8. ArialBoldItalic = PdfFont.CreatePdfFont(Document, FontName1, FontStyle.Bold | FontStyle.Italic, true);
  9. TimesNormal = PdfFont.CreatePdfFont(Document, FontName2, FontStyle.Regular, true);
  10. Comic = PdfFont.CreatePdfFont(Document, "Comic Sans MS", FontStyle.Bold, true);

2.3 创建文字示例

  1. Contents.DrawText(Comic, 40.0, 4.25, 9.25, TextJustify.Center, 0.02, Color.FromArgb(128, 0, 255), Color.FromArgb(255, 0, 128), "PDF FILE WRITER");
  2. Contents.SaveGraphicsState();
  3. Contents.SetColorNonStroking(Color.Purple);
  4. Contents.DrawText(Comic, 30.0, 4.25, 8.75, TextJustify.Center, "Example");
  5. Contents.RestoreGraphicsState();
  6. //Step 3:添加新页面
  7. Page = new PdfPage(Document);
  8. //Step 4:添加内容到页面
  9. Contents = new PdfContents(Page);

2.4 绘制条形码

  1. Contents.SaveGraphicsState();
  2. BarcodeEAN13 Barcode1 = new BarcodeEAN13("1234567890128");
  3. Contents.DrawBarcode(1.3, 7.05, 0.012, 0.75, Barcode1, ArialNormal, 8.0);
  4. PdfQRCode QRCode = new PdfQRCode(Document, "http://www.codeproject.com/Articles/570682/PDF-File-Writer-Csharp-Class-Library-Version", ErrorCorrection.M);
  5. Contents.DrawQRCode(QRCode, 6.0, 6.8, 1.2);
  6. // 添加链接
  7. Page.AddWebLink(6.0, 6.8, 7.2, 8.0, "http://www.codeproject.com/Articles/570682/PDF-File-Writer-Csharp-Class-Library-Version");
  8. //保存
  9. Contents.RestoreGraphicsState();

2.5 绘制图表

  1. Contents.SaveGraphicsState();
  2.  
  3. //创建MS Chart图表
  4. Chart PieChart = PdfChart.CreateChart(Document, 1.8, 1.5, 300.0);
  5. PdfImageControl ImageControl = new PdfImageControl();
  6. ImageControl.SaveAs = SaveImageAs.IndexedImage;
  7. PdfChart PiePdfChart = new PdfChart(Document, PieChart, ImageControl);
  8.  
  9. PieChart.AntiAliasing = AntiAliasingStyles.None; 
  10.  
  11. //设置颜色
  12. PieChart.BackColor = Color.FromArgb(220, 220, 255);
  13. PieChart.Palette = ChartColorPalette.BrightPastel;
  14.  
  15. //默认字体
  16. Font DefaultFont = PiePdfChart.CreateFont("Verdana", FontStyle.Regular, 0.05, FontSizeUnit.UserUnit);
  17. Font TitleFont = PiePdfChart.CreateFont("Verdana", FontStyle.Bold, 0.07, FontSizeUnit.UserUnit);
  18.  
  19. // 设置标题
  20. Title Title1 = new Title("Pie Chart Example", Docking.Top, TitleFont, Color.Purple);
  21. PieChart.Titles.Add(Title1);
  22.  
  23. //图例
  24. Legend Legend1 = new Legend();
  25. PieChart.Legends.Add(Legend1);
  26. Legend1.BackColor = Color.FromArgb(230, 230, 255);
  27. Legend1.Docking = Docking.Bottom;
  28. Legend1.Font = DefaultFont;
  29.  
  30. // 图表区域
  31. ChartArea ChartArea1 = new ChartArea();
  32. PieChart.ChartAreas.Add(ChartArea1);
  33.  
  34. ChartArea1.BackColor = Color.FromArgb(255, 200, 255);
  35.  
  36. Series Series1 = new Series();
  37. PieChart.Series.Add(Series1);
  38. Series1.ChartType = SeriesChartType.Pie;
  39. Series1.Font = DefaultFont;
  40. Series1.IsValueShownAsLabel = true;
  41. Series1.LabelFormat = "{0} %";
  42. Series1.Points.Add(22.0);
  43. Series1.Points[0].LegendText = "Apple";
  44. Series1.Points.Add(27.0);
  45. Series1.Points[1].LegendText = "Banana";
  46. Series1.Points.Add(33.0);
  47. Series1.Points[2].LegendText = "Orange";
  48. Series1.Points.Add(18.0);
  49. Series1.Points[3].LegendText = "Grape";
  50.  
  51. Contents.DrawChart(PiePdfChart, 5.6, 5.0);
  52. // 保存
  53. Contents.RestoreGraphicsState();

2.6 生成PDF

  1. // Step 6:创建PDF
  2. Document.CreateFile();
  3. //打开PDF文件
  4. Process Proc = new Process();
  5. Proc.StartInfo = new ProcessStartInfo(FileName);
  6. Proc.Start();

3.资源

1.Codeproject文章连接:http://www.codeproject.com/Articles/570682/PDF-File-Writer-Csharp-Class-Library-Version

2.PDF File Writer DLL下载:PdfFileWriter_dll.zip

3.PDF File Writer 帮助文档:PdfFileWriterCHM.rar

4.PDF File Writer源代码与Demo:PdfFileWriter-Code.rar

注意:源代码中的相关素材进行了精简,否则文件比较大,长传比较大。如果有需求可以去文章链接原文下载,或者单独留下邮箱,我有空发送一下。

.NET平台开源项目速览(16)C#写PDF文件类库PDF File Writer介绍的更多相关文章

  1. .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB

    今天给大家介绍一个不错的小巧轻量级的NoSQL文件数据库LiteDB.本博客在2013年也介绍过2款.NET平台的开源数据库: 1.[原创]开源.NET下的XML数据库介绍及入门 2.[原创]C#开源 ...

  2. .NET平台开源项目速览(12)哈希算法集合类库HashLib

    .NET的System.Security.Cryptography命名空间本身是提供加密服务,散列函数,对称与非对称加密算法等功能.实际上,大部分情况下已经满足了需求,而且.NET实现的都是目前国际上 ...

  3. .NET平台开源项目速览(7)关于NoSQL数据库LiteDB的分页查询解决过程

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑) 与 .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB中,介绍了LiteDB的基本使用情况以及部 ...

  4. .NET平台开源项目速览(4).NET文档生成工具ADB及使用

    很久以前就使用ADB这个工具来生成项目的帮助文档.功能强大,在学习一些开源项目的过程中,官方没有提供CHM帮助文档,所以为了快速的了解项目结构和注释.就生成文档来自己看,非常好用.这也是一个学习方法吧 ...

  5. .NET平台开源项目速览(17)FluentConsole让你的控制台酷起来

    从该系列的第一篇文章 .NET平台开源项目速览(1)SharpConfig配置文件读写组件 开始,不知不觉已经到第17篇了.每一次我们都是介绍一个小巧甚至微不足道的.NET平台的开源软件,或者学习,或 ...

  6. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  7. .NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍

    Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器 ...

  8. .NET平台开源项目速览(1)SharpConfig配置文件读写组件

    在.NET平台日常开发中,读取配置文件是一个很常见的需求.以前都是使用System.Configuration.ConfigurationSettings来操作,这个说实话,搞起来比较费劲.不知道大家 ...

  9. .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)

    今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinatorics组件的使用情况,其实这个组件我5年前就开始用了,非常方便,麻雀虽小五脏俱全.所以一直非常喜欢,才写了几 ...

随机推荐

  1. Virtual Box配置CentOS7网络(图文教程)

    之前很多次安装CentOS7虚拟机,每次配置网络在网上找教程,今天总结一下,全图文配置,方便以后查看. Virtual Box可选的网络接入方式包括: NAT 网络地址转换模式(NAT,Network ...

  2. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  3. 前端学HTTP之报文首部

    前面的话 首部和方法配合工作,共同决定了客户端和服务器能做什么事情.在请求和响应报文中都可以用首部来提供信息,有些首部是某种报文专用的,有些首部则更通用一些.本文将详细介绍HTTP报文中的首部 结构 ...

  4. webapp应用--模拟电子书翻页效果

    前言: 现在移动互联网发展火热,手机上网的用户越来越多,甚至大有超过pc访问的趋势.所以,用web程序做出仿原生效果的移动应用,也变得越来越流行了.这种程序也就是我们常说的单页应用程序,它也有一个英文 ...

  5. Java程序员:工作还是游戏,是该好好衡量一下了

    前阵子我终于下定决心,删掉了硬盘里所有的游戏. 身为一个程序猿,每天都要和各种新技术打交道,闲暇时间,总还得看一下各大论坛,逛逛博客园啥的,给自己充充电.游戏的话,其实我自小就比较喜欢,可以算是一种兴 ...

  6. springmvc SSM shiro redis 后台框架 多数据源 代码生成器

    A集成代码生成器 [正反双向(单表.主表.明细表.树形表,开发利器)+快速构建表单 下载地址    ; freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类 ...

  7. Linux设备文件简介(转载)

    Linux 中的设备有2种类型:字符设备(无缓冲且只能顺序存取).块设备(有缓冲且可以随机存取).每个字符设备和块设备都必须有主.次设备号,主设备号相同的设 备是同类设备(使用同一个驱动程序).这些设 ...

  8. 自定义ConfigSection

      CCustom configuration section with intelisense

  9. 把int*传值给char*,打印出错误的数字

    首先进入debug模式查看i的地址也就是ptr的值 以16进制位小端模式存储(一个整型四个字节,8位16进制数)(根据系统位数情况) 紧接着因为ptr是char*型指针变量,读取数据时按照一个字节一个 ...

  10. [PHP源码阅读]array_push和array_unshift函数

    在PHP中,在数组中添加元素也是一种很常用的操作,分别有在数组尾部和头部添加元素,看看PHP内部是如何实现数组插入的操作. 我在github有对PHP源码更详细的注解.感兴趣的可以围观一下,给个sta ...