1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.platform.font;
16
17 import java.awt.font.FontRenderContext;
18 import java.awt.font.LineBreakMeasurer;
19 import java.awt.font.TextAttribute;
20 import java.text.AttributedString;
21
22 import org.apache.commons.lang3.StringUtils;
23
24
25
26
27
28
29 public class AwtFontUtil implements FontUtil {
30
31 @Override
32 public int countLines(final String content, final int pixelWidth, final int fontSizeInt) {
33 int lineCount = 0;
34 if (content == null) {
35 return lineCount;
36 }
37
38 final String[] lines = StringUtils.splitByWholeSeparatorPreserveAllTokens(content, "\n");
39 final FontRenderContext fontRenderCtx = new FontRenderContext(null, false, true);
40 for (final String line : lines) {
41 if (org.htmlunit.util.StringUtils.isBlank(line)) {
42 lineCount++;
43 }
44 else {
45
46 final AttributedString attributedString = new AttributedString(line);
47 attributedString.addAttribute(TextAttribute.SIZE, fontSizeInt / 1.1);
48 final LineBreakMeasurer lineBreakMeasurer =
49 new LineBreakMeasurer(attributedString.getIterator(), fontRenderCtx);
50 do {
51 lineBreakMeasurer.nextLayout(pixelWidth);
52 lineCount++;
53 }
54 while (lineBreakMeasurer.getPosition() < line.length() && lineCount < 1000);
55 }
56 }
57 return lineCount;
58 }
59 }