日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ABCpdf.NET 的简易使用指南

發(fā)布時間:2025/5/22 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ABCpdf.NET 的简易使用指南 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  簡單介紹

?  iTextSharp是一個很強大的動態(tài)創(chuàng)建pdf的工具, 可是缺少一個可以直接轉(zhuǎn)換html到pdf的功能, 而這個功能用ABCpdf.NET輕而易舉的實現(xiàn), 特此向大家介紹一下ABCpdf的用法
?  當(dāng)然, iTextSharp是免費的, ABCpdf是需要付費的

  First, 我們要把ABCpdf這個dll加入到工程的引用

  Secod,? 然后using其命名空間

??using?WebSupergoo.ABCpdf5;?//一般加入這個聲明就夠了,下面2個基本上很少有用
??using?WebSupergoo.ABCpdf5.Objects;
??
using?WebSupergoo.ABCpdf5.Atoms;?

  安裝和分發(fā):

  ABCpdf的功能全部是2個DLL提供的

  ABCpdfCE5.DLL 核心引擎庫
  ABCpdf.DLL dotNET接口庫

  它的安裝程序會自動的把ABCpdf.dll加入到GAC, 把ABCpdfCE5.dll復(fù)制到System32目錄下

  對于我們開發(fā)來說,最簡單的莫過于將這2個DLL都放置到BIN目錄下即可

  開始使用:?

??Doc?theDoc?=?new?Doc();??//創(chuàng)建一個Doc對象

?

XSettings.License?=?"change?this?text?to?your?key";?//分發(fā)正式程序的時候需要設(shè)置License

  如果是分發(fā)演示程序, 則可以設(shè)置為從PDFSettings這個程序里取得的試用授權(quán)碼

??? theDoc.SetInfo(0,?"License",?"cd9b5c07db69df2bf57c0a04d9bca58b10c44889c9fb197984e592f49addfce5ec5fe85d7b9205bc");

  字體和語言

  如果你要輸出的是英文文檔,一般直接用其內(nèi)置的基本字體就可以了。

  基本字體包括:

? Times-Roman
? Times-Bold
? Times-Italic
? Times-BoldItalic
? Helvetica
? Helvetica-Bold
? Helvetica-Oblique
? Helvetica-BoldOblique
? Courier
? Courier-Bold
? Courier-Oblique
? Courier-BoldOblique
? Symbol
? ZapfDingbats

  pdf的中文字體有2種實現(xiàn),一種是內(nèi)嵌字體(Embed),就是把用到的漢字的字體部分保存到pdf,這樣即使在沒有安裝那種字體的機器上也能看到正確的字體顯示,優(yōu)點是文檔在不同機器上的效果都能保持一致, 且顯示的效率也比較高, 缺點就是文檔會變大一點, 嵌入字體的時候可以通過設(shè)置subset來確定是否嵌入整個字體還是只有用到的部分?

??int?theFont?=?theDoc.EmbedFont("Verdana",?"Latin",?false,?true);
??theDoc.FontSize?
=?12;?//設(shè)置默認(rèn)字體大小

  這句表示嵌入一個Verdana的拉丁字體, false 代表水平顯示, true 代表嵌入子集(這個我也沒搞太明白)

  theFont是返回字體的Object ID,這個ID可以直接賦給theDoc.Font來設(shè)置其為默認(rèn)字體

  另一種是引用字體(Refs), 這種方式因為是引用, 所以不會導(dǎo)致文檔變大, 但是引用的方式必須要求觀看文檔的時候需要用較新版本的Acrobat (Reader), 并且必須安裝有語言包才能正確顯示文檔

