我目前正在将[[ASP.NET MVC(v 4.6.1
)和itext.html2pdf(v 2.1.5.0
)中的HTML文件转换为pdf文件。
在iText 5中,如果要使用其他大小或颜色的字体,则必须创建另一个Font对象。我们在iText 7中对此进行了更改:您只需要一个PdfFont对象。字体将更改文本的渲染模式并增加笔触宽度。这意味着我们仅在PDF中定义了一种字体。setBold()
但是,此示例是非常基本的(仅一个段落),而在我的情况下,必须将其从HTML转换为PDF文件。
到目前为止我尝试过的事情
GetStrategy
方法,但对我不起作用。public class FontProviderFactory : DefaultFontProvider
{
private static readonly string FontPath = HttpContext.Current.Request.PhysicalApplicationPath + "Areas\\font\\msyh.ttf";
private readonly FontProgram _fontProgram;
public FontProviderFactory() : this(false, false, false)
{
}
public FontProviderFactory(
bool registerStandardPdfFonts,
bool registerShippedFreeFonts,
bool registerSystemFonts) : base(registerStandardPdfFonts, registerShippedFreeFonts, registerSystemFonts)
{
_fontProgram = FontProgramFactory.CreateFont(FontPath);
AddFont(_fontProgram);
}
public override FontSelectorStrategy GetStrategy(string text, IList<string> fontFamilies, FontCharacteristics fc, FontSet additonalFonts)
{
fc.SetBoldFlag(fc.GetFontWeight() == 700);
fc.IsBold();
return new ComplexFontSelectorStrategy(text, GetFontSelector(fontFamilies, fc, additonalFonts), this, additonalFonts);
}
}
所以,我该如何正确使用SetBold()方法?
我的以下代码片段:
1。 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();
}
}
}
}
2。 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);
// .SetFontProvider(new FontProviderFactory()); Use it when I try to override the GetStrategy method
}
有人有什么想法/解决方案吗?我非常感谢。
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