【问题标题】:iText7: How to get the real width of a ParagraphiText7:如何获得段落的实际宽度
【发布时间】:2020-09-06 16:49:47
【问题描述】:

在添加到文档之前,我需要知道段落的宽度(点)。我在这里搜索,发现 Alexey 对 Paragraph 身高的回答。所以我用宽度做了它,但它不起作用。无论段落多长,始终返回矩形的宽度。 我试过这段代码:

private float getRealParagraphWidth(Document doc, Paragraph paragraph) {
  // Create renderer tree
  IRenderer paragraphRenderer = paragraph.createRendererSubTree();
  // Do not forget setParent(). Set the dimensions of the viewport as needed
  LayoutResult result = paragraphRenderer.setParent(doc.getRenderer()).
        layout(new LayoutContext(new LayoutArea(1, new Rectangle(1000, 100))));
  // LayoutResult#getOccupiedArea() contains the information you need
  return result.getOccupiedArea().getBBox().getWidth();
}

所以,我的问题是,如果这段代码适用于高度而不适用于宽度,那么它有什么问题?

【问题讨论】:

  • 目前我使用了一个远非理想的解决方法:PdfFont 有一个 .getWidth(string, fontsize) 函数,但它忽略了正常、粗体和斜体样式之间的区别。 (而且粗体文本的宽度比普通文本的宽度要长。)所以我仍然在等待好的解决方案。

标签: java itext width itext7 paragraph


【解决方案1】:

我的一个朋友解决了它。代码的最后一行应该是这样的:

 private float getRealParagraphWidth(Document doc, Paragraph paragraph) {
    // Create renderer tree
    IRenderer paragraphRenderer = paragraph.createRendererSubTree();
    // Do not forget setParent(). Set the dimensions of the viewport as needed
    LayoutResult result = paragraphRenderer.setParent(doc.getRenderer()).
            layout(new LayoutContext(new LayoutArea(1, new Rectangle(1000, 100))));
    // LayoutResult#getOccupiedArea() contains the information you need
    //return result.getOccupiedArea().getBBox().getWidth();
    return ((ParagraphRenderer) paragraphRenderer).getMinMaxWidth().getMaxWidth();
 }

结果是正确的值。

【讨论】:

    猜你喜欢
    • 2012-11-23
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 2013-02-24
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多