ABCpdf使用介紹_第1頁
ABCpdf使用介紹_第2頁
ABCpdf使用介紹_第3頁
ABCpdf使用介紹_第4頁
ABCpdf使用介紹_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、ABCpdf.NET使用介紹戴俊 -2010-1-7一、ABCpdf.NET簡單介紹ABCpdf.NET是一個能夠很方便生成pdf的.net組件,能夠運(yùn)行在以下操作系統(tǒng)中:Windows 2000, Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008. 官方建議運(yùn)行環(huán)境安裝IE6 或者以上版本。 對應(yīng)不同的系統(tǒng),它有32 位和 64 位的版本,使用時注意版本的選用。如果在64 ( 32)位系統(tǒng)使用 32( 64)位版本,則可能發(fā)生不可預(yù)料的錯誤,使用時請根據(jù)運(yùn)行環(huán)境選擇正確的版本。二者的使用方法都是一樣

2、的。ABCpdf的功能比較多,比如可以讀word、excel等文件,可以保存 pdf、xps、swf等格式文件。本文主要介紹其生成pdf 的方法。使用時,需要ABCpdf.DLL 和 ABCpdfCE7.DLL支持。其中ABCpdf.DLL (.net調(diào)用接口)需要引用到項目中,ABCpdfCE7.DLL (核心驅(qū)動)放在 ABCpdf.DLL 的同一目錄下即可。ABCpdf的坐標(biāo)系采用 Adobe PDF標(biāo)準(zhǔn)坐標(biāo)系,原點在屏幕的左下角(非 windows默認(rèn) 坐標(biāo)系的左上角) ,采用 72DPI , 我們顯示器用的通常是96DPI , 在計算大小時注意轉(zhuǎn)換 (如果需要PDF里面的頁面大小和

3、HTM電示的一致),網(wǎng)頁面上的96Px相當(dāng)于ABCpdf里面72px。2、 入門,生成第一個pdf 文件這一節(jié)將通過實例來展示如何用 ABCpdf.NET 生成 pdf 文件。在使用前需要引入ABCpdf.DLL ,在代碼中引用名空間:using WebSupergoo.ABCpdf7; 通常情況下只需要引入這個名空間就可以了。 Code: private void GeneratePdfTest1() using ( Doc theDoc = new Doc() theDoc.Rect.Inset(24, 48);/Rect默認(rèn)是文檔整個頁面大小,這里的Inset表示將Rect左右留出24的

4、空白,上下留出 48的空白theDoc.Color.String = theDoc.FrameRect(); theDoc.MediaBox.String = theDoc.Rect.String = theDoc.Color.String = theDoc.FrameRect();"32,48,117" ;/ 為當(dāng)前 rect 添加邊框"0 0 590 840" ; / 設(shè)置添加新頁面時,頁面的大小 "14 14 576 770" ; / 當(dāng)前輸出區(qū)間 "192,48,117" ;theDoc.FontSize

5、= 12;theDoc.AddText("Hello World" );theDoc.Font = theDoc.AddFont(" 宋體 " , "ChineseS" );theDoc.FontSize = 16;theDoc.Flatten();/合并 pdf 各個 layer ,減少 pdf 大小theDoc.Save(Server.MapPath("simple.pdf" );theDoc.Clear();上面的代碼可以簡單的生成一個pdf 文件。需要了解的是pdf 文件可以有多個layer ,如同 htm

6、l 里面絕對定位的 div ,都具有 index ,可以疊加,上層覆蓋下層。3、 進(jìn)階,控制生成的 pdf上面的代碼只是簡單的生成了一個pdf ,很多細(xì)節(jié)問題都沒有說明,現(xiàn)在將介紹如何控制生成的 pdf 和介紹一些有用的方法。比如頁面的大小、字體、添加的內(nèi)容位置等。WebSupergoo.ABCpdf7.Doc 類有很多屬性和方法可以利用,這里我們就要用到:1. SetInfo 方法virtual void SetInfo(int id, string type, string value)用來獲取或者改變pdf 頁面各對象的外觀情況, id 通過 getinfo 方法可以獲取。e.g. 默認(rèn)

7、的 pdf 頁面大小是a4 頁面大小,可以用這個方法來改變當(dāng)前頁面的大小。theDoc.SetInfo(theDoc.Page, "/MediaBox:Rect", "0 0 200 300");2. Rect 屬性這是一個很重要的屬性,abcpdf 里面生成pdf 的基本思路就是先確定一個rect 再向該 rect里里面添加內(nèi)容,所有的 pdf 對象都依賴rect ,用rect 來定位的。e.g. 在指定位置添加文字。theDoc.Rect.String ="14 14 576 770" ;theDoc.AddText( "

8、;Hello World" );當(dāng)然,可以在添加文字前設(shè)置字體和顏色等信息:theDoc.Font = theDoc.AddFont( "宋體 " , "ChineseS" );theDoc.FontSize = 12;theDoc.Color.String ="192,48,117" ;3. MediaBox 屬性設(shè)置 MediaBox 屬性只會影響后面添加的頁面大小,后面添加的頁面大小將會是MediaBox設(shè)置的大小。它不會影響已存在的頁面大小。改變已存在頁面大小用 setinfo 方法。4. Layer 屬性獲取或設(shè)置

9、當(dāng)前層,和 html 的層是一樣的,前面的層會覆蓋后面的層。默認(rèn)的 Layer 為 1 ,在最前面。AddHtml添加html代碼(將會被解析,!此方法不支持css)支持以下html標(biāo)記:<Head><Body><BR><P><H1> to <H6><List><UL><OL><LI><A><B><I><U><Strike><Sup><Sub><Font><StyleRun&

10、gt;<BlockQuote><Pre>e.g.Code:Doc theDoc = new Doc();theDoc.FontSize = 72;theDoc.AddHtml("<b>Gallia</b> est omnis divisa in partes tres, quarum unamincolunt<b>Belgae</b>, aliam <b>Aquitani</b>, tertiam qui ipsorum lingua <b>Celtae</b>,

11、nostra <b>Galli</b> appellantur.");theDoc.Save(Server.MapPath("docaddhtml.pdf");theDoc.Clear();5. AddImageHtml 方法virtual int AddImageHtml(string html)virtual int AddImageHtml(string html, bool paged, int width, bool disableCache)html 需要添加的 htmlpaged 是否分頁, true 啟用分頁width 頁面

12、的寬度(瀏覽器解析html 時瀏覽器的寬度)disableCache 是否忽略緩存, true 不啟用緩存, false 啟用緩存,緩存時間 5 分鐘 return 返回添加的 html 對象 id說明:這個方法和 AddImageUrl 基本上是一樣的,只不過這個直接用的 html , AddImageUrl 用的是 url 地址。這個方法將用傳入的 html 生成一個臨時文件,然后解析該臨時文件來為 pdf 添加相關(guān)內(nèi)容。這個是一個很簡單的方法,它不提供任何性能上的提升。如果是在 中使用, 需要 IIS 擁有對臨時文件夾的完全訪問權(quán)限, 否則將會出現(xiàn)錯誤。 如果 html 內(nèi)含有外部的樣式

13、和圖片,則需要用絕對地址,因為傳入的 html 沒有具體的地址,將會無 法解析其包含的相對地址。如果必須用相對地址,請用 AddImageUrl 方法。 e.g.Code: Doc theDoc = new Doc();using (StreamReader sReader = new StreamReader(Server.MapPath("s.html")theDoc.AddImageHtml(sReader.ReadToEnd(),true,760,true);6. AddImageUrl 方法virtual int AddImageUrl(string url)vi

14、rtual int AddImageUrl(string url, bool paged, int width, bool disableCache)參數(shù)說明同上,只不過是將html 換成了 url 。說明:通過這個方法可以很方便的將一個web page 添加到 pdf 文件,其解析web page 用的是 ie 的內(nèi)核 (版本估計和機(jī)器上安裝的版本相關(guān), 有興趣可以利用 css 測試一下) 。 值得注意的一個問題是pdf 的 dpi 是 72 , 通常 html 的 dpi 是 96, 所以如果要pdf 上顯示的和瀏覽器上看到的一樣大,那么在設(shè)置rect 大小(會填滿所設(shè)置的 rect )的

15、時候需要用 width 參數(shù)乘以 72/96 。e.g.Code :Doc theDoc = new Doc();theDoc.AddImageUrl("theDoc.Save(Server.MapPath("htmlimport.pdf");theDoc.Clear();4、 進(jìn)階,如何分頁在利用 html 轉(zhuǎn) pdf 的時候,通常都會遇到的問題。 abcpdf 會進(jìn)行智能的分頁,而分頁的實現(xiàn)也只需要幾行代碼。int theID = theDoc.AddImageUrl("http:/localhost:1141/WebSitePDF/000001.O

16、F.html",true, 760, true);/ 以下實現(xiàn)多頁效果while (true)theDoc.FrameRect();/ 畫 Rect 的邊框if (!theDoc.Chainable(theID)break;theDoc.Page = theDoc.AddPage();theID = theDoc.AddImageToChain(theID);如果需要在分頁時不對模塊進(jìn)行截斷,請為相應(yīng)模塊添加打印樣式“ page-break-inside:avoid ” 如 果 需 要 在 指 定 位 置 進(jìn) 行 強(qiáng) 制 分 頁 , 請 添 加 :“ <divstyle=&qu

17、ot;page-break-before:always">&nbsp;</div> ”其中“ &nbsp; ”是必須要的。經(jīng)過我的實驗此強(qiáng)制分頁標(biāo)記并不是任何時候都分頁的,用之前注意針對指定的 html 代碼進(jìn)行測試。推薦用自動分頁+保證模塊完整性樣式。對于需要設(shè)置頁眉和頁腳的,也很簡便,只要將頁面分成三個rect (頁眉,頁腳,中間內(nèi)容) ,分頁的時候?qū)?nèi)容添加到中間的 rect ,分頁完畢后再分別補(bǔ)充頁面,頁腳。e.g.Code :theDoc.Rect.String = "14 35 576 803"int theID =

18、theDoc.AddImageUrl(url, true, 760, true);/ 以下實現(xiàn)多頁效果while (true)if (!theDoc.Chainable(theID)break;theDoc.Page = theDoc.AddPage();theID = theDoc.AddImageToChain(theID);for (int i = 1; i <= theDoc.PageCount; i+)theDoc.PageNumber = i;/ 表頭theDoc.Rect.String = "14 803 576 835"theDoc.AddImageU

19、rl(urlTop, false, 760, true);/ 表尾theDoc.Rect.String = "14 35 576 5"theDoc.AddImageUrl(urlBottom, false, 760, true);5、 運(yùn)行 js , js 支持abcpdf 支持 html 頁面腳本 JavaScript , 這讓我們利用 html 生成 pdf 時多了一個利器,可以通過 js 改變 html , 再生成 pdf 。 如何執(zhí)行頁面上的 js 呢?下面將介紹幾個相關(guān)的屬性。注意這個受運(yùn)行機(jī)器瀏覽器安全設(shè)置限制,如果瀏覽器安全級別很高或者限制了 js 的運(yùn)行,在

20、調(diào)用 js 的時候?qū)箦e: Unable to apply Jscript Windows error 5. Access is denied.1. theDoc.HtmlOptions.UseScript是否啟用腳本,默認(rèn)為 false 不啟用2. theDoc.HtmlOptions.OnLoadScript當(dāng)啟用腳本時, 頁面載入后執(zhí)行的腳本, 可以是一段js 代碼, 也可以是 html 頁面包含函數(shù)方法3. theDoc.HtmlOptions.HostWebBrowser是否啟用 WebBrowser,默認(rèn)為false 不啟用。只有在啟用了 WebBrowser后,left, to

21、p, width, height, offsetLeft, offsetTop, offsetWidth, offsetHeight, clientLeft, clientTop,clientWidth, clientHeight, pixelLeft, pixelTop, pixelWidth, pixelHeight, posLeft, posTop, posWidth, and posHeight 這些 dom方法才可用,否則都是0。在啟用 WebBrowser后,還可以用用 xml , xslt 。e.g.Code :theDoc.HtmlOptions.UseScript = true;theDoc.HtmlOptions.HostWebBrowser = true;theDoc.HtmlOptions.OnLoadScript="vardivs=document.getElementById('content').childNodes;if(divs0.scrollHeight<divs 1.scrollHeight)divs0.style.height=divs

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論