IText7-pdfHTML-itext7必须导入2种字体(标准和粗体),而itext5仅需要一种字体就可以工作

问题描述 投票:0回答:1

我找不到覆盖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)中,对我来说效果很好。

有人有什么想法/解决方案吗?我真的很感激。

c# asp.net-mvc itext itext7
1个回答
1
投票

无法在您的问题上发表评论,所以我只想在这里问:您打算什么时候使用定制字体?因为在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

© www.soinside.com 2019 - 2024. All rights reserved.