ITEXT7: Как создать абзац смешивая различные шрифты?

193
04 апреля 2019, 01:30

Я использовал iText 7 в течение нескольких дней для создания pdf файлов и могу сказать, что он, к сожалению, сильно отличается от iText 5 и документация все еще недостаточно полна. Я пытаюсь создать абзац в котором используются два шрифта или два стиля (пример: жирный текст в середине абзаца)

При использовании iText 5 это можно сделать с помощью Chunks:

Font regular = new Font(FontFamily.HELVETICA, 12);
Font bold = Font font = new Font(FontFamily.HELVETICA, 12, Font.BOLD);
Phrase p = new Phrase("NAME: ", bold);
p.add(new Chunk(cc_cust_dob, regular));
PdfPCell cell = new PdfPCell(p);

В iText 7 я так и не нашел способа сделать это. У кого-нибудь получилось сделать это в последней версии iText? Примечание: Я использую C#, но Java тоже будет полезна.

Answer 1

Пожалуйста ознакомьтесь с документацией, особое внимание уделите разделу iText7: строительные блоки "Глава 1: Знакомство с классом PdfFont". Из этой главы вы узнаете, что используя iText7, намного проще переключать шрифты, потому как вы можете работать со стандартными шрифтами и их размерами, вы можете определять и повторно использовать Style объекты и т.д.

Пример:

PdfFont font = PdfFontFactory.createFont(FontConstants.TIMES_ROMAN);
normal.setFont(font).setFontSize(14);
Style code = new Style();
PdfFont monospace = PdfFontFactory.createFont(FontConstants.COURIER);
code.setFont(monospace).setFontColor(Color.RED)
    .setBackgroundColor(Color.LIGHT_GRAY);
Paragraph p = new Paragraph();
p.add(new Text("The Strange Case of ").addStyle(normal));
p.add(new Text("Dr. Jekyll").addStyle(code));
p.add(new Text(" and ").addStyle(normal));
p.add(new Text("Mr. Hyde").addStyle(code));
p.add(new Text(".").addStyle(normal));
document.add(p);

для начала мы определим Style, назовем его normal и укажем для него шрифт Times-Roman размером в 14pt. После этого мы определим Style, который назовем code и зададим ему шрифт красного цвета Courier, размером в 12pt с серым фоном. После этого мы создадим Paragraph, с помощью Text объектов, которые задействуют эти стили.

Обратите внимание, что вы можете цеплять add()комментарии, как это сделано в следующем примере:

Text title1 = new Text("The Strange Case of ").setFontSize(12);
Text title2 = new Text("Dr. Jekyll and Mr. Hyde").setFontSize(16);
Text author = new Text("Robert Louis Stevenson");
Paragraph p = new Paragraph().setFontSize(8)
    .add(title1).add(title2).add(" by ").add(author);
document.add(p);

«Установим размер шрифта для только что созданного Paragraph в 8pt. Этот размер шрифта будет наследоваться всеми объектами, добавленными в Paragraph, если только объекты не переопределяют этот размер по умолчанию. Это относится к title1, для которого мы определили размер шрифта в 12pt и для title2, для которого мы определили размер шрифта в 16pt. Содержимое, добавленное как String (" by "), и содержимое, добавленное как Textобъект, для которого не был определен размер шрифта, наследует размер шрифта в 8pt из Paragraph, в который они добавлены.»

Это выдержка из официального руководства, и я надеюсь этого будет достаточно для StackOverflow, где ответы в виде одной только ссылки не приветствуются. Однако, я считаю, что это правило не должно приводить к копипасту целой главы мануала.

READ ALSO
Как сделать рандомный рандом в C# [дубликат]

Как сделать рандомный рандом в C# [дубликат]

На данный вопрос уже ответили:

186
C# 8.0 Caller Argument Expression

C# 8.0 Caller Argument Expression

Наткнулся на вот эту статью, которая посвящена фишкам, которые с высокой вероятностью будут добавлены в новую версию языка

130
C# 8.0 Records. Зачем нужно?

C# 8.0 Records. Зачем нужно?

Наткнулся на вот эту статью, которая посвящена фишкам, которые с высокой вероятностью будут добавлены в новую версию языка

133
Перевод текста в PHP

Перевод текста в PHP

Всем приветКак мне перевести слово с русского на украинский в PHP? Я получаю стрингу со словом и мне нужно его перевести, подскажите, пожалуйста,...

131