尝试使用Java中的printf()格式化发票

时间:2017-10-24 09:51:20

标签: java

我正在尝试使用Java中的printf()格式化发票。我希望最终结果看起来像这样。

public android.location.Location getLocation() throws IOException {
        try {
            mLocationManager = (LocationManager) context
                    .getSystemService(LOCATION_SERVICE);

            // getting GPS status
            isGPSEnabled = mLocationManager
                    .isProviderEnabled(LocationManager.GPS_PROVIDER);

            // getting network status
            isNetworkEnabled = mLocationManager
                    .isProviderEnabled(LocationManager.NETWORK_PROVIDER);

            if (!isGPSEnabled && !isNetworkEnabled) {
                // location service disabled
            } else {
                this.canGetLocation = true;

                // if GPS Enabled get lat/long using GPS Services

                if (isGPSEnabled) {
                    mLocationManager.requestLocationUpdates(
                            LocationManager.GPS_PROVIDER, SIXTY_SECONDS,
                            0, this);

                    Log.d("GPS Enabled", "GPS Enabled");

                    if (mLocationManager != null) {
                        location = mLocationManager
                                .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                        //updateGPSCoordinates();
                    }
                }

                // First get location from Network Provider
                if (isNetworkEnabled) {
                    if (location == null) {
                        mLocationManager.requestLocationUpdates(
                                LocationManager.NETWORK_PROVIDER,
                                SIXTY_SECONDS,
                                0, this);

                        Log.d("Network", "Network");

                        if (mLocationManager != null) {
                            location = mLocationManager
                                    .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                            //updateGPSCoordinates();
                        }
                    }

                }
            }
        } catch (Exception e) {
            // e.printStackTrace();
            Log.e("Error : Location",
                    "Impossible to connect to LocationManager", e);
        }


        return location;
    }

不知何故,我达到了预期的效果,但当一个项目的描述比单元格所占的空间更长时,它会将边框向右推,而不是转到新的一行。

_______________________________________
               Invoice 1
              24-Oct-2017
---------------------------------------
| ID |          DESC        |   AMT   |
---------------------------------------
| 1 | Item1                 |   15,000|
---------------------------------------
| 2 | Item2                 |  200,000|
---------------------------------------
| 3 | Enterprise Javaaaaaaa |         |
|   | a                     |  300,000|
---------------------------------------
|      Sub Total               515,000|
---------------------------------------
|      Tax(5%)                  25,750|
---------------------------------------
|      Total                   540,750|
---------------------------------------
             THANK YOU!
_______________________________________

这是这些行的格式字符串。

    _______________________________________
                   Invoice 1
                  24-Oct-2017
    ---------------------------------------
    | ID |          DESC        |   AMT   |
    ---------------------------------------
    | 1 | Item1                 |   15,000|
    ---------------------------------------
    | 2 | Item2                 |  200,000|
    ---------------------------------------
    | 3 | Enterprise Javaaaaaaaaa |  300,000|
    ---------------------------------------
    |      Sub Total               515,000|
    ---------------------------------------
    |      Tax(5%)                  25,750|
    ---------------------------------------
    |      Total                   540,750|
    ---------------------------------------
                 THANK YOU!
    _______________________________________

如何让描述自动变得比包含单元格宽度更长?

3 个答案:

答案 0 :(得分:1)

使用%s时,您可以指定最小宽度和最大宽度。

System.out.printf("%20.20s", someString);

这会给你一个20个字符的字符串。现在你依靠制表位。如果您希望将字符串向左对齐,请包含减号。

System.out.printf("%-20.20s", someString);

要添加新行,您必须包含一些逻辑,因为String.format不知道换行应该是什么样的。

答案 1 :(得分:1)

$ jar tvf spring-web-4.3.9.RELEASE.jar  | grep RestTemplate.class
 30116 Wed Jun 07 19:11:32 BST 2017 org/springframework/web/client/RestTemplate.class

(我必须承认, -20 部分来自Matt的回答)

答案 2 :(得分:0)

我认为你需要逐个字符地打印字符串,控制当前位置不超过一定的长度。

据我所知,没有可靠的机制来读取终端/ cmd大小的系统设置,但您可以将其锁定在应用的启动上。

对于Windows执行类似

的操作
Process p = Runtime.getRuntime().exec("mode 100, 50");

对于MacOS:

Process p = Runtime.getRuntime().exec("resize -s 50 100");

然后在打印过程中确保每行不超过100个字符。