如何使时间在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中安装
pdfoutline
和fntsample
,只需运行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.pdf
和winout.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/