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 は、Windows マシンで生成されたポストスクリプト ソースから Linux ゴーストスクリプトを使用して Linux で生成されました。

たとえば、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 です

そして、最悪の場合、すでに 2 行が書き込まれているため、問題は java<=>cups コネクタのどこかにあります。

================== 「同じJavaアプレット」はネットバンクアプリiBank2です。

「Times」は、Ghostscript によって、TimesNewRoman ではなく、Nimbus に置き換えられます。

./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 は印刷プロセスを通過するときにそれを消費するだけです。通常、Nimbus ではなく、Times one に TimesNewRoman フォントが使用されていることを確認したいだけです。そして、私はこれを作るのに失敗しました。

印刷によって生成される 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 が 2 行に分割されているため、その Java アプレットは印刷中にそのフォントが広すぎることがわかり、生成時に分割されます... 問題は、システムで Times フォントを置き換える方法、その Java印刷すると Nimbus ではなく TimesNewRoman が検出され、正しい出力が生成されますか?

4

1 に答える 1

1

スクリーンショットから、 Win <--> Linの印刷の違いが分かります...

  • ... Times <--> TimesNewRomanPSMTの違いに由来するものではありません。
  • ...しかし、むしろ[SomeTimes] <--> [SomeTimesBold] 2 つの PostScript 出力の違いから来ています

これは、各プリンター キューによって消費されます (Linux では、Ghostscript のインストールが必要になる可能性が非常に高くなります)。(ところで、あなたは Windows で Ghostscript を使用していますか、それともネイティブ プリンター ドライバーを介して印刷していますか?)

したがって、Ghostscript 自体の問題ではありませんが、Win/Lin システムの異なる Java バージョン + 構成に起因する可能性があります。

Linux PostScript コードが/Times-Bold (ISOF????)フォントを使用しているように見えるという事実は、Ghostscript の責任外です。その PostScript はおそらく Java アプレットによって生成され、Ghostscript は印刷プロセスを通過するときにのみ使用します。

あなたが言及したこの不吉なものISOFはフォント名の一部ではなく、PostScript ファイルの他の場所で事前に定義する必要があり、/Times-Boldフォントに適用される PostScript プロシージャであるように見えます。おそらく元のフォントをISOLatin1Encodingに再エンコードする手順です...

両方のフォント ファイル ( Windows ではTimesNewRomanPS-BoldMTと Linux ではTimes-Bold ) にアクセスできると言います。その場合は、Windows フォント ファイルを Linux にコピーします。次に、2 つのフォントの視覚的な違いを確認するために、各フォント ファイルで次の 2 つのコマンドを実行します。

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 を使用して、2 つのフォント間の視覚的な相違を最小限に抑えることもできます (ただし、相違点はかなり明白になると思います)。

Debian にインストールしていない場合は、実行しpdfoutlineてください...fntsamplesudo 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 が Windows で生成された PS ファイルを Linux Ghostscript で実行できる場合、次のようになります。

gs winout.ps

正常にレンダリングされる場合 (つまり、winout.pdf と同じ)、GS フォント マッピングに問題はありませんが、winout/linout.ps の実際のファイルの違いに問題があります。そこから、分析を続けるのは非常に簡単なはずです。

残念ながら、今のところ自分でテストを実行することはできません。


更新 3:

datacompboy の PDF ファイルlinout.pdfwinout.pdf大きな違いが 1 つあります。Linux 版にはフォントが埋め込まれていませんが、Windows 版には埋め込まれていますlinout.pdf。フォントに関するファイル。

そこで、私が考えることができる別のテストがあります。Linux バージョンのフォント/Times-Bold(Ghostscript によって real に置き換えられ/NimbusRomNo9L-Mediます) と /TimesNewRomanPS-BoldMT` のフォント メトリックがどの程度異なるかを確認します。

次の Ghostscript コマンドラインで 3 つの異なる 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が実際に期待どおりに機能するかどうかのみをテストします。

ファイル「c.pdf」は、a.pdfおよびb.pdfと比較して、あちこちで数ピクセルのオーダーでわずかな違いを示す可能性がありますが、テストされた文字列の追跡ではそうではありません。

このテストが予測どおりに進む場合、さまざまなフォント ファイル、Fontmap.GS、および Ghostscript 自体はすべて問題ありません。その場合、問題は Linux Java アプレットがその出力 (PS または PDF) を生成する方法だけにあります。

于 2011-06-21T15:29:09.110 に答える