计算字符串宽度java 1.4

时间:2016-06-01 09:50:28

标签: java fonts

我有在服务器上运行的java 1.4应用程序。 在创建包含它们的pdf文件之前,我需要计算字符串的宽度。 在本地(在我的电脑上)运行应用程序时,它是o.k. ,但是当我在服务器上运行时,我收到一个错误:

 Exception in thread "main" java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY
variable.
        at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
        at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:77)
        at java.lang.Class.forName1(Native Method)
        at java.lang.Class.forName(Class.java:142)
        at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:72)
        at java.awt.Font.initializeFont(Font.java:285)
        at java.awt.Font.<init>(Font.java:319)

创建问题的代码计算字符串的宽度,如下所示:

 protected static String mCutStr(String iText , int iWidthPt , int iEstimatedNumOfChars)
  {
      iWidthPt = iWidthPt-4; //remove padding

      AffineTransform affinetransform = new AffineTransform();     
      FontRenderContext frc = new FontRenderContext(affinetransform,true,true);     
      Font font = new Font("Times", Font.PLAIN, 9);
      int textwidth = (int)(font.getStringBounds(iText, frc).getWidth());
    //  System.out.println("iText="+iText+";    textwidth = "+textwidth+"   iWidthPt ="+iWidthPt);
      if(textwidth <= iWidthPt)
          return iText;
      String vTestStr = iText.substring(0 , iEstimatedNumOfChars)+">>";
      textwidth = (int)(font.getStringBounds(vTestStr, frc).getWidth());
      while(textwidth < iWidthPt)
      {
          iEstimatedNumOfChars++;
          vTestStr = iText.substring(0 , iEstimatedNumOfChars)+">>";
          textwidth = (int)(font.getStringBounds(vTestStr, frc).getWidth());
    //    System.out.println("vTestStr="+vTestStr+"    textwidth = "+textwidth);
      }
      vTestStr = iText.substring(0 , iEstimatedNumOfChars-1)+">>";
      return vTestStr;
  }

有没有其他方法可以在不使用AWT的情况下计算? (它必须支持最小java 5)

1 个答案:

答案 0 :(得分:0)

您需要以无头模式运行服务器。当像X服务器这样的实际Window系统不可用而你需要执行一些与AWT相关的功能时,无头模式非常有用。

Java Documentation about Headless mode

如果您正在使用像tomcat一样的Web服务器搜索如何在无头模式下执行该特定服务器

OR 将系统环境属性java.awt.headless设置为true