??theDoc.Font?=?theDoc.AddFont("隸書",?"ChineseS");?

  加入引用隸書這個中文字體, ChineseS是代表簡體中文, 還有: Latin, Unicode, Korean, Japanese, ChineseT可以選擇

  字體的名字還可以用其英文(eg: LiSu)或文件名(eg: SIMLI.TTF)指示


  坐標(biāo)系

  pdf的坐標(biāo)系不同于Windows所用的左上為原點的坐標(biāo)系, 它是采用左下為坐標(biāo)原點的, 如果你實在不習(xí)慣使用這種坐標(biāo),你可以通過設(shè)置Doc的TopDown為true來改變原點的位置

  Doc.Rect屬性可能是最重要的屬性了, 如果要輸出什么東西的話, 都是輸出到Rect所指定的矩形范圍內(nèi)

  ABCpdf默認(rèn)的文檔大小為612x792 pixel,也就是8.5x11 inch, 默認(rèn)DPI為72

  HTML / CSS 呈現(xiàn)

  ABCpdf完全支持HTML和CSS

  ABCpdf使用Internet Explorer的HTML引擎來解析和預(yù)處理要插入到pdf的HTML

  屏幕的解析度通常是96 dpi, 而pdf的dpi為72, 因此打印出來的文檔會比屏幕上看到的要大

  你可以使用CSS中的page-break-before, page-break-after 和 page-break-inside來控制分頁, 但是需要注意以下的代碼:?

??<div?style="page-break-before:always">&nbsp;</div>?

  ... 會分頁 ...??

??<div?style="page-break-before:always"></div>

  ... 則不會分頁, 我估計是因為空對象被優(yōu)化掉了

  下面的代碼演示如何轉(zhuǎn)換html到pdf?

??theDoc.Rect.Inset(24,?48);
??
//Rect默認(rèn)是文檔整個頁面大小,?這里的Inset表示將Rect左右留出24的空白,上下留出48的空白
??int?theID?=?theDoc.AddImageUrl(edtURL.Text);
??
while?(true)
??
{
????
if?(!theDoc.Chainable(theID))
??????
break;
????theDoc.Page?
=?theDoc.AddPage();
????theID?
=?theDoc.AddImageToChain(theID);
??}

  后面的這個循環(huán)很重要, 不然的話, 就只能把html輸出到一頁, 這一點不像iTextSharp是自動分頁的

  把一個復(fù)雜內(nèi)容輸出為多頁, 都要采用這種循環(huán)加入Chain的方式, 比如需要添加很長一段的html或text

  代碼很簡單, 無需多說, 需要注意的是HTML不管動態(tài)的還是靜態(tài)的, 都應(yīng)該沒有問題, 但是如果是類似BBS之類基于Cookie的動態(tài)頁面的話, 會取不到需要的頁面的

  再補充一點, 因為ABCpdf.NET本身是具有緩存設(shè)計的, 其獲得網(wǎng)頁是通過IE來獲取的, 因此轉(zhuǎn)換動態(tài)HTML的時候, 有可能會遇到?jīng)]有更新的問題, 具體的描述請參閱幫助, 我就不多費口舌了

  圖像處理

  用ABCpdf展現(xiàn)圖片有2種方式, 一種是直通模式, 直接把圖片添加到Doc對象里, 比如使用 Doc.AddImageFile, Doc.AddImageData方法

  另一種是是非直接的方式, 在添加圖像對象到文檔之前, 先把數(shù)據(jù)畫到圖像對象里

  相比之下, 非直接的方式有以下優(yōu)點

  因為每張圖在轉(zhuǎn)換為圖像對象的時候就已經(jīng)完全解碼, 因此在這個時候就能夠捕獲到圖像文件格式無效之類的錯誤, 雖然有問題的圖像不是經(jīng)常遇到, 但是如果你使用直通模式的話, 則很有可能導(dǎo)致pdf把有問題的圖像文件包含進去, 從而導(dǎo)致pdf文檔在瀏覽的時候報告錯誤

  當(dāng)然使用直通模式不需要解壓和壓縮圖像, 會比非直接模式執(zhí)行速度要快

  Image對象一般使用Flate來壓縮, 這種壓縮方式與PNG圖像的壓縮方法一樣, 這是一種無損的壓縮方法, 這樣可以保證圖像的品質(zhì)不會變差, 如果加入的圖像是黑白的, ABCpdf會使用CCITT G4 fax壓縮, 這種方法可以顯著的減小圖像的大小

  下面這段代碼就是采用的非直接模式來添加一個圖像到指定的位置

