我找不到覆盖GetFont()的方法,所以我还必须包括2种字体(普通字体和粗体字体)。以这种方式使我的pdf文件增加一倍。太可怕了。
GeneratePdf()方法
private static byte[] GeneratePdf(string htmlString, string rootPath)
{
using (var stream = new MemoryStream())
{
using (var pdfWriter = new PdfWriter(stream))
{
using (var pdfDocument = new PdfDocument(pdfWriter))
{
pdfDocument.SetDefaultPageSize(PageSize.A4);
pdfDocument.SetDefaultPageSize(PageSize.A4.Rotate());
var document = HtmlConverter.ConvertToDocument(htmlString, pdfDocument, GetConverterProperties(rootPath));
document.Close();
return stream.ToArray();
}
}
}
}
和GetConverterProperties()方法
private static ConverterProperties GetConverterProperties(string rootPath)
{
var fontPath = HttpContext.Current.Request.PhysicalApplicationPath + "Areas\\Font\\msyh.ttf";
var defaultFontProvider = new DefaultFontProvider(false, false, false);
var fontProgram = FontProgramFactory.CreateFont(fontPath);
defaultFontProvider.AddFont(fontProgram);
return new ConverterProperties().SetBaseUri(rootPath)
.SetFontProvider(defaultFontProvider);
}
您可以看到fontPath的值,我只包含一种字体msyh.ttf,在itext5(又名ItextSharp)中,对我来说效果很好。
有人有什么想法/解决方案吗?我真的很感激。
无法在您的问题上发表评论,所以我只想在这里问:您打算什么时候使用定制字体?因为在iText 7中,HtmlConverter可以自行获得字体。您唯一需要做的就是创建一个新的ConverterProperties对象,并将基本文件夹URI传递给它。这样做时,转换器将具有必要的上下文,以单独包括字体。我将在下面提供一个简短示例说明需要做的事情:
HTML:
<html><head>
<style type="text/css">
@font-face { font-family: MPLUS; src: url('MPLUS1p-Regular.ttf'); }
</style>
</head>
<body>
<div style="position:relative;min-height: 297mm;max-height: 297mm;width: 210mm">
<div style="width:100mm;background-color:red">
<p style="text-align:left;font-size:3.52mm;font-family:'MPLUS', sans-serif;line-height:5.56mm">...content...</p>
</body>
</html>
。NET:
public void manipulatepdf()
{
ConverterProperties prop = new ConverterProperties();
prop.SetBaseUri("src/main/resources/");
HtmlConverter.ConvertToPdf(HTML,new FileStream(DEST,FileMode.Create),prop);
}
当将字体如上所述添加到HTML中,并且使用ConverterProperties设置我们的基本目录时,我们的HtmlConverter将具有必要的上下文来正确地自行解析字体。
亲切的问候,KaeseKüchen