AWT字体渲染和度量的替代方案

4

AWT字体渲染和度量似乎不适用于实际的打印应用程序。字体渲染取决于DPI,FontMetrics会给出错误的结果。因此,在边界框内实际上无法呈现真实文本。

Java的替代方案是什么,以呈现真实的字体,水平和垂直对齐文本,在边界框内精确呈现文本等?

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


几个问题:您是在屏幕上还是打印时呈现字体等内容?您显然正在使用Java - 还有其他限制吗? - Andrew Alcock
另外还有几个问题可以帮助我回答:1)这是安装在客户端台式机/笔记本电脑上的应用程序,还是作为服务器应用程序向Web提供PNG / JPEG?2)您是否正在生成大量的JPEG / PNG或者它们很少被创建?您是否可以接受涉及Java调用操作系统或其他应用程序的解决方案? - Andrew Alcock
这是一个生成大量PNG(JPEG)的服务器应用程序。我认为我们可以接受调用操作系统或另一个应用程序。不过,如果该应用程序保持与操作系统无关,那就更好了。 - Andrey Minogin
2个回答

5

一种方法是:

  • 创建一个更适合文本和格式的语言的文档,然后
  • 使用所需DPI的典型操作系统应用程序“打印”或栅格化该文档。

有许多常见的格式,它们基于文本和/或在Java中拥有众多库:

LaTeX在多个平台上都有易于安装的二进制文件,可以将您的图像栅格化,例如:

$ tex2png --help

关于 tex2png - 将(La)TeX转换为PNG图像

用法 tex2png [选项]

(La)Tex字符串可以通过命令行参数或STDIN传递。当通过STDIN手动输入时,请使用ctrl+d终止输入。

选项 -b 传递给dvipng的“--bg”选项的背景颜色。它应该以TeX颜色\special语法给出,例如“rgb 0.2 0.2 0.2”。还接受“Transparent”和“transparent”。有关详细信息,请参见dvipng帮助消息。默认值:'transparent'

-c (La)TeX字符串。

-d 输出目录。请参见下文。

-f 指定完整的输入文档。默认情况下,tex2png提供自己的标题并将输入包装在文档标记中。此选项使用户能够提供具有自定义标题的完整(La)TeX文档。

-i 内联模式。这将在输出中包括高度和深度,可用于Web页面的垂直对齐,例如。

-h 显示此帮助消息。

-o 图像路径。请参见下文。

-p 要呈现的页面号。默认值为1。

-s 传递给“dvipng”的字体大小参数。默认值为1400。

-t 临时工作目录。默认情况下,使用“mktemp”创建一个随机目录。

-T 裁剪内容周围的空白区域(dvipng -T tight)。

输出 如果设置了图像路径,则它是图像的完整路径。如果没有设置,则图像名称将是(La)Tex输入字符串的sha256摘要,并带有“.png”扩展名。如果设置了输出目录,则图像将保存在其中,否则将保存在当前目录中。

对于PS/PDF文件,您可以使用相应的Adobe应用程序、操作系统或ImageMagick (视频在此):

$ convert -density 300 file.pdf output.png


1

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

这就是为什么我接受安德鲁的答案,认为外部程序甚至更好。

如果你正在寻找类似桌面出版的Java项目,那么你可以尝试使用http://community.jaspersoft.com/project/jasperreports-library等工具。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接