Рендеринг эмодзи с помощью PDFBox не работаетJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Рендеринг эмодзи с помощью PDFBox не работает

Сообщение Anonymous »

Я попытался отобразить смайлы с помощью поддерживаемого смайлами шрифта Noto Color Emoji (https://fonts.google.com/noto/specimen/Noto+Color+Emoji) с помощью Java-библиотеки PDFBox 3.0.3. Однако метод font.hasGlyph(codePoint) последовательно возвращает false для всех проверок доступности кодовых точек. Несмотря на это, рассматриваемые смайлы явно поддерживаются указанным шрифтом Google. Я включил код ниже. Может ли кто-нибудь любезно помочь мне определить причину этой проблемы?
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType0Font;

import java.io.File;
import java.io.IOException;

public class EmojiPdfExample {
public static void main(String[] args) {
try (PDDocument doc = new PDDocument()) {

File fontFile = new File("NotoColorEmoji-Regular.ttf");
var font = PDType0Font.load(doc, fontFile);

// Add a page
PDPage page = new PDPage();
doc.addPage(page);

try (PDPageContentStream cs = new PDPageContentStream(doc, page)) {
cs.beginText();
cs.setFont(font, 20);
cs.newLineAtOffset(50, 700);

// Emoji string
String text = "\uD83D\uDE00 \uD83D\uDE09";

for (int i = 0; i < text.length(); ) {
int codePoint = Character.codePointAt(text, i);
i += Character.charCount(codePoint);

String glyph;
try {
glyph = new String(Character.toChars(codePoint));
} catch (IllegalArgumentException e) {
System.err.println("Invalid code point: U+" + Integer.toHexString(codePoint));
continue; // Skip invalid code points
}

try {
if (font.hasGlyph(codePoint)) {
cs.showText(glyph);
} else {
// Handle unsupported glyphs
System.out.println("Unsupported glyph," + glyph);
}
} catch (IOException e) {
System.err.println("IOException while showing glyph: U+" + Integer.toHexString(codePoint));
}
}
cs.endText();
}

doc.save("emojis.pdf");
System.out.println("PDF created: emojis.pdf");

} catch (IOException e) {
e.printStackTrace();
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... s-not-work
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»