Летающая тарелка (xhtmlrenderer) не жирным шрифтом?

Я использую пользовательский шрифт TrueType в PDF, созданный с помощью летающей тарелки xhtmlrenderer.

ITextRenderer renderer = new ITextRenderer();
renderer.getFontResolver().addFont("myfont.ttf", BaseFont.CP1252, BaseFont.EMBEDDED);
renderer.setDocument(XMLResource.load(in).getDocument(), url);
renderer.layout();
renderer.createPDF(out);

и в HTML-коде, у меня есть следующее (например)

<html>
<head>
<style type="text/css">
*{font-family:myfont;} /* <-- this works, trust me */
</style>
</head>
<body>
<p>some plain text<b>some bold text</b> <span style="font-weight:bold;">more bold</span></p>
</body>
</html>

но даже с <b> и font-weight:bold Я не могу заставить текст выйти жирным шрифтом.

Теперь я знаю, что это должно сработать, потому что у меня есть похожий (унаследованный) проект, который использует тот же шрифт и обычный старый itext (т.е. без xhtmlrenderer), и он создает PDF-файлы с жирным текстом через:

myFont = BaseFont.createFont("myfont.ttf", BaseFont.CP1252, BaseFont.EMBEDDED);
Font boldFont = new Font(myFont);
boldFont.setStyle(Font.BOLD);

com.lowagie.text.Document document = ...;
document.add(new Paragraph("plain", myFont));
document.add(new Paragraph("bold", boldFont));

Может кто-нибудь объяснить, почему я не могу использовать жирный шрифт с xhtmlrenderer, и, возможно, способ преодолеть эту проблему?

спасибо, с.

2 ответа

Решение

Я не эксперт, но если у вашего шрифта нет жирного варианта, то Flying Saucer может просто "не сделать его жирным". Когда вы программно делаете шрифт жирным, вы используете класс шрифта, который может (за кадром) сделать шрифт "более смелым" сам по себе, используя какой-то внутренний механизм. Хорошим примером этого в реальном мире является Photoshop: если у вас есть шрифт, который не имеет жирного разнообразия, вы не можете сделать его жирным, но у Photoshop есть опция "имитация жирного шрифта", которая будет увеличиваться и увеличиваться. символы без реального использования "истинного" жирного лица.

Хороший способ диагностировать это наверняка - поменять шрифт, который вы используете в Flying Saucer, но сохранить тот же документ. Если новый шрифт также не выделен жирным шрифтом, то проблема менее актуальна. Если он становится жирным, то это потому, что нет жирной версии вашего шрифта.

Надеюсь это поможет.

Если ваш унаследованный код iText может создать жирный шрифт, то, вероятно, файл TTF на самом деле содержит жирный вариант, даже если Flying Saucer его не использует. Вы можете использовать жирный вариант в Flying Saucer, если в своей таблице стилей CSS укажите точное имя жирного варианта.

Например:

<style type="text/css"> 
* {font-family:myfont;}
b {font-family:"myfont bold";}
</style> 

Вы сможете найти точное имя шрифта, открыв PDF-файл, сгенерированный устаревшим кодом в Adobe Reader. Перейдите в Файл -> Свойства... -> Шрифты, чтобы увидеть список всех шрифтов в документе. Вероятно, будет запись "myfont", а также запись "myfont bold" или аналогичная. Используйте последний в вашей таблице стилей.

Другие вопросы по тегам