.NET平臺開源專案速覽(16)C#寫PDF檔案類庫PDF File Writer介紹
1年前,我在文章:這些.NET開源專案你知道嗎?.NET平臺開源文件與報表處理元件集合(三)中(第9個專案),給大家推薦了一個開源免費的PDF讀寫元件 PDFSharp,PDFSharp我2年前就看過,用過簡單的例子,不過程式碼沒有寫成專門的文章。最近在查詢資料的時候,又發現一款小巧的寫PDF檔案的C#元件:PDF File Writer。該開源元件是在codeproject,還沒有託管到其他地方,所以花了點時間瞭解了一下,分享給大家。
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 先建立基本物件
private PdfFont ArialNormal; private PdfFont ArialBold; private PdfFont ArialItalic; private PdfFont ArialBoldItalic; private PdfFont TimesNormal; private PdfFont Comic; private PdfTilingPattern WaterMark; private PdfDocument Document; private PdfPage Page; private PdfContents Contents;
然後建立空白文件
// Step 1:建立空文件,文件引數有型別,可以使用列舉進行選擇,和返回的檔名稱 Document = new PdfDocument(PaperType.Letter, false, UnitOfMeasure.Inch, FileName); //加密測試例子 //Document.SetEncryption(null, null, Permission.All & ~Permission.Print, EncryptionType.Aes128); //建立PDF檔案資訊目錄 PdfInfo Info = PdfInfo.CreatePdfInfo(Document); Info.Title("Article Example"); Info.Author("Uzi Granot Granotech Limited"); Info.Keywords("PDF, .NET, C#, Library, Document Creator"); Info.Subject("PDF File Writer C# Class Library (Version 1.14.1)");
2.2 建立字型等資源
//定義不同的字型型別,如下所示 String FontName1 = "Arial"; String FontName2 = "Times New Roman"; ArialNormal = PdfFont.CreatePdfFont(Document, FontName1, FontStyle.Regular, true); ArialBold = PdfFont.CreatePdfFont(Document, FontName1, FontStyle.Bold, true); ArialItalic = PdfFont.CreatePdfFont(Document, FontName1, FontStyle.Italic, true); ArialBoldItalic = PdfFont.CreatePdfFont(Document, FontName1, FontStyle.Bold | FontStyle.Italic, true); TimesNormal = PdfFont.CreatePdfFont(Document, FontName2, FontStyle.Regular, true); Comic = PdfFont.CreatePdfFont(Document, "Comic Sans MS", FontStyle.Bold, true);
2.3 建立文字示例
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"); Contents.SaveGraphicsState(); Contents.SetColorNonStroking(Color.Purple); Contents.DrawText(Comic, 30.0, 4.25, 8.75, TextJustify.Center, "Example"); Contents.RestoreGraphicsState(); //Step 3:新增新頁面 Page = new PdfPage(Document); //Step 4:新增內容到頁面 Contents = new PdfContents(Page);
2.4 繪製條形碼
Contents.SaveGraphicsState(); BarcodeEAN13 Barcode1 = new BarcodeEAN13("1234567890128"); Contents.DrawBarcode(1.3, 7.05, 0.012, 0.75, Barcode1, ArialNormal, 8.0); PdfQRCode QRCode = new PdfQRCode(Document, "http://www.codeproject.com/Articles/570682/PDF-File-Writer-Csharp-Class-Library-Version", ErrorCorrection.M); Contents.DrawQRCode(QRCode, 6.0, 6.8, 1.2); // 新增連結 Page.AddWebLink(6.0, 6.8, 7.2, 8.0, "http://www.codeproject.com/Articles/570682/PDF-File-Writer-Csharp-Class-Library-Version"); //儲存 Contents.RestoreGraphicsState();
2.5 繪製圖表
Contents.SaveGraphicsState(); //建立MS Chart圖表 Chart PieChart = PdfChart.CreateChart(Document, 1.8, 1.5, 300.0); PdfImageControl ImageControl = new PdfImageControl(); ImageControl.SaveAs = SaveImageAs.IndexedImage; PdfChart PiePdfChart = new PdfChart(Document, PieChart, ImageControl); PieChart.AntiAliasing = AntiAliasingStyles.None; //設定顏色 PieChart.BackColor = Color.FromArgb(220, 220, 255); PieChart.Palette = ChartColorPalette.BrightPastel; //預設字型 Font DefaultFont = PiePdfChart.CreateFont("Verdana", FontStyle.Regular, 0.05, FontSizeUnit.UserUnit); Font TitleFont = PiePdfChart.CreateFont("Verdana", FontStyle.Bold, 0.07, FontSizeUnit.UserUnit); // 設定標題 Title Title1 = new Title("Pie Chart Example", Docking.Top, TitleFont, Color.Purple); PieChart.Titles.Add(Title1); //圖例 Legend Legend1 = new Legend(); PieChart.Legends.Add(Legend1); Legend1.BackColor = Color.FromArgb(230, 230, 255); Legend1.Docking = Docking.Bottom; Legend1.Font = DefaultFont; // 圖表區域 ChartArea ChartArea1 = new ChartArea(); PieChart.ChartAreas.Add(ChartArea1); ChartArea1.BackColor = Color.FromArgb(255, 200, 255); Series Series1 = new Series(); PieChart.Series.Add(Series1); Series1.ChartType = SeriesChartType.Pie; Series1.Font = DefaultFont; Series1.IsValueShownAsLabel = true; Series1.LabelFormat = "{0} %"; Series1.Points.Add(22.0); Series1.Points[0].LegendText = "Apple"; Series1.Points.Add(27.0); Series1.Points[1].LegendText = "Banana"; Series1.Points.Add(33.0); Series1.Points[2].LegendText = "Orange"; Series1.Points.Add(18.0); Series1.Points[3].LegendText = "Grape"; Contents.DrawChart(PiePdfChart, 5.6, 5.0); // 儲存 Contents.RestoreGraphicsState();
2.6 生成PDF
// Step 6:建立PDF Document.CreateFile(); //開啟PDF檔案 Process Proc = new Process(); Proc.StartInfo = new ProcessStartInfo(FileName); Proc.Start();
3.資源
注意:原始碼中的相關素材進行了精簡,否則檔案比較大,長傳比較大。如果有需求可以去文章連結原文下載,或者單獨留下郵箱,我有空傳送一下。
相關推薦
.NET平臺開源專案速覽(16)C#寫PDF檔案類庫PDF File Writer介紹
1年前,我在文章:這些.NET開源專案你知道嗎?.NET平臺開源文件與報表處理元件集合(三)中(第9個專案),給大家推薦了一個開源免費的PDF讀寫元件 PDFSharp,PDFSharp我2年前就看過,用過簡單的例子,不過程式碼沒有寫成專門的文章。最近在查詢資料的時候,又發現一款小巧的寫PDF檔案
.NET平臺開源專案速覽(12)雜湊演算法集合類庫HashLib
.NET的System.Security.Cryptography名稱空間本身是提供加密服務,雜湊函式,對稱與非對稱加密演算法等功能。實際上,大部分情況下已經滿足了需求,而且.NET實現的都是目前國際上比較權威的,標準化的演算法,所以還是安全可靠的。但也有一些場合,需要自己實現一些安全雜湊演算法。
.NET平臺開源專案速覽(18)C#平臺JSON實體類生成器JSON C# Class Generator
去年,我在一篇文章用原始方法解析複雜字串,json一定要用JsonMapper麼?中介紹了簡單的JSON解析的問題,那種方法在當時的環境是非常方便的,因為不需要生成實體類,結構很容易解析。但隨著業務的變化,也會碰到超級變態的JSON,如果還按照以前的思路,會把人搞抽風掉,一旦結構變化,又要重來。所
.NET平臺開源專案速覽(3)小巧輕量級NoSQL檔案資料庫LiteDB
今天給大家介紹一個不錯的小巧輕量級的NoSQL檔案資料庫LiteDB。本部落格在2013年也介紹過2款.NET平臺的開源資料庫: 上面2個數據庫我的實際的專案中用過,還不錯。當然資料量很小,主要是客戶比較變態,必須要用xml檔案儲存,就想到了,另外NDatabase只是自己覺得好玩,
.NET平臺開源專案速覽-最快的物件對映元件Tiny Mapper之專案實踐
心情小札:近期換了工作,苦逼於22:00後下班,房間一篇狼藉~ 小翠鄙視到:"你就適合生活在垃圾堆中!!!" 看評論也是挺有價值,同時也看到許多新手同學問道在實際專案中使用的情況。 下面就原作者的程式碼的基礎上略作調整,闡述一下在實際專案場景中的使用: 第一步:瞭解類庫方法:TinyMapper 主
.NET平臺開源專案速覽(14)最快的物件對映元件Tiny Mapper
好久沒有寫文章,工作甚忙,但每日還是關注.NET領域的開源專案。五一休息,放鬆了一下之後,今天就給大家介紹一個輕量級的物件對映工具Tiny Mapper:號稱是.NET平臺最快的物件對映元件。那就一起看看呢。 臨時更新:感謝@ 的意見,為了避免新手誤解,這裡說明一下,Tiny Mappe
.NET平臺開源專案速覽(20)Newlife.Core中簡單靈活的配置檔案
如果用知乎,可以關注專欄: 記得5年前開始拼命翻讀X元件的原始碼,特別是XCode,但對Newlife.Core 的東西瞭解很少,最多隻是會用用,而且用到的只是九牛一毛。裡面好用的東西太多了。 最近一年時間,零零散散又學了很多,也瞭解了很多,不會寫那總要學會用吧,今天就給大家介紹裡面非常好用的自定義配置檔
.NET平臺開源專案速覽(19)Power BI神器DAX Studio
PowerBI更新頻繁,已經有點更不上的節奏,一直在關注和學習中,基本的一些操作大概是沒問題,更重要的是注重Power Query,M函式,以及DAX的使用,這才是核心。 上個月研究了DAX的一些語法和公式,發現這玩意看起來簡單,但其實功能非常強大,所以就想和寫程式碼一樣,弄個工具試一下。
.NET平臺開源專案速覽(21)Cron任務排程CronNET
Quartznet大名鼎鼎應該很少有人不知道,相關的開源專案很多,不過那東東對新手來說,有點晦澀,加上哪個Cron表示式,可能一進去雲裡霧裡的。今天給大家介紹一個簡單的在.NET平臺上執行Cron計劃任務的元件CronNET。同時也給大家推介幾個Cron表示式的工具。 1.Cron介紹和工具
.NET平臺開源專案速覽(7)關於NoSQL資料庫LiteDB的分頁查詢解決過程
在文章:這些.NET開源專案你知道嗎?讓.NET開源來得更加猛烈些吧!(第二輯) 與 .NET平臺開源專案速覽(3)小巧輕量級NoSQL檔案資料庫LiteDB中,介紹了LiteDB的基本使用情況以及部分技術細節,我還沒有在實際系統中大量使用,但文章釋出後,有不少網友( )反應在實際專案中使用過,效果還
.NET平臺開源專案速覽(11)KwCombinatorics排列組合使用案例(1)
今年上半年,我在KwCombinatorics系列文章中,重點介紹了KwCombinatorics元件的使用情況,其實這個元件我5年前就開始用了,非常方便,麻雀雖小五臟俱全。所以一直非常喜歡,才寫了幾篇文章推薦給大家。最近在計算足球彩票結果組合過程中,使用的到了其功能,生成排列,非常具有代表性,而且也
.NET平臺開源專案速覽(1)SharpConfig配置檔案讀寫元件
在.NET平臺日常開發中,讀取配置檔案是一個很常見的需求。以前都是使用System.Configuration.ConfigurationSettings來操作,這個說實話,搞起來比較費勁。不知道大家有沒有同感。所以更多時候我還是喜歡使用開源的東西,更加方便簡潔,也穩定。省去自己的麻煩。今天就介紹一個非常精緻
.NET平臺開源專案速覽(9)軟體序列號生成元件SoftwareProtector介紹與使用
在文章:這些.NET開源專案你知道嗎?讓.NET開源來得更加猛烈些吧!(第二輯)中,給大家初步介紹了一下Software Protector序列號生成元件。今天就通過一篇簡單的文章來預覽一下其強大的功能。雖然我人為其已經基本滿足了一個軟體序列號的所有要素,但至於大家用不用得上,還得看大家的需求。總的來
.NET平臺開源專案速覽(10)FluentValidation驗證元件深入使用(二)
在上一篇文章:.NET平臺開源專案速覽(6)FluentValidation驗證元件介紹與入門(一) 中,給大家初步介紹了一下FluentValidation驗證元件的使用情況。文章從構建間的驗證器開始,到最後的結果,以及複雜驗證等都做了比較深入的講解和使用。但其實一個完整的元件是麻雀雖小五臟俱全
.NET平臺開源專案速覽(2)Compare .NET Objects物件比較元件
.NET平臺開源專案速覽今天介紹一款小巧強大的物件比較元件。可以更詳細的獲取2個物件的差別,並記錄具體差別,比較過程和要求可以靈活配置。 1.Compare .NET Objects介紹 Compare .NET Objects元件是.NET平臺用於深入比較2個.NET物件的開源元
.NET平臺開源專案速覽(13)機器學習元件Accord.NET框架功能介紹
Accord.NET Framework是在AForge.NET專案的基礎上封裝和進一步開發而來。因為AForge.NET更注重與一些底層和廣度,而Accord.NET Framework更注重與機器學習演算法以及提供計算機視訊、音訊、訊號處理以及統計應用相關的解決方案。該專案使用C#語言編寫,專
.NET平臺開源專案速覽(5)深入使用與擴充套件SharpConfig元件
上個月在文章:這些.NET開源專案你知道嗎?讓.NET開源來得更加猛烈些吧 和 .NET平臺開源專案速覽(1)SharpConfig配置檔案讀寫元件 中都提到了SharpConfig元件,簡單輕量級,速度快,而且還有比較深入的使用介紹。在文章釋出後,也有網友提到一些問題,當時我也沒仔細去分析,在這次我親
.NET平臺開源專案速覽(8)Expression Evaluator表示式計算元件使用
在文章:這些.NET開源專案你知道嗎?讓.NET開源來得更加猛烈些吧!(第二輯)中,給大家初步介紹了一下Expression Evaluator驗證元件。那裡只是概述了一下,並沒有對其使用和強大功能做深入研究,所以今天就通過一篇簡單的文章來預覽一下其強大的功能。本文曾在【原創】.NET開源表示式計算元
.NET平臺開源專案速覽(4).NET文件生成工具ADB及使用
很久以前就使用ADB這個工具來生成專案的幫助文件。功能強大,在學習一些開源專案的過程中,官方沒有提供CHM幫助文件,所以為了快速的瞭解專案結構和註釋。就生成文件來自己看,非常好用。這也是一個學習方法吧。例如本文在: 上述2篇文章中最後的資源中就手動製作了CHM幫助文件。有時候我們還可
.NET平臺開源專案速覽(6)FluentValidation驗證元件介紹與入門(一)
在文章:這些.NET開源專案你知道嗎?讓.NET開源來得更加猛烈些吧!(第二輯)中,給大家初步介紹了一下FluentValidation驗證元件。那裡只是概述了一下,並沒有對其使用和強大功能做深入研究,所以今天以及接下去的幾篇文章就專門介紹這個元件。不僅僅是它小,輕量級,優雅,而且一直在持續更新中