java - iText 5.5.3 由于字体大小的测量方式,ColumnText 无法正确换行文本

标签 java itext

问题设置

我正在尝试准确确定字体(Ubuntu Italic)的宽度,尽管 iText 似乎忽略了水平前进后最后一个字形的部分,如下图所示。

ff using Ubuntu Italic Font

我用来生成此示例的代码如下:

Document document = new Document(PageSize.LETTER);
FileOutputStream out = new FileOutputStream(new File("test.pdf"));
PdfWriter writer = PdfWriter.getInstance(document, out);

document.open();

String text = "ff";
Chunk chunk = new Chunk(text, FontFactory.getFont("Ubuntu-Italic.ttf", 72)
Phrase phrase = new Phrase(chunk);

float width = ColumnText.getWidth(phrase);
System.out.println(width + ", " + chunk.getWidthPoint());

PdfPTable table = new PdfPTable(1);
table.setWidthPercentage(100);
table.setTotalWidth(width);

PdfPCell cell = table.getDefaultCell();
cell.setPadding(0);
cell.setUseDescender(true);
cell.setUseAscender(true);
table.addCell(phrase);

float height = table.calculateHeights();

PdfContentByte canvas = writer.getDirectContent();

ColumnText columnText = new ColumnText(canvas);
columnText.setSimpleColumn(36, 756 - height, 36 + width, 756);
columnText.addElement(table);
columnText.go();

document.close();
out.close();

如代码所示,我尝试了 ColumnText.getWidth(phrase)chunk.getWidthPoint(),它们都返回相同的值,但有一点点浮点差。

问题

我上面编写的代码模拟了 iText 中文本无法正确换行到下一行的情况。我遇到的问题是我正在使用的代码中的 ColumnText 被裁剪。问题是,由于 iText 测量文本的方式,ColumnText 认为右边缘有足够的空间容纳 f,而事实上确实没有,所以在我的情况下它被剪切了离开。有没有办法强制 ColumnText 以不同的方式测量字体的宽度,以免发生这种情况?

最佳答案

你的观察

The right border that cuts through the f

对应于 Ubuntu-Italic 字母 f 的定义:

Ubuntu-Italic letter f

你得到的宽度是字母在基线上的宽度,即水平前进,它不是从最左边到最右边的x坐标的距离。

关于java - iText 5.5.3 由于字体大小的测量方式,ColumnText 无法正确换行文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26349579/

相关文章:

java - Spring Boot Java Controller 的单元测试

java - 如何动态地将 JSON 转换为数据库表?

java - 如何使用 MultiValueMap 作为参数创建 URI/URL?

c# - 使用 iText C# 将 HTML 转换为 Excel 文档

c# - HTML : how do I avoid table tag when using display: table; 中的 iText 7 可访问 PDF

java - 为什么我们不能在没有花括号的 while 循环之后使用声明语句?

java - 在mysql中使用数组查询java

java - 导出java swing组件时IText忽略UTF-8字符

java从带有重音符号的字符串中保存pdf

java - 如何读取 Data Matrix 条形码