私はABFDFを使用して、PDFファイルをEMFファイル経由でローカルプリンタに印刷しています。私はこれをABC PDFのサンプル "ABCPDFView"プロジェクトに非常に基づいています。私のアプリケーションはWindows 7とWindows XPの開発ボックスで正常に機能しましたが、Windows 2003のテストボックスに移動したとき、単純な埋め込みフォント(Times New Roman 12など)は完全に間違っていました(間違った場所、 DPIはひどく間違っていた)。ABCPDFフォント印刷レイアウト - 機械依存
ここではDPIを240にハードコーディングしています。私は240x240を強制する奇妙なメインフレームのプリントドライバを使用しています。私はそのドライバーを犯人として割り引くことができます。印刷中にEMFファイルをローカルに保存すると、同じレイアウト上の問題が発生します。 PNGまたはTIFFファイルにレンダリングする場合、これは同じコード(.emfの代わりに.pngを入れてください)を使用している私のすべてのサーバー上で正常に見えます。最後に、ABCPDFViewプロジェクトを使用して手動でランダムテキストボックスをPDFに追加すると、そのテキストもEMFファイルで間違ってレンダリングされます。 (サイドノート、Acrobatを使用してPDFを印刷した場合、テキストはうまく描画されます)
更新:この問題を抱えている人にとっては有用な点はありませんでした。 RenderTextAsTextを "0"に設定することで問題を回避することができます(下記のコードを参照)。これにより、ABCPDFはテキストをポリゴンとして表示し、問題をなくします。しかし、私のEMFファイルのサイズが大幅に増え、最終的な印刷文書ではポリゴンがきれいにレンダリングされないので、これは素晴らしい解決策ではありません。
誰かがこの奇妙なフォントの問題の原因について考えていますか?
private void DoPrintPage(object sender, PrintPageEventArgs e)
{
using (Graphics g = e.Graphics)
{
//... omitted code to determine the rect, used straight from ABC PDF sample
mDoc.Rendering.DotsPerInch = 240 ;
mDoc.Rendering.ColorSpace = "RGB";
mDoc.Rendering.BitsPerChannel = 8;
mDoc.SetInfo(0, "RenderTextAsText", "0");//the magic is right here
byte[] theData = mDoc.Rendering.GetData(".emf");
using (MemoryStream theStream = new MemoryStream(theData))
{
using (Metafile theEMF = new Metafile(theStream))
{
g.DrawImage(theEMF, theRect);
}
}
//... omitted code to move to the next page
}
私はこのエラーの原因をより正確に掘り下げました。リモートデスクトップが原因であることが判明しました。私がRDPを使っているサーバーにはこの問題があります。 – Dave