【问题标题】:How to calculate the string width in iText?如何计算 iText 中的字符串宽度?
【发布时间】:2010-12-04 07:15:36
【问题描述】:

我正在使用 iText 编写 PDF。在某些情况下,我需要使用 SetVisibleSignature 函数对 PDF 进行签名。使用这个函数,我们需要指定要写入内容的矩形。

但我很难计算字符串的宽度,以便在 PDF 上设置签名之前设置矩形。

如何计算 iText 中的字符串宽度?

【问题讨论】:

    标签: pdf pdf-generation itext text-width


    【解决方案1】:

    您可以使用BaseFont.getWidthPoint(String text, float fontSize) 来获取以pt 为单位的字符串的宽度。

    或者将字符串放在一个 Chunk 中并执行chunk.getWidthPoint()

    【讨论】:

    • 如何检索 basefont 实例?
    • 我想知道表格中段落的宽度。似乎使用块的方法返回了错误的值。
    • 静态getWidthPoint 如何知道假定的字体? x_X
    • @PavelVlasov 我已经删除了关于此方法是静态的评论。显然,它不是静态的,静态的毫无意义。你是对的。
    • 不错的解决方案。非常适合我。
    【解决方案2】:

    接受的答案BaseFont.getWidthPoint,在 itext 5.5.4 中不起作用,因为该方法不再是静态的。即使它仍然存在,它也不会考虑所使用的真实字体(它的系列或粗体/斜体),因为它是静态的并且接收的参数有限。

    chunk.getWidthPoint() 确实适用于后面所述的真实字体,但对于某些用途而言,仅为宽度不断创建块是一种浪费,尤其是如果该块不打算在以后使用时。

    这是chunk.getWidthPoint() 用作独立替代品的底层代码,假设您没有进行任何水平缩放:

    font.getCalculatedBaseFont(true).getWidthPoint(text, font.getCalculatedSize());
    

    【讨论】:

      【解决方案3】:

      我最终使用ColumnText.getWidth( Phrase phrase ) 来调整Phrase 的宽度,然后再使用ColumnText.showTextAligned 显示它。

      在这个 sn-p 中,我使用了ColumnText.getWidth 来调整字符串的长度以将其放置在页面的右上角。它适用于纵向 A4,尚未进一步测试。

      Phrase phrase = new Phrase( "Bla bla bla!", new Font( FontFamily.HELVETICA, 9 ) );
      float width = ColumnText.getWidth( phrase );
      
      ColumnText.showTextAligned (
          canvas,
          Element.ALIGN_LEFT,
          phrase,
          canvas.getPdfDocument( ).right( ) - width,
          canvas.getPdfDocument( ).top( ) + 9,
          0
      );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-12
        • 1970-01-01
        • 2019-04-08
        • 1970-01-01
        • 2018-11-28
        • 1970-01-01
        • 2011-07-19
        • 1970-01-01
        相关资源
        最近更新 更多