【发布时间】:2016-03-28 13:11:12
【问题描述】:
我正在用 ASP.NET MVC5 应用程序中的 HTML 使用 iTextSharp (5.5.7.0) 创建一些 PDF 文档,但我无法更改字体。我已经尝试了几乎所有可以在 SO 或其他资源中找到的东西。
生成PDF的代码如下:
public Byte[] GetRecordsPdf(RecordsViewModel model)
{
var viewPath = "~/Template/RecordTemplate.cshtml";
var renderedReport = RenderViewToString(viewPath, model);
FontFactory.RegisterDirectory(Environment.GetFolderPath(Environment.SpecialFolder.Fonts));
using (var ms = new MemoryStream())
{
using (var doc = new Document())
{
doc.SetPageSize(PageSize.A4.Rotate());
using (var writer = PdfWriter.GetInstance(doc, ms))
{
doc.Open();
using (var html = new MemoryStream(Encoding.Default.GetBytes(renderedReport)))
{
XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, html, Encoding.Default);
}
doc.Close();
}
}
var bytes = ms.ToArray();
return bytes;
}
}
实际的 HTML 包含在 renderReport 字符串变量中(我有强类型的 .cshtml 文件,我使用 MVC Razor 引擎渲染该文件,然后以字符串形式返回 HTML)。
我尝试注册一些特定的字体,但没有帮助。我也尝试在我的机器上注册所有字体(如上例所示),但这也没有帮助。字体已加载我在调试模式下检查过。
CSS 像这样嵌入在 HTML 文件中(在标题、样式标签中):
body {
font-size: 7px;
font-family: Comic Sans MS;
}
(为了测试,我决定使用 Comic Sans,因为我可以轻松识别它,实际上我对 Arial Unicode MS 更感兴趣)。
而且我实际上可以使用 CSS 中的 font-family 属性更改字体,但只能使用 iTextSharp 默认预加载的字体 - Times New Roman、Arial、Courier 和其他一些字体(Helvetica我认为)。 当我将其更改为 - Comic Sans 或其他未预加载的 iTextSharp 时,会使用默认字体(我会说 Arial)呈现。
我需要更改字体的原因是因为我的渲染 HTML (ČĆŠĐŽčćšđž) 中有一些克罗地亚语字符,这些字符在 PDF 中丢失,目前我认为主要原因是 - 字体。
我错过了什么?
【问题讨论】:
标签: html asp.net-mvc pdf fonts itextsharp