茍博文
摘要:該文主要探討基于C#語言實現(xiàn)將word文檔轉換為pdf文檔,并對分析了其轉換性能和在小微企業(yè)數(shù)據(jù)化決策系統(tǒng)中的應用問題。
關鍵詞:C#語言;word文檔;pdf文檔
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2017)35-0133-03
Implementation of Word Document to PDF Document Based on C# Language
GOU Bo-wen
(Department of information science and technology, School of tourism and culture, Yunnan University, Lijiang 674100, China)
Abstract: This paper mainly discusses the conversion of word document to PDF document Based on C# language, and analyzes its conversion performance and application in small and micro enterprise data decision making system.
Key words: C# language; word document; PDF document
在計算機技術的高速發(fā)展得當今,網(wǎng)上資料的購買,下載已經(jīng)變得越來越普遍,但是很多時候用戶不知道自己下載的數(shù)據(jù)或者資料是否符合自己所需,用戶只能憑資料標題臆想資料的內(nèi)容,為了解決這個問題,實現(xiàn)網(wǎng)絡在線的預覽資料內(nèi)容,這樣極大的讓用戶確定了這份資料是否是自己想要的,然后用戶就可以根據(jù)自己意愿來確定是否購買并下載這份數(shù)據(jù)。目前網(wǎng)絡上下載的比較多的就是word文檔,但是網(wǎng)頁上無法直接放置word文檔,所以用戶無法再網(wǎng)絡上預覽,必須將word文檔轉換為pdf或者html文檔,才能放置在網(wǎng)頁上供用戶預覽,所以本文所決絕的問題有很大的使用價值。
1 決策支持系統(tǒng)的技術難題
在此系統(tǒng)中,因為采用了預覽后付費下載模式,所以這給編碼實現(xiàn)帶來一個一個難題,因為分析師分析完后,會存成一份word文件,但是網(wǎng)頁是不能直接顯示word文件的,所以需要將word文件轉為pdf文件或者html等能在網(wǎng)頁加載的文件,所以需要將word文件轉換成pdf或者html文件。這樣用戶就可以直接在網(wǎng)頁上預覽一部分。本次實現(xiàn)基于C#語言操作word文檔將其轉換為pdf正是解決了這個問題。
2 word轉PDF現(xiàn)狀
將word文件轉換為PDF目前在不同的編程語言下有不同的處理方式,下面就舉java和C#這兩種編程語言為例,來談談這個問題。
首先是java語言操作word轉pdf,java與語言作為一門面向對象語言是十分強大的,如果要是使用java語言操作word轉pdf的話,有三種方法,第一種是首先下載Itext的相關的包和poi相關的包,首先利用poi的包中的類將word文件轉換為Html文件,在這個過程中要注意word文件中的圖片保存問題,還有老版以doc結尾的word文件和新版以docx結尾的文件的轉換方式不同,需要編寫不同的代碼,其次再利用Itext相關的包將html文件轉換為PDF文件,在這個過程中要注意html代碼中的endTag問題,還有中文問題,因為默認的Itext是不支持中文的,盡管你這些都注意了,你轉換出來的pdf文件和原word文件的格式還是會有偏差,而且明顯,第二種是利用openoffice服務和jodconverter包通過操作openOffice服務轉換,缺點:會占用100M左右的內(nèi)存,比較消耗硬件資源,復雜格式容易出錯。第三種jacob + msOfficeWord + SaveAsPDFandXPS格式保存完美,但是效率較慢。
其次是C#語言操作word轉pdf文件,應為C#語言是微軟主導的編程語言,而且office也是自家的產(chǎn)品,所以在這方面有天然的優(yōu)勢,只需添加Microsoft.Office.Interop.Word的引用即可實現(xiàn)word轉pdf,而且不存在doc結尾的文件和docx結尾的文件兼容的問題,而且格式保存較好。而且轉換一份8頁的有多圖片和表格word文檔只需3s左右。
3 基本接口
首先在word轉pdf中,有這么幾個接口:WordToPDF_auto(string sourcePath, string targetPath),WordToPDF_manual(String sourcePath,String targetPath,int startPage,int endPage),isWord(String Source)。
3.1 WordToPDF_auto(string sourcePath, string targetPath)接口
這個接口就是當用戶輸入word的路徑,和要保存的文件路徑,然后就會將word文檔全部轉換為pdf文檔。
3.2 WordToPDF_manual(String sourcePath,String targetPath,int startPage,int endPage)接口
這個接口是用戶只需輸入word文檔的源路徑和輸出pdf的目標路徑和轉換的開始頁和結束頁,就將指定的word開始頁到word結束頁的內(nèi)容轉換為pdf。
3.3 isWord(String sourcePath)接口
這個接口是是根據(jù)用戶輸入的文檔路徑來讀取文件并判斷文件是否是word文件。
4 基本處理邏輯
4.1 Word轉pdf(自動)的處理邏輯
1) 在程序里添加微軟的和word相關的com組件。
2) 然后在程序里增Microsoft.Office.Interop.Word的引用。
3) 首先將系統(tǒng)的word進程殺掉。
4) 然后更具用戶輸入的word文件源路徑來判斷文件的后綴是否為doc或者docx來判斷文件是否是word文件。
5) 然后創(chuàng)建Microsoft.Office.Interop.Word.Application對象,根絕這個對象來創(chuàng)建Document對象,然后使調(diào)用計算word的頁數(shù)如果文檔頁數(shù)低于1頁直接返回false,如果大于一頁,則調(diào)用document.ExportAsFixedFormat(targetPath, WdExportFormat.wdExportFormatPDF)方法將文檔轉換成pdf文檔到目標路徑。如果轉換失敗就會打印異常信息。
6) 最后再調(diào)用Document對象的close()方法關閉Document和調(diào)用Microsoft.Office.Interop.Word.Application。
4.2 Word轉pdf(手動)的處理邏輯
手動控制轉換的就是在自動的基礎上增加了用戶對轉換內(nèi)容的控制,可以控制轉換的起始頁和結束頁,還增加了用戶輸入的起始頁和結束頁的判斷。判斷輸入的起始頁是否大于文檔的總頁數(shù),如果大于發(fā)揮false,否則再繼續(xù)判斷用戶輸入法人結束頁是否大于文檔的中頁數(shù),如果大于返回false。
5 轉換效率分析
5.1 自動轉換效率分析
為了知道自動轉換效率,做了一個轉換測試,給定一個800多KB的包含有比較復雜的word像是的文件,來通過此程序進行轉換測試,分別采集了10次轉換,50次轉換,和100次轉換的數(shù)據(jù)如下表。
經(jīng)過測試時發(fā)現(xiàn)轉換一份800多kb的有復雜格式和圖片的word文件,所需的時間穩(wěn)定在3s左右,建議使用時分析師在上傳后立即轉換,用戶在查看是就可以直接查看pdf文件,符合系統(tǒng)的需要。
5.2 手動轉換效率分析
為了知道手動轉換的效率,分別做了10次轉換,50次轉換和100次轉換的測試并采集到其數(shù)據(jù)如表4。
由這些數(shù)據(jù)可以看出,轉換效率穩(wěn)定保持在2.7秒左右符合系統(tǒng)的需要。
6 實際轉化控制
在項目中因為使用的是預覽模式,所以在系統(tǒng)中需要使用手動轉換,即控制轉換的頁數(shù),只轉換為客戶一部分預覽,如果客戶需要查看全部,則可付費后直接下載word文檔。
但是由于word文檔轉pdf文檔需要耗費大量的硬件資源所以在實際應用中不得不做好以下幾點:
1) 由于word文檔轉pdf文檔需要消耗大量硬件資源,建議提高硬件配置。
2) 如果多人同時預覽,用戶的等待時間就比較長,建議在分析師上傳word文件就立即轉換,留出足夠的轉換時間。
3) 做好文件轉換后的文件資源釋放和word線程管理,防止轉換效率變低。
7 結束語
本文提出的采用基于C#語言的實現(xiàn)word文檔轉pdf文檔的設計,解決了word文檔的內(nèi)容在網(wǎng)頁預覽,而且還保留了word文檔的樣式,有利于網(wǎng)頁在線瀏覽資料的發(fā)展,而且會節(jié)省用戶大量的時間和金錢,具有很大的社會價值。
參考文獻:
[1] 微軟開發(fā)者文檔[EB/OL]. (2017-11-10). https://msdn.microsoft.com/library/microsoft.office.tools.word.document.exportasfixedformat(v=vs.100).aspx.
[2] karli Watson. Christian Nagel C#入門經(jīng)典[M]. 北京: 清華大學出版社, 2006.
[3] RB Whitaker The C# Player's Guide[Z]. Starbound Software, 2012.