如何让Times在linux下打印? 我安装了debian wheezy linux,ghostscript,cups,mscorefonts。 但是当我打印时,我得到的时间太宽了,相比窗户,单字母间距太宽了。
有什么方法可以解决这个问题?
从同一Java小程序和Win和Lin上完成打印。 来自Lin变种的Postscript使用Times字体,来自Win变体的postscript使用TimesNewRomanPSMT字体。 只需更换字体名称即可更改它,但不会更改输出中的任何内容。
=================
Debian Wheezy,Debian Squeeze,Ubuntu Natty检查为linux。 大多数支票都在Debian Wheezy。
的ghostscript: 安装:9.02~dfsg-2 太阳的Java6的JRE: 安装:6.26-1 cups-pdf printer。
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;"
打印结果Comparsion: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是 / Times-Bold ISOF
而且,最糟糕的是,它已经写了两行 - 所以问题出现在java&lt; =&gt; cups connector中。
================== “相同的Java Applet”是互联网银行应用程序iBank2。
“时代”被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。
最有可能由您的Java小程序生成的PostScript,Ghostscript只是打印过程中的消费者。 通常,我只是想确保它为Times One使用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字体文件复制到Linux。
它已经是Windows文件的副本。 msttcorefonts与一个相同,与windows一起分发。
由于生成的postscript文件已经将0401060拆分为两行,这意味着,java applet在打印时发现字体太宽,并在生成时拆分......所以问题是 - 如何在系统中替换Times字体那个java打印会找到TimesNewRoman而不是Nimbus,并生成正确的输出吗?
答案 0 :(得分:1)
根据我在屏幕截图中看到的, Win&lt; - &gt;林印刷差异......
。 (顺便说一下,你在Windows上使用Ghostscript,还是你在那里打印本机打印机驱动程序?)
所以它本身就是 NOT 一个Ghostscript问题......但它可能源于你的Win / Lin系统上不同的Java版本+配置。
您的Linux PostScript代码似乎使用/Times-Bold (ISOF????)
字体这一事实超出了Ghostscript的职责范围。 PostScript很可能是由Java applet生成的,而Ghostscript只是在打印过程中的消费者。
我认为你提到的这个不祥的ISOF
不是fontname的一部分,而是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(Times-fontfile-sample.pdf)将表示字体文件中包含的每个字形的表格样本,这些字形将映射到相应的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
如果它呈现OK(即:与winout.pdf相同),那么GS字体映射没有问题,但是winout / linout.ps中的实际文件差异存在问题。从那里开始,应该很容易继续分析。
不幸的是,现在我无法自己运行测试。
更新3:
datacompboy的PDF文件linout.pdf
和winout.pdf
有一个巨大的区别:Linux版本没有嵌入字体,而Windows版本有......结果是任何后方消费者{ {1}}在显示,打印,转换或处理与该字体有关的文件时会产生相当随意的结果。
所以这是另一个我能想到的测试。它检查用于linout.pdf
(由Ghostscript替换为真实/Times-Bold
)和/ TimesNewRomanPS-BoldMT`的字体的Linux版本在字体度量方面有多大差异。
使用这些Ghostscript命令行创建三个不同的PDF:
<强> a.pdf:强>
/NimbusRomNo9L-Medi
<强> b.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"
<强> C.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"
gs \
-o c.pdf \
-sDEVICE=pdfwrite \
-dPDFSETTINGS=/prepress \
-c "100 700 moveto \
/Times-Bold findfont \
12 scalefont \
setfont \
(0401060 0401060 0401060 0401060) show \
showpage"
参数应强制将字体嵌入到输出PDF中。 (这很重要,否则观众可以使用任意替换字体来显示PDF。)
-dPDFSETTINGS=/prepress
参数后面是一个为PDF页面提供内容的小PostScript代码段。
文件'a.pdf'和'b.pdf'不应该有所不同。他们只测试-c
和/TimesNewRoman,Bold
之间的字体别名是否确实按预期工作。
文件'c.pdf'与 a.pdf 和 b.pdf 在这里和那里按几个像素的顺序显示略有差异,但<测试字符串的 跟踪 中的strong> NOT 。
如果此测试按预期进行,则不同的字体文件,Fontmap.GS和Ghostscript本身都可以。那么问题只在于Linux Java applet产生输出的方式(PS或PDF)。