Skip to content

Commit ab48fd0

Browse files
committed
Do not log font is missing more than once
1 parent 95f2fa5 commit ab48fd0

File tree

3 files changed

+27
-7
lines changed

3 files changed

+27
-7
lines changed

openhtmltopdf-core/src/main/java/com/openhtmltopdf/util/LogMessageId.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ enum LogMessageId0Param implements LogMessageId {
1212

1313
RENDER_BUG_FONT_DIDNT_CONTAIN_EXPECTED_CHARACTER(XRLog.RENDER, "BUG. Font didn't contain expected character."),
1414
RENDER_FONT_LIST_IS_EMPTY(XRLog.RENDER, "Font list is empty."),
15-
RENDER_FONT_IS_NULL(XRLog.RENDER, "Font is null."),
1615

1716
LOAD_UNABLE_TO_DISABLE_XML_EXTERNAL_ENTITIES(XRLog.LOAD, "Unable to disable XML External Entities, which might put you at risk to XXE attacks"),
1817
LOAD_COULD_NOT_SET_VALIDATION_NAMESPACE_FEATURES_FOR_XML_PARSER(XRLog.LOAD, "Could not set validation/namespace features for XML parser, exception thrown."),
@@ -56,8 +55,7 @@ enum LogMessageId0Param implements LogMessageId {
5655
EXCEPTION_TRIED_TO_OPEN_A_PASSWORD_PROTECTED_DOCUMENT_AS_SRC_FOR_IMG(XRLog.EXCEPTION, "Tried to open a password protected document as src for an img!"),
5756
EXCEPTION_COULD_NOT_READ_PDF_AS_SRC_FOR_IMG(XRLog.EXCEPTION, "Could not read pdf passed as src for img element!"),
5857
EXCEPTION_COULD_NOT_PARSE_DEFAULT_STYLESHEET(XRLog.EXCEPTION, "Could not parse default stylesheet"),
59-
EXCEPTION_SELECTOR_BAD_SIBLING_AXIS(XRLog.EXCEPTION, "Bad sibling axis"),
60-
EXCEPTION_FONT_METRICS_NOT_AVAILABLE(XRLog.EXCEPTION, "Font metrics not available. Probably a bug.");
58+
EXCEPTION_SELECTOR_BAD_SIBLING_AXIS(XRLog.EXCEPTION, "Bad sibling axis");
6159

6260
private final String where;
6361
private final String messageFormat;
@@ -103,7 +101,7 @@ enum LogMessageId1Param implements LogMessageId {
103101
RENDER_OP_MUST_NOT_BE_USED_BY_FAST_RENDERER(XRLog.RENDER, "{} MUST not be used by the fast renderer. Please consider reporting this bug."),
104102
RENDER_UNKNOWN_PAINT(XRLog.RENDER, "Unknown paint: {}"),
105103
RENDER_USING_CSS_IMPLEMENTATION_FROM(XRLog.RENDER, "Using CSS implementation from: {}"),
106-
104+
RENDER_FONT_IS_NULL(XRLog.RENDER, "Font is null for font-description: {}"),
107105

108106
MATCH_TRYING_TO_APPEND_CONDITIONS_TO_PSEUDO_ELEMENT(XRLog.MATCH, "Trying to append conditions to pseudoElement {}"),
109107
MATCH_MATCHER_CREATED_WITH_SELECTOR(XRLog.MATCH, "Matcher created with {} selectors"),
@@ -148,6 +146,7 @@ enum LogMessageId1Param implements LogMessageId {
148146
GENERAL_PDF_A_ELEMENT_DOES_NOT_HAVE_OPTION_CHILDREN(XRLog.GENERAL, "A <{}> element does not have <option> children"),
149147
GENERAL_FORCED_OUTPUT_TO_AVOID_INFINITE_LOOP(XRLog.GENERAL, "Forced text ({}) output after trying to move to next line unsuccessfully. Probably a bug."),
150148

149+
EXCEPTION_FONT_METRICS_NOT_AVAILABLE(XRLog.EXCEPTION, "Font metrics not available for font-description: {}"),
151150
EXCEPTION_URI_SYNTAX_WHILE_LOADING_EXTERNAL_SVG_RESOURCE(XRLog.EXCEPTION, "URI syntax exception while loading external svg resource: {}"),
152151
EXCEPTION_SVG_ERROR_HANDLER(XRLog.EXCEPTION, "SVG {}"),
153152
EXCEPTION_PDF_IN_WRITING_METHOD(XRLog.EXCEPTION, "Exception in PDF writing method: {}"),

openhtmltopdf-pdfbox/src/main/java/com/openhtmltopdf/pdfboxout/PdfBoxFontResolver.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,13 @@ public static class FontDescription implements MinimalFontDescription {
514514
private PdfBoxRawPDFontMetrics _metrics;
515515
private final FSCacheEx<String, FSCacheValue> _metricsCache;
516516

517+
@Override
518+
public String toString() {
519+
return String.format(
520+
"FontDescription [_style=%s, _weight=%s, _family=%s, _isFromFontFace=%s, _isSubset=%s]",
521+
_style, _weight, _family, _isFromFontFace, _isSubset);
522+
}
523+
517524
/**
518525
* Create a font description from one of the PDF built-in fonts.
519526
*/

openhtmltopdf-pdfbox/src/main/java/com/openhtmltopdf/pdfboxout/PdfBoxTextRenderer.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,15 @@ public class PdfBoxTextRenderer implements TextRenderer {
4242
private static float TEXT_MEASURING_DELTA = 0.01f;
4343

4444
private BidiReorderer _reorderer;
45-
45+
46+
// These will mean only first missing font/metrics
47+
// is logged but they should have already got a loading warning.
48+
// Quiet the font is missing log message.
49+
private boolean _loggedMissingFont = false;
50+
51+
// Quiet the font metrics not available message.
52+
private boolean _loggedMissingMetrics = false;
53+
4654
public void setup(FontContext context, BidiReorderer reorderer) {
4755
this._reorderer = reorderer;
4856
}
@@ -75,7 +83,10 @@ public FSFontMetrics getFSFontMetrics(FontContext context, FSFont font, String s
7583
PdfBoxRawPDFontMetrics metrics = des.getFontMetrics();
7684

7785
if (metrics == null) {
78-
XRLog.log(Level.WARNING, LogMessageId.LogMessageId0Param.EXCEPTION_FONT_METRICS_NOT_AVAILABLE);
86+
if (!_loggedMissingMetrics) {
87+
XRLog.log(Level.WARNING, LogMessageId.LogMessageId1Param.EXCEPTION_FONT_METRICS_NOT_AVAILABLE, des);
88+
_loggedMissingMetrics = true;
89+
}
7990
continue;
8091
}
8192

@@ -337,7 +348,10 @@ public int getWidth(FontContext context, FSFont font, String string) {
337348
result = fd.getFont().getStringWidth(effectiveString) / 1000f * font.getSize2D();
338349
break;
339350
} else {
340-
XRLog.log(Level.WARNING, LogMessageId.LogMessageId0Param.RENDER_FONT_IS_NULL);
351+
if (!_loggedMissingFont) {
352+
XRLog.log(Level.WARNING, LogMessageId.LogMessageId1Param.RENDER_FONT_IS_NULL, fd);
353+
_loggedMissingFont = true;
354+
}
341355
}
342356
}
343357
}

0 commit comments

Comments
 (0)