- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在用户空间 (mm) 中定义了一个 java2d 图像来打印身份证。对像素的转换是通过对所需的 DPI(屏幕或打印)使用 AffineTransform。
我想将文本换行成多行,但 TextLayout 不遵守用户空间坐标。我正在使用以下内容将换行文本写入区域:
private void drawParagraph(Graphics2D g2d, Rectangle2D area, String text) {
LineBreakMeasurer lineMeasurer;
AttributedString string = new AttributedString(text);
AttributedCharacterIterator paragraph = string.getIterator();
int paragraphStart = paragraph.getBeginIndex();
int paragraphEnd = paragraph.getEndIndex();
FontRenderContext frc = g2d.getFontRenderContext();
lineMeasurer = new LineBreakMeasurer(paragraph, frc);
float breakWidth = (float)area.getWidth();
float drawPosY = (float)area.getY();
float drawPosX = (float)area.getX();
lineMeasurer.setPosition(paragraphStart);
while (lineMeasurer.getPosition() < paragraphEnd) {
TextLayout layout = lineMeasurer.nextLayout(breakWidth);
drawPosY += layout.getAscent();
layout.draw(g2d, drawPosX, drawPosY);
drawPosY += layout.getDescent() + layout.getLeading();
}
}
上面的代码使用字体的用户空间大小来确定字体规范,因此结果相当大。字体大小计算为区域中行数的最佳垂直拟合,计算如下。例如
attr.put(TextAttribute.SIZE, (geTextArea().getHeight() / noOfLines - LINE_SPACING) );
当使用 g2d.drawString("Some text to display", x, y) 时,字体大小显示正确。
有没有人有更好的方法在用户空间坐标中进行文本布局?
最佳答案
在开始时调用 g2d.scale()
应该可以做到(当我这样做时它起作用了,我的代码基于完全相同的 LineBreakMeasurer
示例).
关于java - 使用带有 TextLayout 和 LineBreakMeasurer 的 java2d 用户空间测量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2982738/
我正在尝试以从右到左的语言(阿拉伯语)打印一个合理的段落,并尝试使用 TextLayout 和 LineBreakerMeasurer 来实现这一点,因为围绕web 似乎认为,尝试编写每个单词/字符位
我已经使用其他出色的答案来设计一种返回 JTextPane 的正确尺寸的方法,给定它的内容和宽度,使用 LineBreakMeasurer。 问题是当我尝试不同的字体大小时它有点不正常,我不明白为什么
有数千篇关于如何使用 LineBreakMeasurer 绘制多行文本的文章,但没有一篇关于绘制多行文本并考虑到\n(当您想在文本中的特定位置强制换行而不是仅当右边距或左边距结束时)。 secret
在 swing 应用程序中,我需要预见字符串的文本换行,就像将其放入 MS Word 或 LibreOffice 等文字处理器程序中一样。提供相同宽度的可显示区域,相同的字体(字体和大小)和相同的字符
我在用户空间 (mm) 中定义了一个 java2d 图像来打印身份证。对像素的转换是通过对所需的 DPI(屏幕或打印)使用 AffineTransform。 我想将文本换行成多行,但 TextLayo
我是一名优秀的程序员,十分优秀!