代码之家  ›  专栏  ›  技术社区  ›  Wilfred Springer

有没有简单的方法来调整一段文字的字体大小以适应某个区域?

  •  2
  • Wilfred Springer  · 技术社区  · 14 年前

    我需要文本来填充一个预先定义的区域。我不一定希望字体增长超过一定的限制,但我希望它至少缩小,如果它不适合某个区域。(因此,要在字体大小上有一个上界,也有一个下界,但将上界作为默认值,并在需要时按比例缩小。)

    有什么简单的方法可以轻易地完成类似的事情吗?

    2 回复  |  直到 13 年前
        1
  •  2
  •   Wilfred Springer    13 年前

    我最终使用了 fitText PDF签名外观操作,包括 iText . 这使它很容易完成。它可能并不完美,但总比什么都没有要好得多。

    public static final float calculateFontSize(String fontName, float maxFontsize, float width, float height, String text) {
        Font font = FontFactory.getFont(fontName);
        Rectangle rectangle = new Rectangle(width, height);
        System.err.println("Calculating font size for " + width + " and " + height);
        return PdfSignatureAppearance.fitText(font, text, rectangle, maxFontsize, PdfWriter.RUN_DIRECTION_LTR);
    }
    
        2
  •  0
  •   rancidfishbreath    14 年前

    我会手动选择您想要使用的字体大小,以确保它们在目标输出上看起来很好。没有理由坚持3,想用多少就用多少。传入getFont()的矩形必须将x和y都设置为0。

    public class FontFactory {
      private Font[] fonts;
    
      public FontFactory() {
        fonts = new Font[3];
        // font[0] = largest font
        // font[1] = middle font
        // font[2] = smallest font
      }
    
      public Font getFont(String string, Graphics g, Rectangle rectangle) {
        for (Font font : fonts) {
          Rectangle2D bounds = g.getFontMetrics(font).getStringBounds(string, g);
          if (rectangle.contains(bounds)) {
            return font;
          }
        }
    
        return fonts[fonts.length - 1];
      }
    }