Как установить шрифт по умолчанию для iText7 / pdfhtml
Различные комментарии записываются в таблицу PDF. В таблице один столбец.
Комментарии поступают из редактора HTML из веб-приложения и содержат текст HTML, который выводится с помощью pdfhtml.
Примеры для комментариев:
- текст, выделенный жирным шрифтом и курсивом .
- большойсредний< span style = "font-size: 8px"> small
Весь вывод должен быть в Verdana, но должны появиться некоторые другие шрифты (AgencyFB) (в промежутках во втором примере).
Код
public byte[] CreateDoc()
{
using (MemoryStream stream = new MemoryStream())
{
using (PdfWriter writer = new PdfWriter(stream))
{
PdfDocument pdfDoc = new PdfDocument(writer);
Document doc = new Document(pdfDoc, PageSize.A4);
PdfFont font = PdfFontFactory.CreateRegisteredFont("Verdana", PdfEncodings.CP1252, true);
float fontSize = 11f;
Table table = new Table(1);
table.AddCell(new Cell().Add(new Paragraph("no Html").SetFont(font).SetFontSize(fontSize)));
string comment1 = "<div>a <b>bold</b> and an <i>italic</i> text.</div>";
string comment2 = "<div><span style=\"font-size: 18px\">large</span><div><div><span style=\"font-size: 11px\">medium</span><div><div><span style=\"font-size: 8px\">small</span></div>";
InsertHtmlCell(table, font, fontSize, comment1);
InsertHtmlCell(table, font, fontSize, comment2);
doc.Add(table);
doc.Flush();
doc.Close();
pdfDoc.Close();
writer.Close();
}
byte[] buffer = stream.ToArray();
return buffer;
}
}
private void InsertHtmlCell(Table table, PdfFont f, float fontSize, string comment)
{
var cell = new Cell(1, 1);
// Without ConverterProperties, "times" is used
ConverterProperties prop = new ConverterProperties();
prop.SetFontProvider(new DefaultFontProvider(false, false, true));
var elements = HtmlConverter.ConvertToElements(comment, prop).Cast<IBlockElement>();
foreach (var element in elements)
{
// without the following 2 lines always "AgencyFB" is used.
element.SetProperty(Property.FONT, f);
element.SetProperty(Property.FONT_SIZE, new UnitValue(UnitValue.CreatePointValue(fontSize)));
cell.Add(element);
}
table.AddCell(cell);
}
"жирный", "большой", "средний" и "маленький": AgencyFB "курсив": BookAntiqua
Но весь выход должен быть в Вердане. Как я могу этого достичь?
1 ответ
Вы говорите поставщику шрифтов загрузить все системные шрифты. Если вам определенно не нужны все они, вы можете просто иметь белый список шрифтов, которые вы хотите использовать. В вашем случае вам нужно добавить шрифты Verdana Regular, Verdana Bold и Verdana Italic.
Вот как это можно сделать:
FontProvider fontProvider = new DefaultFontProvider(false, false, false);
fontProvider.addFont("C:/Windows/Fonts/verdana.ttf");
fontProvider.addFont("C:/Windows/Fonts/verdanab.ttf"); // Bold
fontProvider.addFont("C:/Windows/Fonts/verdanai.ttf"); // Italic