有没有办法在 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();
按照以下步骤操作:
- 扩展 TextRenderer class
- 重写 trimFirst 方法(但什么也不做)
- 将此 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));
结果是保留了所有空格。
我已将以空格开头的文本对象添加到段落对象,
但在 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();
按照以下步骤操作:
- 扩展 TextRenderer class
- 重写 trimFirst 方法(但什么也不做)
- 将此 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));
结果是保留了所有空格。