Цель: Включить кернинг и лигатуры для трюэтипа/OTF FONTS с использованием LayoutProcessor (enablekernliga) при рендеринге по тексту/Paragraph. /> ограничение < /strong>: файлы шрифтов поступают из облачного хранилища во время выполнения. У нас есть только шрифт как байт [] в памяти. Мы не можем записать в локальную файловую систему и хотели бы избежать временных файлов.
Код: Выделить всё
is Layout processor is enabled true
java.lang.RuntimeException: Font creation failed for BodoniRecutFS-Regular.ttf.
at com.lowagie.text.pdf.LayoutProcessor.loadFont(LayoutProcessor.java:282)
at com.lowagie.text.pdf.BaseFont.createFont(BaseFont.java:741)
...
Caused by: java.io.IOException: BodoniRecutFS-Regular.ttf not found as file or resource.
at com.lowagie.text.pdf.LayoutProcessor.loadFont(LayoutProcessor.java:271)
< /code>
Мы загружаем TTF в память, затем создаем BaseFont с байтов. Прежде чем создавать шрифт, мы позволяем процессору макета получить кернинг/лигатуры.
private[pdf] def createFont(fontObjectName: String, fontBytes: Array[Byte]): BaseFont = {
// e.g. fontObjectName = "BodoniRecutFS-Regular.ttf"
if (!LayoutProcessor.isEnabled) {
LayoutProcessor.enableKernLiga()
}
BaseFont.createFont(
fontObjectName, // has .ttf extension
BaseFont.IDENTITY_H, // Unicode
BaseFont.EMBEDDED, // embed font (true)
BaseFont.NOT_CACHED, // we do our own caching
fontBytes, // font comes from Cloud Storage as bytes
null // not using PFB (Type 1)
)
}
способ включить kerning/ligatures (layoutprocessor), когда наш шрифт TTF доступен только как байт [] в памяти, без написания временного файла на диск.
Подробнее здесь: https://stackoverflow.com/questions/797 ... -cloud-sto