如何找出在itext7中设置换行符(连字符)的位置

如何找出设置换行符的位置?


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();

在左侧,一切都从同一级别开始。:

http://img2.mukewang.com/6361cfef0001370b06430504.jpg

我想在连字符后更改 margin-left 到每一行 margin-left 不同:

http://img3.mukewang.com/6361cffc0001c63506370569.jpg

我可以找到连字符之前的行和连字符的宽度吗?

我是这样做的:

1)找出页面的宽度

MAX =  doc.getPdfDocument().getDefaultPageSize().getWidth() - (doc.getLeftMargin() + doc.getRightMargin());

2)我数宽度字

widthWordsAllLine +=  font.getWidth(words.get(i),22);

3) if (widthWordsAllLine + font.getWidth(words.get(i),22)> MAX) i 除字。

4)然后我将每个单词并划分单词添加到段落中。并设置段落.setMagrinLeft(10);

我没有描述所有内容,因为这需要很多时间

它可以工作,但是如果我添加一个新功能,一切都将无法正常工作(例如文本对齐)。它可以以不同的方式实施吗?



一只萌萌小番薯
浏览 200回答 1
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));我得到的结果是这样的:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java