Java生成PDF时空格尺寸与字符不一致,如何实现金额右对齐?
Java生成PDF金额右对齐问题解决方法
问题根源
用空格实现对齐之所以失效,是因为非等宽字体中空格的宽度和数字字符宽度不一致,导致总宽度和预期偏差,出现错位。
可行解决方案
方案1:使用等宽字体
换成等宽字体(如Courier、Consolas),这类字体的每个字符(包括空格)宽度完全相同,添加空格即可实现精准右对齐。
代码示例:
// 创建等宽字体实例 PdfFont monoFont = PdfFontFactory.createFont(StandardFonts.COURIER); pdf_paint.setFont(monoFont); // 绘制带前置空格的金额文本,此时空格和数字宽度一致 new_canvas.drawText(" 1234.56", 20, 90, pdf_paint);
方案2:计算宽度手动定位(更可靠)
不用空格,通过计算文本宽度,直接定位到右对齐的X坐标,这是专业PDF排版的常用方式:
代码示例:
// 假设金额列的右边界X坐标为200 float columnRightEdge = 200; String amountText = "1234.56"; // 获取当前字体下文本的宽度 float textWidth = pdf_paint.getFont().getWidth(amountText); // 计算右对齐的X坐标:右边界减去文本宽度 float alignX = columnRightEdge - textWidth; // 绘制文本,实现精准右对齐 new_canvas.drawText(amountText, alignX, 90, pdf_paint);
内容的提问来源于stack exchange,提问作者Beginner
相关产品推荐
相关产品推荐