??XImage?theImg?=?new?XImage();
??theImg.SetFile(
@"C:\Cover.jpg");
??theDoc.TopDown?
=?true;
??theDoc.Rect.Left?
=?100;
??theDoc.Rect.Top?
=?100;
??theDoc.Rect.Width?
=?theImg.Width;
??theDoc.Rect.Height?
=?theImg.Height;
??theDoc.Rect.Magnify(
2,?2);??//把圖像放大2倍
??theDoc.AddImageObject(theImg,?false);

  Grid & Rect?

??theDoc.Page?=?theDoc.AddPage();?//準(zhǔn)備輸出內(nèi)容到新的一頁
??theDoc.AddGrid();?//這個是讓頁面輸出類似坐標(biāo)紙樣的表格,?可以幫助開發(fā)者更好地定位輸出
??theDoc.Color.String?=?"0?255?0";?//設(shè)置默認(rèn)顏色為綠色
??theDoc.Width?=?4;?//?這個是設(shè)置刷子的寬度為4
??theDoc.Rect.Position(100,?200);?//指定左下角輸出位置為100,200
??theDoc.Rect.Width?=?400;
??theDoc.Rect.Height?
=?500;
??theDoc.FrameRect();?
//畫Rect的邊框

  Header & Footer

  如果我們是用PDF作為報表輸出的話, 當(dāng)然需要在每一頁上出現(xiàn)表頭和頁腳

??theDoc.Rect.String?=?"24?750?588?778";??//直接通過這種方式指定表頭輸出區(qū)域
??theDoc.HPos?=?0.5;?//居中,?0代表居左,?1代表居右
??theDoc.VPos?=?0.5;?//居中,?0代表靠上,?1代表靠下
??theDoc.Color.String?=?"0?0?255";?//藍色
??for?(int?i?=?1;?i?<=?theDoc.PageCount;?i++)
??
{
????theDoc.PageNumber?
=?i;
????theDoc.AddHtml(
"this?is?<b><font?pid="?+?theFont.ToString()?+?">header</font></b>");
????
//?ABCpdf支持html語法,?這里的font標(biāo)簽可以讓你選擇使用不同的字體輸出
????theDoc.AddLine(24,?750,?588,?750);?//畫一條分隔線
??}

  畫頁腳和畫頁頭是一樣的, 主要就是位置和內(nèi)容有不同

??theDoc.Rect.String?=?"24?12?588?40";
??theDoc.HPos?
=?1.0;?//Right
??theDoc.VPos?=?0.5;?//Middle
??theDoc.Color.String?=?"0?0?255";
??
for?(int?i?=?1;?i?<=?theDoc.PageCount;?i++)?
??
{
????theDoc.PageNumber?
=?i;
????theDoc.AddHtml(
"<u>this?is?footer</u>?"?+?i.ToString()?+?"?/?"?+?theDoc.PageCount.ToString());
????theDoc.AddLine(
24,?40,?588,?40);
??}

  壓縮pdf

  在輸出完所要輸出的內(nèi)容后, 我們可以調(diào)用Flatten來對生成的文檔壓縮一下, 因為加入的對象是分布在不同的層上, 所以調(diào)用這個函數(shù)可以合并當(dāng)前頁上的所有層, 同時重新壓縮層上的數(shù)據(jù)

  如果頁面上的對象比較少的話, 壓縮后是看不出有明顯的效果, 但是如果頁面上是有很復(fù)雜的表格之類的話, 壓縮率甚至可以高達5倍以上

  需要注意的是, 壓縮之后, 之前保存的Object ID會不再有效, 因為對象已經(jīng)被重新生成, 所以壓縮操作最好放到最后來做?

