我已将我的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。
答案 0 :(得分:0)
您需要创建实现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();
}
}
}