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 import org.htmlunit.css.CssPixelValueConverter;
24
25
26
27
28
29
30 public class AwtFontUtil implements FontUtil {
31
32 @Override
33 public int countLines(final String content, final int pixelWidth, final String fontSize) {
34 final String[] lines = StringUtils.split(content, '\n');
35 int lineCount = 0;
36 final int fontSizeInt = CssPixelValueConverter.pixelValue(fontSize);
37 final FontRenderContext fontRenderCtx = new FontRenderContext(null, false, true);
38 for (final String line : lines) {
39 if (StringUtils.isBlank(line)) {
40 lineCount++;
41 }
42 else {
43
44 final AttributedString attributedString = new AttributedString(line);
45 attributedString.addAttribute(TextAttribute.SIZE, fontSizeInt / 1.1);
46 final LineBreakMeasurer lineBreakMeasurer =
47 new LineBreakMeasurer(attributedString.getIterator(), fontRenderCtx);
48 lineBreakMeasurer.nextLayout(pixelWidth);
49 lineCount++;
50 while (lineBreakMeasurer.getPosition() < line.length() && lineCount < 1000) {
51 lineBreakMeasurer.nextLayout(pixelWidth);
52 lineCount++;
53 }
54 }
55 }
56 return lineCount;
57 }
58 }