html pdf支持css%写法吗,C#下使用iTextSharp实现HTML生成PDF,支持CSS和中文

简要

iTextSharp的功能很强大,之前我也写过使用pdf模板来生成PDF的文章(《使用iText5来处理PDF》),当然这里我还是使用iTextSharp5这个版本,原因是这个版本还是开源免费的。

前面不多说,还是通过nuget来安装iTextSharp5,这里还需要安装itextsharp.xmlworker,之后开始做html模板,及对应的css。这里需要注意的是,div等可以有宽度的标签,css中不能有width/height这种标签,但是可以用max-width,另外如果有图片的话,需要转成base64代码,文件的编码格式需要使用纯净的utf-8编码保存,不能使用其他编码及带BOM的utf-8,css需要是单独的一个文件,或者是在html标签中使用内联的方式。我这里使用的是独立的css文件,另外我的例子里是保存pdf到服务器上,如果生成之后需要直接让用户下载,那么只需要小改动就可以,我这里就不做改动了。

代码using iTextSharp.text;

using System.IO;

using System.Text;

using iTextSharp.text.pdf;

using iTextSharp.tool.xml;

using iTextSharp.tool.xml.html;

using iTextSharp.tool.xml.pipeline.html;

using iTextSharp.tool.xml.pipeline.css;

using iTextSharp.tool.xml.parser;

using iTextSharp.tool.xml.pipeline.end;

public static void Create()

{

string css = System.Web.HttpContext.Current.Request.MapPath("/html/stype.css"); //css物理路径

string html = FileObj.ReadFile(System.Web.HttpContext.Current.Request.MapPath("/html/template.html"), Encoding.UTF8); //读取html模板内容

string pdf = System.Web.HttpContext.Current.Request.MapPath("/pdf/file.pdf"); //设置生成pdf的保存路径

using (var ms = new FileStream(pdf,FileMode.Create))

{

using (var document = new Document(iTextSharp.text.PageSize.A4)) //设置页面大小

{

using (PdfWriter writer = PdfWriter.GetInstance(document, ms))

{

document.Open();

using (var strReader = new StringReader(html))

{

XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);

// 注册指定的字体,第二个参数是给字体命名,在css中需要指定字体 //fontProvider.Register(System.Web.HttpContext.Current.Request.MapPath("/fonts/simhei.ttf"), "simhei");

fontProvider.RegisterDirectory(@"C:\Windows\Fonts"); //直接注册全部的系统字体

CssAppliers cssAppliers = new CssAppliersImpl(fontProvider);

//设置factories

HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers);

htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());

//设置css

ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);

cssResolver.AddCssFile(css,true);

//生成导出

IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, writer)));

var worker = new XMLWorker(pipeline, true);

var xmlParse = new XMLParser(true, worker);

xmlParse.Parse(strReader);

xmlParse.Flush();

}

document.Close();

}

}

}

}

其他说明

1.中文

如果要支持中文,在css中一定要设置支持中文的字体,比如内容的最外面是body标签,可以直接设置

body{font-family:'simhei';}

类似这样的,或者是对应的标签指定要使用的字体。

2.分页

如果对自动分页的位置不满意,可以通过css来控制分页。

创建分页:style="page-break-after: always;"

避免分页:style="page-break-inside: avoid;"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值