diff --git a/openhtmltopdf-pdfbox/src/main/java/com/openhtmltopdf/pdfboxout/PdfBoxTextRenderer.java b/openhtmltopdf-pdfbox/src/main/java/com/openhtmltopdf/pdfboxout/PdfBoxTextRenderer.java index efa481d01..f0599ec75 100644 --- a/openhtmltopdf-pdfbox/src/main/java/com/openhtmltopdf/pdfboxout/PdfBoxTextRenderer.java +++ b/openhtmltopdf-pdfbox/src/main/java/com/openhtmltopdf/pdfboxout/PdfBoxTextRenderer.java @@ -296,14 +296,25 @@ public int getWidth(FontContext context, FSFont font, String string) { float result = 0f; try { - // First try using the first given font in the list. - result = ((PdfBoxFSFont) font).getFontDescription().get(0).getFont().getStringWidth(string) / 1000f * font.getSize2D(); + if (((PdfBoxFSFont) font).getFontDescription() == null + || ((PdfBoxFSFont) font).getFontDescription().isEmpty()) { + XRLog.render(Level.WARNING, "Font list is empty."); + } else { + // Go through the list of font descriptions + for (FontDescription fd : ((PdfBoxFSFont) font).getFontDescription()) { + if (fd.getFont() != null) { + result = fd.getFont().getStringWidth(string) / 1000f * font.getSize2D(); + break; + } else { + XRLog.render(Level.WARNING, "Font is null."); + } + } + } } catch (IllegalArgumentException e2) { // PDFont::getStringWidth throws an IllegalArgumentException if the character doesn't exist in the font. // So we do it one character by character instead. result = getStringWidthSlow(font, string) / 1000f * font.getSize2D(); - } - catch (IOException e) { + } catch (IOException e) { throw new PdfContentStreamAdapter.PdfException("getWidth", e); }