2

如何让 Times 在 linux 下打印?我安装了 debian wheezy linux、ghostscript、cups、mscorefonts。但是当我打印时,我得到的时间太宽了,与 Windows 1 相比——字母间距太宽了。

有什么办法可以解决这个问题?

从同一个 Java 小程序以及 Win 和 Lin 上完成打印。Lin 变体的 Postscript 使用 Times 字体,Win 变体的 Postscript 使用 TimesNewRomanPSMT 字体。只是替换字体名称会更改它,但不会更改输出中的任何内容。

==================

Debian Wheezy、Debian Squeeze、Ubuntu Natty 检查为 linux。大多数检查都在 Debian Wheezy 中。

ghostscript:已安装:9.02~dfsg-2 sun-java6-jre:已安装:6.26-1 cups-pdf 打印机。

PPD 是 PDF.ppd:

*PCFileName:    "CUPS-PDF.PPD"
*Manufacturer:  "Generic"
*Product:   "(CUPS v1.1)"
*ModelName:     "Generic CUPS-PDF Printer"
*ShortNickName: "Generic CUPS-PDF Printer"
*NickName:      "Generic CUPS-PDF Printer"
*1284DeviceID:  "MFG:Generic;MDL:CUPS-PDF Printer;DES:Generic CUPS-PDF Printer;CLS:PRINTER;CMD:POSTSCRIPT;"

打印结果对比:http: //piccy.info/code2/1652248/4b2c3b10f5316f9836496af5501892d1/

我在 linux 系统上有 Times New Roman 字体!Windows 的 PDF 是在 linux 上使用 linux ghostscript 从 windows 机器上生成的 postscript 源生成的。

例如,看一下右上角,0401060 写在哪里。Windows后记代码:

%%IncludeResource: font TimesNewRomanPS-BoldMT
F /F1 0 /256 T /TimesNewRomanPS-BoldMT mF 
/F1S53 F1 [83 0 0 -83 0 0 ] mFS
F1S53 Ji 
4292 333 M (0401060)[42 42 42 42 42 42  0]xS 
N 367 367 M 1192 367 I K 
N 1667 367 M 2492 367 I K 
51282 VM?

linux后记代码:

10.0 29 F
<303430313036> 37.44 526.0 52.0 S
10.0 29 F
<30> 6.24 541.0 62.0 S
N

如您所见,它选择大小为 10.0 的字体 #29。字体 #29 是 /Times-Bold ISOF

而且,最糟糕的是,它已经写了两行——所以问题出在 java<=>cups 连接器的某个地方。

================== “Same Java Applet”是网上银行应用程序iBank2。

"Times" 被 Ghostscript 替换为 Nimbus,而不是 TimesNewRoman:

./Init/Fontmap.GS:/Times-Roman          /NimbusRomNo9L-Regu ;
./Init/Fontmap.GS:/Times-Italic         /NimbusRomNo9L-ReguItal ;
./Init/Fontmap.GS:/Times-Bold           /NimbusRomNo9L-Medi ;
./Init/Fontmap.GS:/Times-BoldItalic     /NimbusRomNo9L-MediItal ;
./Init/Fontmap.GS:/TimesNewRoman                /TimesNewRomanPSMT      ;
./Init/Fontmap.GS:/TimesNewRoman,Bold           /TimesNewRomanPS-BoldMT     ;
./Init/Fontmap.GS:/TimesNewRoman,Italic         /TimesNewRomanPS-ItalicMT   ;
./Init/Fontmap.GS:/TimesNewRoman,BoldItalic     /TimesNewRomanPS-BoldItalicMT   ;

(顺便说一句,您是在 Windows 上使用 Ghostscript,还是通过本机打印机驱动程序进行打印?)在 Windows 上,我将 PostScript 本机驱动程序打印到 .ps 文件。

所以它本身不是一个 Ghostscript 问题......但它可能源于您的 Win/Lin 系统上的不同 Java 版本 + 配置。它看起来像 java 中的打印问题,但这并不取决于 java 版本——两者都安装了最新的 java6。

该 PostScript 很可能是由您的 Java 小程序生成的,而 Ghostscript 只是它在打印过程中的使用者。通常,我只想确保它使用 TimesNewRoman 字体作为 Times one,而不是 Nimbus。我没能做到这一点。

打印生成的 ISOF 宏为:

/ISOF {
     dup findfont dup length 1 add dict begin {
             1 index /FID eq {pop pop} {D} ifelse
     } forall /Encoding ISOLatin1Encoding D
     currentdict end definefont
} BD

这是开始文件的剪辑,并生成了生成的 PDF:http ://datacompboy.ru/u/smpl.tar.bz2

如果是这样,则将 Windows 字体文件复制到 Linux。

它已经是windows文件的副本。msttcorefonts 与一个相同,随windows 一起分发。

由于在生成的 postscript 文件中已经将 0401060 拆分为两行,这意味着该 java 小程序在打印时发现字体太宽,并在生成时拆分...所以问题是 - 如何在系统中替换 Times 字体所以,那个 java打印会找到 TimesNewRoman 而不是 Nimbus,并生成正确的输出?

4

1 回答 1

1

从我在屏幕截图中看到的,您的Win <--> Lin打印差异...

  • ...不起源于Times <--> TimesNewRomanPSMT差异,
  • ...而是来自2 个 PostScript 输出中的[SomeTimes] <--> [SomeTimesBold]差异