??for?(int?i?=?1;?i?<=?theDoc.PageCount;?i++)?
??
{
????theDoc.PageNumber?
=?i;
????theDoc.Flatten();
??}

  更高級的應(yīng)用

  ABCpdf還支持用AddMovies在pdf中嵌入Flash(SWF), AVI, MPEG和WMV

  ABCpdf支持創(chuàng)建電子表單, 不過這已經(jīng)超過我使用的目的了, 因為我要做的是用pdf輸出報表

  此外, 我感到不方便的就是,似乎ABC.net沒有去封裝文檔屬性里面的東西, 比如title, subject, author, 而是直接提供的Doc.SetInfo來修改, 而這個方法用起來不是很方便, 因為你必須要先了解Adobe PDF Specification, 才能用正確, 這一點上遠不如iTextSharp方便

  ok, 就這么多了,寫這個東西已經(jīng)花了我不少的時間了

轉(zhuǎn)載于:https://www.cnblogs.com/Icebird/archive/2006/04/27/ABCpdfdotNETManual.html

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的ABCpdf.NET 的简易使用指南的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91日本在线 | 国产中文一区二区三区 | 超碰在线a | 黑丝久久 | 丰满人妻一区二区三区免费 | 日韩视频免费在线观看 | 天堂av资源| 国产.com | 992tv在线成人免费观看 | www欧美| 最近中文字幕在线中文视频 | 日韩精品一区二区三区高清免费 | 色人阁五月天 | 国产中文视频 | 黄色片毛片 | 国产一卡在线 | 久久91亚洲精品中文字幕奶水 | 日韩欧美一区二区在线 | 欧美风情第一页 | 亚洲精品中文字幕乱码三区 | 久久婷婷五月国产色综合激情 | 自拍视频在线 | 已婚少妇美妙人妻系列 | 久久av高潮av无码av喷吹 | 天堂网成人 | 国产欧美综合视频 | 79日本xxxxxxxxx18 婷婷亚洲一区 | 久久婷婷av | 少妇日皮视频 | 人妻丰满熟妇岳av无码区hd | 99热视| 日本天堂在线视频 | youjizz国产精品 | 中文在线资源 | 国产欧美一区二区精品久久久 | 国产精品久久久久久久免费 | 日本黄网站色大片免费观看 | 欧美黑人一级爽快片淫片高清 | 日本免费a级片 | av片手机在线观看 | 日韩乱码在线观看 | 九九99久久| 成人午夜影片 | 欧美一级无毛 | 97精品国产97久久久久久免费 | 久久久免费看 | 未满十八18禁止免费无码网站 | 中文字幕有码视频 | 亚洲国产精品va在线 | 国产精品久久AV无码 | 国产在线精品观看 | xxxx999| 欧美人体一区二区三区 | 黄色a∨ | 女人下边被添全过视频 | 农村少妇无套内谢粗又长 | 免费观看av网站 | 日批视频免费 | 香蕉精品视频在线观看 | 又嫩又硬又黄又爽的视频 | 天堂网国产 | 奇米影视四色7777 | 免费亚洲一区 | 波多野结衣中文在线 | 国产一级片免费在线观看 | 亚洲欧美精品suv | 高潮毛片7777777毛片 | xxxx.国产| 国产精品网站在线观看 | 又大又硬又爽免费视频 | 久久av中文字幕 | 亚洲天堂男人的天堂 | 国产做爰免费观看视频 | 欧美精品免费看 | 天天躁日日躁狠狠躁av麻豆男男 | 欧美日韩久久婷婷 | 日韩一级片在线播放 | 尤物视频网站在线观看 | www.在线观看视频 | 99人妻碰碰碰久久久久禁片 | 国产专区在线视频 | 免费看黄在线网站 | av在线播放国产 | 亚洲视频一区二区在线观看 | 欧美一区二区区 | 不卡av在线 | 日本三级中文字幕 | 精品aaa| 中国久久久久 | 美乳人妻一区二区三区 | 中文字幕久热 | 亚洲第一综合网 | av动漫免费看 | 99热欧美 | 97精品久久人人爽人人爽 | 亚欧精品在线观看 | 无码人妻aⅴ一区二区三区有奶水 | 国产精品久久久久国产a级 国产一区二区在线播放 | 日本高清免费观看 |