AWT 字体渲染和度量似乎不适合真正的打印应用程序。字体渲染取决于 DPI,FontMetrics 给出错误结果。所以实际上不可能在边界框内渲染真实的文本。
Java 有什么替代方法来呈现真实字体、水平和垂直对齐文本、精确地在边界框内呈现文本等?
我们在 JPEG 和 PNG 上呈现小 DPI 和 300 DPI 的文本。我们还使用了很多不同的字体。
一种方法是:
有许多常见的、基于文本的格式和/或在 Java 中有许多库:
LaTex 有一个易于安装的用于多个平台的二进制文件,可以光栅化您的图像,例如:
$ tex2png --帮助
关于 tex2png - 将 (La)TeX 转换为 PNG 图像
使用 tex2png [选项]
(La)Tex 字符串可以作为命令行参数或通过 STDIN 传递。通过 STDIN 手动输入时,使用 ctrl+d 终止输入。
选项 -b 传递给 dvipng 的“--bg”选项的背景颜色。它应该以 TeX color \special 语法给出,例如“rgb 0.2 0.2 0.2”。“透明”和“透明”也被接受。有关详细信息,请参阅 dvipng 帮助消息。默认值:“透明”
-c (La)TeX 字符串。
-d 输出目录。见下文。
-f 指定完整的输入文档。默认情况下,tex2png 提供自己的标题并将输入包装在文档标签中。此选项使用户能够提供带有自定义标题的完整 (La)TeX 文档。
-i 内联模式。这将包括输出中的高度和深度,可用于网页中的垂直对齐,例如
-h 显示此帮助消息。
-o 图像路径。见下文。
-p 要呈现的页码。默认值为 1。
-s 传递给“dvipng”的字体大小参数。默认值为 1400。
-t 临时工作目录。默认情况下,使用“mktemp”创建一个随机目录。
-T 裁剪内容周围的空白(dvipng -T 紧密)。
输出 如果设置了图像路径,则它是图像的完整路径。如果未设置,则图像名称将是带有“.png”扩展名的 (La)Tex 输入字符串的 sha256 摘要。如果已设置输出目录,则图像将保存在那里,否则将保存在当前目录中。
对于 PS/PDF 文件,您可以使用适当的 Adobe 应用程序、操作系统或 ImageMagick(此处为视频):
$ 转换-密度 300 file.pdf output.png
桌面出版软件经常达到高性能系统的极限。使用 Java 进行 DTP 是一个坏主意。您将沉迷于快速原子计算,因此使用 c/c++ 或其他低级编程语言编写的不同程序。
这就是为什么我接受安德鲁的回答,因为外部程序更好。
如果您正在寻找一个类似于桌面发布的 Java 项目,您可能会对在示例中使用http://community.jaspersoft.com/project/jasperreports-library感到满意。