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

Is there any way to keep whitespaces before text in iText7?

我已将以空格开头的文本对象添加到段落对象,

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

看起来像离开了trim。这是Paragraph的规范吗?

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

Paragraph p = new Paragraph().add(new Text("  abc")); // Only "abc" appears in pdf

iText 将 trim 个空格。
但它不会删除不间断空格。

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

按照以下步骤操作:

  1. 扩展 TextRenderer class
  2. 重写 trimFirst 方法(但什么也不做)
  3. 将此 class 的对象传递给 Text.setTextRenderer 方法

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

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

结果是保留了所有空格。