将样式应用于类名为iTextSharp的div



我已经将我的html字符串定义为:

string html = @"
<html><body>    
<div class='class1'>My Text</div>    
</body></html>   
";

为了应用风格,我正在做这个

StyleSheet style = new StyleSheet();
style.LoadTagStyle("class1", HtmlTags.FACE , "PATH" + "CustomFont.ttf");

这不起作用。然而,使用这个应用字体:

style.LoadTagStyle(HtmlTags.DIV, HtmlTags.FACE , "PATH"+"CustomFont.ttf");

如何为特定类指定样式?我正在使用iTextSharp dll生成pdf。

您需要创建一个实现IFontProvider实例的类的实例。XMLWorker附带了一个已经实现了它的类,因此您可以使用XMLWorkerFontProvider类并通过它注册字体。Register()方法的第二个参数是可选的,但我建议您使用它来显式地为字体提供别名。

一旦你有了它,你就可以使用ParseXHtml()的长格式,它接受HTML和CSS的流。如果您正在从磁盘加载这两个文件中的任何一个,您应该检查编码。

下面的代码是针对iTextSharp和XMLWorker 5.2.4测试的完整工作示例。请参阅评论以了解更多详细信息。

//File to output
var testFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "test.pdf");
//Standard PDF setup, nothing special here
using (var fs = new FileStream(testFile, FileMode.Create, FileAccess.Write, FileShare.None)) {
using (var doc = new Document()) {
using (var writer = PdfWriter.GetInstance(doc, fs)) {
//Open our document for writing
doc.Open();
//Our basic HTML
var html = @"<html><body><div class=""class1"">My Text</div></body></html>";
//Fully qualified path to our font
var myFont = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "ALGER.TTF");
//Register our font and give it an alias to reference in CSS
var fontProv = new XMLWorkerFontProvider();
fontProv.Register(myFont, "AlgerianRegular");
//Create our CSS
var css = @".class1{font-family: AlgerianRegular; color: #f00; font-size: 60pt;}";
//Create a stream to read our HTML
using (var htmlMS = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(html))) {
//Create a stream to read our CSS
using (var cssMS = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css))) {
//Get an instance of the generic XMLWorker
var xmlWorker = XMLWorkerHelper.GetInstance();
//Parse our HTML using everything setup above
xmlWorker.ParseXHtml(writer, doc, htmlMS, cssMS, System.Text.Encoding.UTF8, fontProv);
}
}
//Close and cleanup
doc.Close();
}
}
}

最新更新