linux - linux下的Ghostscript:时间太宽

标签 linux printing ghostscript cups

如何使时间在linux下运行?
我已经安装了debian喘息linux、ghostscript、cups、mscorefonts。
但是当我打印的时候,我得到的时间太宽了,和窗口一比较——字母间距太宽了。
有办法解决这个问题吗?
从同一个Java小程序在Win和LIN上完成打印。
lin variant的postscript使用times字体,win variant的postscript使用timesnewromanpsmt字体。
只需替换字体名即可更改它,但不会更改输出中的任何内容。
=================
debian喘息,debian挤压,ubuntu natty检查为linux。
大多数支票都是德比安喘着气开的。
鬼脚本:
安装: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 Postscript代码:
%%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 Postscript代码:
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是
/泰晤士报粗体版
最糟糕的是,它已经写了两行了——所以问题出在Java的某个地方。
==================
“相同的Java小程序”是Internet银行应用程序IBank2。
“时间”被鬼魂脚本替换为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文件。
所以这不是鬼脚本本身的问题…但它可能源于win/lin系统上不同的java版本和配置。
Java在打印方面似乎有问题,但这并不取决于Java版本——两者都安装了最新的Java6。
这个postscript很可能是由java applet生成的,而ghostscript只是它在打印过程中的使用者。
通常,我只想确保它使用TimesNewRoman字体,而不是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 fontfile复制到linux。
它已经是windows文件的副本。msttcorefonts与一个相同,随Windows分发。
因为在生成的postscript文件中已经有0401060拆分成两行,也就是说,那个java applet在打印时发现字体太宽,而在生成时拆分…所以问题是——如何在系统中替换Times字体,以便Java打印能够找到TimesNewRoman而不是Nimbus,并生成正确的输出?

最佳答案

我在截图中看到,你的胜利<-->林打印的不同之处…
…不源于Times<-->TimesNewRomanPSmt差异,
…而是源于两个postscript输出中的[有时]<-->[有时加粗]差异
每个打印机队列(在Linux上很可能需要安装一个ghostscript)都会使用这个值。(顺便问一句,你是在windows上使用ghostscript,还是通过本地打印机驱动程序在那里打印?)
所以这不是鬼脚本本身的问题…但它可能源于win/lin系统上不同的java版本和配置。
实际上,您的linux postscript代码似乎使用了/Times-Bold (ISOF????)字体,这不属于ghostscript的职责范围。这个postscript很可能是由java applet生成的,而ghostscript只是它在打印过程中的使用者。
在我看来,您提到的这个不祥的ISOF不是fontname的一部分,而是postscript过程,必须在postscript文件的其他地方预先定义,并应用于/Times-Bold字体。这可能是一个重新编码原始字体以隔离编码的过程…
你说你可以同时访问两个字体文件(Windows上的TimesNewRomanpsBoldmt和Linux上的TimesBoldmt)。如果是这样,则将windows fontfile复制到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文件times-fontfile-sample.pdf将表示fontfile s中包含的每个glyph的表格示例,这些示例将映射到相应的unicode代码点部分。
您可以使用这些PDF显示两种字体之间的最小视觉差异(但我敢打赌,您的差异将相当明显)。
如果您没有在debian中安装pdfoutlinefntsample,只需运行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

如果它呈现正常(即:与winout.pdf相同),那么gs字体映射没有问题,但winout/linout.ps中的实际文件差异有问题。从这里开始,继续分析应该很容易。
不幸的是,现在我不能自己运行测试。
更新3:
datacompboy的pdf文件linout.pdfwinout.pdf有一个巨大的区别:linux版本没有嵌入字体,而windows版本有……其结果是,当显示、打印、转换或处理与字体相关的文件时,linout.pdf的任何后用户都将产生相当任意的结果。
这是我能想到的另一个测试。它检查用于/Times-Bold(由ghostscript替换为real/NimbusRomNo9L-Medi)和/timesnewromaps boldmt的linux版本的字体在字体度量方面有多大差异。
使用这些ghostscript命令行创建三个不同的pdf:
a.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.pdf和b.pdf相比,文件'c.pdf'可能会显示出一些细微的差别,只是在对测试字符串的跟踪方面没有差别。
如果测试按预期进行,那么不同的fontfiles、fontmap.gs和ghostscript本身都可以。那么问题就只在于linux java applet产生输出(ps或pdf)的方式。

关于linux - linux下的Ghostscript:时间太宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6303526/

相关文章:

PHP 未捕获异常 'ImagickException',消息为 'FailedToExecuteCommand'

linux - 如何在 Docker 容器中设置静态 IP 地址?

linux - 对线程使用 ps

c++ - 如何设置来自DeviceCapability的纸质表单?

ios - 在 Zebra iMZ320 上打印(Objective-C + ZebraSDK + ZPL)

windows - 编写一个打印作业以指定的时间间隔运行(很棒的派对)

pdf - Ghostscript 合并 PDF 压缩结果

pdf - 合并PDF时,Ghostscript会跳过字符

linux - 在浏览器上运行神器

android - 如何在不破坏手机的情况下测试我的自定义内核?