如何找出在哪里设置换行符?
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(DEST));
Document doc = new Document(pdfDoc, PageSize.A4);
Paragraph paragraph = new Paragraph()
.setHyphenation(new HyphenationConfig("en", "EN", 2, 2))
.add(new Text(bigString));
doc.add(paragraph);
doc.close();
在左侧,所有内容均从同一级别开始。
我想将连字符后的左边距更改为每行左边距不同:
我能找到连字符前面的行和连字符的宽度吗?
我是这样做的:
1)找出页面的宽度
MAX = doc.getPdfDocument().getDefaultPageSize().getWidth() - (doc.getLeftMargin() + doc.getRightMargin());
2)我数了个宽字
widthWordsAllLine += font.getWidth(words.get(i),22);
3)如果(widthWordsAllLine + font.getWidth(words.get(i),22)> MAX)我将单词除。
4)然后,我将每个单词和除词加到段落中。并设置paragraph.setMagrinLeft(10);
我没有描述所有事情,因为这会花费很多时间
它可以工作,但是如果我添加了一项新功能,则所有功能都将无法工作(例如,文本对齐)。可以以其他方式实施吗?
答案 0 :(得分:1)
我对问题的理解:目标是在段落的每一行中添加随机页边距,以便在使用类似手写字体的字体时,它看起来仍像是手动编写的文本。还应使用连字符,因此是尝试将文本分成段落的原始方法。
但是,解决方案可以更简单。我们可以采用将要绘制的段落的行,并在绘制之前将其稍稍移动。包括连字符在内的所有功能都将保留。
可以通过以下方式使用自定义渲染器完成
:private static class CustomParagraphRenderer extends ParagraphRenderer {
public CustomParagraphRenderer(Paragraph modelElement) {
super(modelElement);
}
@Override
public void drawChildren(DrawContext drawContext) {
Random r = new Random();
if (lines != null) {
for (LineRenderer line : lines) {
int leftMargin = r.nextInt(10);
line.move(leftMargin, 0);
line.draw(drawContext);
}
}
}
@Override
public IRenderer getNextRenderer() {
return new CustomParagraphRenderer((Paragraph) modelElement);
}
}
将其应用于段落很容易:
Paragraph paragraph = new Paragraph(longStr);
paragraph.setHyphenation(new HyphenationConfig("en", "US", 2, 2));
paragraph.setNextRenderer(new CustomParagraphRenderer(paragraph));
我得到的结果如下: