c#中使用ABCpdf处理PDF,so easy
QQ交流群:276874828 (ABCpdf )
这几天项目中需要将页面导成PDF,刚开始使用iTextSharp,觉得在分页处理上比较复杂,后来无意中看到了ABCpdf,使用非常简单,并将一些常用操作记录下来,平时可以瞅瞅,也分享给大家伙们,废话不多说,直接贴代码。
2013/7/6修改:昨天发了这篇博文之后,今天发现不在首页显示了,好生奇怪,原来博客园发来了消息,被过滤了,我这发的是个人分享我擦,不就是有个官网链接,并且代码多一点吗,给我封了干嘛???
ABCpdf简介
官方网站:http://www.websupergoo.com/
demo用的是当前的最新版本ABCpdf .NET 9.1 X64,支持当前最新的win8,IE10(服务器版本)以及旧版本server2003,xp,vista,win7,win8
ABCpdf有30天的试用期
引用方式,安装ABCpdf组件,有两个DLL是有用的,需要对ABCpdf.dll添加引用,ABCpdf9-64.dll(引擎组件)放在bin目录下就可以了
它有其他组件比如(iTextSharp)所不具备的功能,如能直接指定一个URL就可以将页面转换为PDF,这也是它的强大之处
在选择版本时要注意,区分64位和32位,如果版本放错了,会发生错误,在IIS的部署上一定要注意,这里很可能会出现问题,请参考官方资料:http://www.websupergoo.com/support.htm 常见问题介绍的比较详细
用法简介
下面上一点代码看看吧。
添加引用:
using WebSupergoo.ABCpdf9;
string url = "http://www.websupergoo.com/support.htm";
        private void DownloadPDF(string fileName, byte[] buffer)
        {
            Response.Buffer = false;
            Response.AddHeader("Connection", "Keep-Alive");
            Response.ContentType = "application/octet-stream";
            Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
            Response.AddHeader("Content-Length", buffer.Length.ToString());
            Response.BinaryWrite(buffer);
        }
        private string GetFileName()
        {
            return DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".pdf";
        }
        /// <summary>
        /// 指定URL生成PDF
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Button1_Click(object sender, EventArgs e)
        {
            string fileName = GetFileName();
            Doc doc = new Doc();
            doc.Page = doc.AddPage();//新建一个页面
            doc.Rect.Inset(, );//设置矩形边距
            int id = doc.AddImageUrl(url, true, , false);//添加一个URL的页面返回一个页面ID
            //以下这段代码很重要,关系到分页,如果不写这段代码,就无法分页
            while (true)
            {
                //这个判断应该是判断id是否是页面对象,如果不是,就跳出循环
                if (!doc.Chainable(id))
                {
                    break;
                }
                doc.Page = doc.AddPage();
                id = doc.AddImageToChain(id);//这里是将这个可链接的对象ID添加到页面并返回一个id
            }
            doc.Flatten();//压缩pdf
            doc.Save(Server.MapPath(fileName));//这里保存pdf到相对路径
            //你也你可以这样做把文件输出
            byte[] buffer = doc.GetData();//得到bytes[]
            DownloadPDF(fileName, buffer);
        }        
        /// <summary>
        /// 自定义页面
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Button2_Click(object sender, EventArgs e)
        {
            string fileName = GetFileName();
            Doc doc = new Doc();
            doc.Page = doc.AddPage();//新建一个页面
            doc.Rect.Inset(, );//设置矩形边距,这里Rect是一个重要的对象,你也可以doc.Rect.String来设置属性
            doc.FontSize = ; //设置默认字体大小
            doc.Color.String = "89,89,254";
            int id = doc.AddText("Hello World!!!");//添加文字
            doc.FrameRect(); //添加边框操作
            doc.Save(Server.MapPath(fileName));
            byte[] buffer = doc.GetData();
            DownloadPDF(fileName, buffer);
        }
        /// <summary>
        /// 支持HTML元素
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Button3_Click(object sender, EventArgs e)
        {
            string fileName = GetFileName();
            Doc doc = new Doc();
            doc.Page = doc.AddPage();
            doc.Rect.Inset(, );
            doc.AddHtml("<h2>How to use the ABCpdf</h2>");
            doc.AddHtml("<hr>");
            doc.AddHtml(@"<p>Use ABCpdf to create Adobe PDF documents on the fly. You won't believe how simple - yet how powerful it truly is. Find out more...
                            If you've been using Version 8 you'll love Version 9. It includes many powerful new features designed to make your life easier. Find out more... or check out our Feature Chart...
                            ABCpdf .NET is a .NET Native product encapsulated in an easy-to-deploy set of DLLs. It also offers a virtualized COM interface designed for backwards compatibility with ABCpdf ASP and Classic ASP/COM.
                            ABCpdf is normally priced from $329. However as a special offer we'll give you a free license key - all you have to do is link back to our web site. For full details check out our link guidelines...</p>");
            //这里是不是很神奇,html都支持,很灵活,赞一个
            doc.Save(Server.MapPath(fileName));
            byte[] buffer = doc.GetData();
            DownloadPDF(fileName, buffer);
        }
        /// <summary>
        /// 自定义页眉页脚
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Button4_Click(object sender, EventArgs e)
        {
            string fileName = GetFileName();
            Doc doc = new Doc();
            doc.Page = doc.AddPage();
            doc.Rect.Inset(, );
            doc.AddHtml("<h2>How to use the ABCpdf</h2>");
            doc.AddHtml("<hr>");
            //自定义页眉
            doc.Rect.String = "24 750 588 778";  //记得这里要定位哦
            doc.HPos = ; //居中, 0代表居左, 1代表居右
            doc.VPos = 0.5; //居中, 0代表靠上, 1代表靠下
            doc.Color.String = "blue"; //蓝色
            for (int i = ; i <= doc.PageCount; i++)
            {
                doc.PageNumber = i;
                doc.AddHtml("<b><font>" + "Laozhao learn ABCpdf,Save time for" + DateTime.Now.ToString() + "</font></b>");
                doc.AddLine(, , , ); //画一条分隔线
            }
            //页脚
            doc.Rect.String = "24 12 588 40";
            doc.HPos = 1.0; //Right
            doc.VPos = 0.5; //Middle
            doc.Color.String = "black";
            for (int i = ; i <= doc.PageCount; i++)
            {
                doc.PageNumber = i;
                doc.AddHtml("<u>Page:</u> " + i.ToString() + " / " + doc.PageCount.ToString());
                doc.AddLine(, , , );
            }
            doc.Save(Server.MapPath(fileName));
            byte[] buffer = doc.GetData();
            DownloadPDF(fileName, buffer);
        }
以上就是我用到的一些部分功能,还有一些功能也非常好使
Doc还支持AddImageHtml
参数说明:
html:需要添加的html
paged:是否分页,true启用分页
width:页面的宽度(浏览器解析html时浏览器的宽度)
disableCache:是否忽略缓存,true不启用缓存,false启用缓存
需要提的一点还是技术支持方面,官网做的不错,一个support页面涵盖了很多常见问题以及解决方式,还算比较详尽了,祝大家使用的愉快。
c#中使用ABCpdf处理PDF,so easy的更多相关文章
- c#中使用ABCpdf处理PDF
		
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...
 - 在C#.NET中,如何生成PDF文件?主要有以下几个途径
		
1.使用.NET文件流技术:若通过.NET的文件流技术生成PDF文件,必须对PDF文件的语法很清楚,例如BT表示实体内容开始:ET表示实体内容结束:TD表示换行等等.我们可以从Adobe的官方网站上下 ...
 - 在Java代码中使用iTextPDF生成PDF
		
1. 生成PDF 载入字体 static { FontFactory.register("/fonts/msyh.ttf"); FontFactory.register(" ...
 - MVC中使用RazorPDF创建PDF
		
这篇文章主要介绍使用Nuget package中的RazorPDF简单的创建PDF的方法. 关于RazorPDF 这个Nuget Package由Al Nyveldt创建.它内部使用ITextShar ...
 - c# 中crystal report输出PDF文件
		
工程中引入以下crystal report的类库crystaldecisions.crystalreports.enginecrystaldecisions.reportsourcecrystalde ...
 - iOS 应用中加载文档pdf/word/txt
		
一.加载PDF文档:应用内打开文档.手机中其他应用打开文档 Demo 首先拖入一个文档pdf.word.txt,打开不同的文档知识 文件名字.类型修改即可 #import "ReadView ...
 - 网页中自适应的显示PDF
		
PDF格式呢,是一个高大的新式,如何在不同的浏览器中自适应显示,是一个值得研究的问题. 这里说明重点部分:获取浏览器宽高. IE中: document.body.clientWidth ==> ...
 - Docker中部署puppeteer导出pdf
		
最近在做puppeteer容器化的过程中发现问题. 在容器中npm install puppeteer仍然会报错,不能launch 随后错误提示中也给出了官方的文档,https://github.co ...
 - Java中常用的操作PDF的类库
		
iText iText是一个能够快速产生PDF文件的java类库.iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的.它的类库尤其与java Servlet有很好的给合.使用 ...
 
随机推荐
- cf 843 D Dynamic Shortest Path [最短路+bfs]
			
题面: 传送门 思路: 真·动态最短路 但是因为每次只加1 所以可以每一次修改操作的时候使用距离分层的bfs,在O(n)的时间内解决修改 这里要用到一个小技巧: 把每条边(u,v)的边权表示为dis[ ...
 - 个人环境搭建——搭建JDK环境
			
搭建JDK环境 开始之初先提醒两点: ①java是在bash环境下面的,虽然我也在.cshrc下面添加了环境变量,好像有点问题,需要继续改进: ②查看linux版本信息命令:cat /etc/issu ...
 - 三叉神经树 ( neuron )
			
三叉神经树 ( neuron ) 题目描述 计算神经学作为新兴的交叉学科近些年来一直是学术界的热点.一种叫做SHOI 的神经组织因为其和近日发现的化合物SHTSC 的密切联系引起了人们的极大关注. S ...
 - CDOJ  30  裸最短路 SPFA
			
最短路 Edit Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
 - springboot开启定时任务  添加定时任务 推送
			
最近在自学Java的springboot框架,要用到定时推送消息.参考了网上的教程,自己调试,终于调好了.下面将网上的教程归纳下,总结复习下. springboot开启定时任务 在SpringBo ...
 - express中放置静态文件
			
不使用模版引擎的话要直接添加html,可以使用express.static()中间件设定静态文件目录,然后将html文件放在里面,如:express默认静态文件目录为 app.use(express. ...
 - 80人环游世界(bzoj 2055)
			
Description 想必大家都看过成龙大哥的<80天环游世界>,里面的紧张刺激的打斗场面一定给你留下了深刻的印象.现在就有这么 一个80人的团伙,也想来一次环游世界. ...
 - 【CF1015D】Walking Between Houses(构造,贪心)
			
题意:从1开始走,最多走到n,走k步,总长度为n,不能停留在原地,不能走出1-n,问是否有一组方案,若有则输出 n<=1e9,k<=2e5,s<=1e18 思路:无解的情况分为两种: ...
 - BZOJ【1639】: [Usaco2007 Mar]Monthly Expense 月度开支
			
1639: [Usaco2007 Mar]Monthly Expense 月度开支 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 700 Solved: ...
 - LeetCode OJ--N-Queens II
			
https://oj.leetcode.com/problems/n-queens-ii/ N皇后问题,计算解的个数 class Solution { public: int totalNQueens ...