如何让时代在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 sun-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;"
打印结果比较: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后记代码:
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连接器中 .
==================“相同的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 . PostScript很可能是由你的Java applet生成的,而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,并生成正确的输出?
1 回答
从我在截图中看到的,你的Win < - > Lin打印差异......
...做 NOT 源于Times < - > TimesNewRomanPSMT的差异,
...而是来自[SomeTimes] < - > [SomeTimesBold] 2 PostScript输出中的差异
每个打印机队列消耗的(在Linux上很可能涉及Ghostscript安装) . (顺便说一下,你在Windows上使用Ghostscript,还是你在那里打印本机打印机驱动程序?)
所以它本身并不是一个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 . 然后,要验证两种字体之间的视觉差异,请在每个字体文件上运行以下两个命令:
然后
生成的PDF(Times-fontfile-sample.pdf)将表示字体文件中包含的每个字形的表格样本,这些样本将映射到相应的Unicode代码点部分 .
您可以使用这些PDF来显示两种字体之间的最小视觉差异(但我敢打赌,您的差异会相当明显) .
如果您没有在Debian中安装
pdfoutline
和fntsample
,只需运行sudo apt-get install fntsample
...Update 2 (taking into account the updated problem description):
datacompboy现在提供了一个包含这4个文件的tarball:
使用这些文件,应该很容易找出问题的原因 . 如果datacompboy可以在Linux Ghostscript上运行Windows生成的PS文件,如下所示:
如果它呈现OK(即:与winout.pdf相同),则GS字体映射没有问题,但是winout / linout.ps中的实际文件差异存在问题 . 从那里开始,应该很容易继续分析 .
不幸的是,现在我不能自己运行测试 .
Update 3:
datacompboy的PDF文件
linout.pdf
和winout.pdf
有一个巨大的区别:Linux版本没有嵌入字体,而Windows版本有...结果是linout.pdf
的后任消费者在显示,打印,转换时会产生相当随意的结果或者关于字体处理这个文件 .所以这是另一个我能想到的测试 . 它检查用于
/Times-Bold
(由Ghostscript替换为真实的/NimbusRomNo9L-Medi
)和/ TimesNewRomanPS-BoldMT`的字体的Linux版本在字体度量方面有多大差异 .使用这些Ghostscript命令行创建三个不同的PDF:
a.pdf:
b.pdf:
c.pdf:
-dPDFSETTINGS=/prepress
参数应强制将字体嵌入到输出PDF中 . (这很重要,否则观看者可以使用任意替换字体来显示PDF . )-c
参数后面是一个小的PostScript代码段,它为PDF页面提供内容 .文件'a.pdf'和'b.pdf'不应该有所不同 . 他们只测试
/TimesNewRoman,Bold
和/TimesNewRomanPS-BoldMT
之间的字体别名是否确实按预期工作 .文件'c.pdf'与a.pdf和b.pdf在这里和那里的几个像素的顺序相比可能会略有差异,但在测试字符串的 tracking 中却是 NOT .
如果此测试按预期进行,则不同的字体文件,Fontmap.GS和Ghostscript本身都可以 . 那么问题只在于Linux Java applet产生输出(PS或PDF)的方式 .