每个打印机队列都使用它(在 Linux 上很可能涉及 Ghostscript 安装)。(顺便说一句,您是在 Windows 上使用 Ghostscript,还是通过本机打印机驱动程序进行打印?)

所以它本身不是一个 Ghostscript 问题......但它可能源于您的 Win/Lin 系统上的不同 Java 版本 + 配置。

您的 Linux PostScript 代码似乎使用该/Times-Bold (ISOF????)字体的事实不在 Ghostscript 的责任范围内。该 PostScript 很可能是由您的 Java 小程序生成的,而 Ghostscript 只是它在打印过程中的使用者。

在我看来,ISOF你提到的这个不祥之兆不是字体名称的一部分,而是一个 PostScript 过程,必须在 PostScript 文件的其他地方预定义并应用于/Times-Bold字体。这可能是一个将原始字体重新编码为 ISOLatin1Encoding 的过程......

您说您可以访问两个字体文件(Windows 上的TimesNewRomanPS-BoldMT和 Linux 上的 Times-Bold)。如果是这样,则将 Windows 字体文件复制到 Linux。然后,要验证两种字体之间的视觉差异,请在每个字体文件上运行以下两个命令:

fntsample \
   -f /path/to/Times-fontfile.suffix \
   -o Times-fontfile.suffix.pdf \
   -l \
    > Times-fontfile.suffix.txt

进而

pdfoutline \
   Times-fontfile.suffix.pdf \
   Times-fontfile.suffix.txt \
   Times-fontfile-sample.pdf

生成的 PDF(s) Times-fontfile-sample.pdf 将代表字体文件中包含的每个字形的表格样本,这些将映射到相应的 Unicode 代码点部分。

您可以使用这些 PDF 来揭示两种字体之间的最小视觉差异(但我敢打赌,您的差异会相当明显)。

如果您还没有安装pdfoutline并且fntsample在您的 Debian 中,只需运行sudo apt-get install fntsample...


更新2(考虑到更新的问题描述):

datacompboy 现在提供了一个包含以下 4 个文件的 tarball:

-rw-r--r-- datacompboy/datacompboy 37722 2011-06-22 08:54 smpl/linout.ps
-rw-r--r-- datacompboy/datacompboy 15324 2011-06-22 08:54 smpl/linout.pdf
-rw-r--r-- datacompboy/datacompboy 54422 2011-06-22 08:57 smpl/winout.pdf
-rw-r--r-- datacompboy/datacompboy 99099 2011-06-22 08:56 smpl/winout.ps

有了这些文件,应该很容易查明问题的原因。如果 datacompboy 可以在 Linux Ghostscript 上运行 Windows 生成的 PS 文件,如下所示:

gs winout.ps

如果渲染OK(即:与winout.pdf相同),则GS字体映射没有问题,但winout/linout.ps中的实际文件差异有问题。从那里开始,继续分析应该很容易。

不幸的是,现在我无法自己运行测试。


更新 3:

datacompboy 的 PDF 文件linout.pdfwinout.pdf有一个巨大的区别:Linux 版本没有嵌入字体,而 Windows 版本有......结果是任何后继消费者linout.pdf在显示、打印、转换或处理时都会产生相当随意的结果关于字体的文件。

所以这是我能想到的另一个测试。它检查所用字体的 Linux 版本/Times-Bold(由 Ghostscript 替换为 real /NimbusRomNo9L-Medi)和 /TimesNewRomanPS-BoldMT` 的字体度量有多少不同。

使用这些 Ghostscript 命令行创建三个不同的 PDF:

一个.pdf:

gs \
 -o a.pdf \
 -sDEVICE=pdfwrite \
 -dPDFSETTINGS=/prepress \
 -c "100 700 moveto \
     /TimesNewRoman,Bold findfont \
     12 scalefont \
     setfont \
     (0401060 0401060 0401060 0401060) show \
     showpage"

b.pdf:

gs \
 -o b.pdf \
 -sDEVICE=pdfwrite \
 -dPDFSETTINGS=/prepress \
 -c "100 700 moveto \
     /TimesNewRomanPS-BoldMT findfont \
     12 scalefont \
     setfont \
     (0401060 0401060 0401060 0401060) show \
     showpage"

c.pdf:

gs \
 -o c.pdf \
 -sDEVICE=pdfwrite \
 -dPDFSETTINGS=/prepress \
 -c "100 700 moveto \
     /Times-Bold findfont \
     12 scalefont \
     setfont \
     (0401060 0401060 0401060 0401060) show \
     showpage"

-dPDFSETTINGS=/prepress参数应强制将字体嵌入到输出 PDF 中。(这很重要,否则查看者可以使用任意替换字体来显示 PDF。)

参数-c后面是一个为 PDF 页面提供内容的 PostScript 小片段。

文件“a.pdf”和“b.pdf”应该没有区别。他们只测试字体之间的别名/TimesNewRoman,Bold是否/TimesNewRomanPS-BoldMT确实按预期工作。

与a.pdfb.pdf相比,文件 'c.pdf' 可能会显示出细微的差异,这里和那里大约有几个像素的顺序,但在测试字符串的跟踪中却没有。

If this test goes as predicted, the different fontfiles, the Fontmap.GS and Ghostscript itself all are OK. Then the problem is only with the way the Linux Java applet produces its output (PS or PDF).

于 2011-06-21T15:29:09.110 回答