gpt4 book ai didi

java - 如何限制单行字符数?

转载 作者:行者123 更新时间:2023-12-02 05:08:04 25 4
gpt4 key购买 nike

我正在使用 iText 生成 PDF。在这些 PDF 中,我需要在一行上添加两个 String

第一个 String (string1) 长度介于 1 到 10 之间。第二个 String (string2) 的长度code>) 未知,但 string1string2 的总长度不应超过 10 个字符。

如何将这些字符串添加到带下划线的单行中?

最佳答案

请查看 UnderlineParagraphWithTwoParts示例并让我解释一下这个示例解决了哪些问题。

第一个问题:您想要确保一行可以容纳 100 个字符。我设置了 101 个字符,因为我假设您希望在 string1string2 之间留有一些空格(如果没有,应该很容易调整该示例)。

由于你事先不知道string1string2的内容,所以我选择了一种所有字形都具有相同宽度的字体:Courier(这是固定宽度等宽字体)。如果您想使用比例字体(例如 Arial),您将很难计算字体大小,因为您必须分别计算每个 string1string2 组合。这将导致文档看起来非常奇怪,其中每一行都有不同的字体大小。

这是根据COURIER字体中单个字符的宽度计算字体大小的代码,事实上我们想要在宽度相等的一行上添加 101 个字符页面左右边距之间的可用空间:

BaseFont bf = BaseFont.createFont(BaseFont.COURIER, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED);
float charWidth = bf.getWidth(" ");
int charactersPerLine = 101;
float pageWidth = document.right() - document.left();
float fontSize = (1000 * (pageWidth / (charWidth * charactersPerLine)));
fontSize = ((int)(fontSize * 100)) / 100f;
Font font = new Font(bf, fontSize);

请注意,我对浮点值进行了四舍五入。如果您不这样做,您可能会因使用 float 值固有的舍入错误而遇到问题。

问题2:现在我们想要将两个字符串添加到一行中并为它们添加下划线。从您的问题来看,尚不清楚您希望如何对齐这些字符串。

这是简单的情况,其中 string1string2 由一个空格分隔:

public void addParagraphWithTwoParts2(Document document, Font font, String string1, String string2)
throws DocumentException {
if (string1 == null) string1 = "";
if (string1.length() > 10)
string1 = string1.substring(0, 10);
if (string2 == null) string2 = "";
if (string1.length() + string2.length() > 100)
string2 = string2.substring(0, 100 - string1.length());
Paragraph p = new Paragraph(string1 + " " + string2, font);
LineSeparator line = new LineSeparator();
line.setOffset(-2);
p.add(line);
document.add(p);
}

这是一个更复杂的情况,您需要右对齐string2:

public void addParagraphWithTwoParts1(Document document, Font font, String string1, String string2)
throws DocumentException {
if (string1 == null) string1 = "";
if (string1.length() > 10)
string1 = string1.substring(0, 10);
Chunk chunk1 = new Chunk(string1, font);
if (string2 == null) string2 = "";
if (string1.length() + string2.length() > 100)
string2 = string2.substring(0, 100 - string1.length());
Chunk chunk2 = new Chunk(string2, font);
Paragraph p = new Paragraph();
p.add(chunk1);
p.add(GLUE);
p.add(chunk2);
LineSeparator line = new LineSeparator();
line.setOffset(-2);
p.add(line);
document.add(p);
}

如您所见,我们不必添加任何空格,我们只需使用定义如下的 GLUE block :

public static final Chunk GLUE = new Chunk(new VerticalPositionMark());

我创建了一个示例,其中 string1string2 由数字组成。结果如下:

Screen shot

在此屏幕截图中,您可以看到 string2 右对齐的示例以及 string2 添加到 string1 之后的示例(但是用一个空格字符与其分隔)。

关于java - 如何限制单行字符数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27591313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com