4

AWT 字体渲染和度量似乎不适合真正的打印应用程序。字体渲染取决于 DPI,FontMetrics 给出错误结果。所以实际上不可能在边界框内渲染真实的文本。

Java 有什么替代方法来呈现真实字体、水平和垂直对齐文本、精确地在边界框内呈现文本等?

我们在 JPEG 和 PNG 上呈现小 DPI 和 300 DPI 的文本。我们还使用了很多不同的字体。

4

2 回答 2

5

一种方法是:

  • 使用更适合文本和格式的语言创建文档,然后
  • 使用典型的操作系统应用程序以所需的 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 文件,您可以使用适当的 Adob​​e 应用程序、操作系统或 ImageMagick(此处为视频):

$ 转换-密度 300 file.pdf output.png

于 2012-12-31T10:05:14.100 回答
1

桌面出版软件经常达到高性能系统的极限。使用 Java 进行 DTP 是一个坏主意。您将沉迷于快速原子计算,因此使用 c/c++ 或其他低级编程语言编写的不同程序。

这就是为什么我接受安德鲁的回答,因为外部程序更好。

如果您正在寻找一个类似于桌面发布的 Java 项目,您可能会对在示例中使用http://community.jaspersoft.com/project/jasperreports-library感到满意。

于 2013-01-04T16:10:41.377 回答