有没有办法在iText7中保留文本前的空格?

问题描述 投票:0回答:4

我已将一个以空格开头的 Text 对象添加到 Paragraph 对象中,

但是iText7(7.0.4)中删除了段落的空白。

看起来像左装饰。这是段落的规范吗?

有什么办法可以保留文本前的空格吗?

Paragraph p = new Paragraph().add(new Text("  abc")); // Only "abc" appears in pdf
java itext itext7
4个回答
12
投票

iText 将修剪空格。
但它不会删除不间断空格。

File outputFile = new File(System.getProperty("user.home"), "output.pdf");
PdfDocument pdfDocument = new PdfDocument(new PdfWriter(outputFile));
Document layoutDocument = new Document(pdfDocument);

layoutDocument.add(new Paragraph("\u00A0\u00A0\u00A0Lorem Ipsum"));
layoutDocument.add(new Paragraph("Lorem Ipsum"));
layoutDocument.close();

5
投票

按照步骤:

  1. 扩展 TextRenderer 类
  2. 重写trimFirst方法(但不执行任何操作)
  3. 将此类的对象传递给 Text.setTextRenderer 方法

2
投票

我根据 anirban banerjee 的回答找到了解决方案。我做了以下课程:

import com.itextpdf.layout.element.Text;
import com.itextpdf.layout.renderer.*;

public class CodeRenderer extends TextRenderer {

    public CodeRenderer(Text textElement) {
        super(textElement);
    }

    @Override
    public IRenderer getNextRenderer() {
        return new CodeRenderer((Text) getModelElement());
    }

    @Override
    public void trimFirst() {}
}

然后我这样使用它:

Text text = new Text(string);
text.setNextRenderer(new CodeRenderer(text));
document.add(new Paragraph(text));

结果是保留所有空格。


0
投票

对我有用的是在空格后添加一个“幽灵”字符(白色字体)。像这样:

p = new Paragraph("Text: ").setFontSize(10);
        p.add(new Text("some text    ").setUnderline());
        p.add(new Text(".").setFontColor(whiteColor));
        document.add(p);
© www.soinside.com 2019 - 2024. All rights reserved.