我已经将我的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();
}
}
}