3

ABCPDF を使用して、EMF ファイル経由で PDF ファイルをローカル プリンターに印刷しています。これは、ABC PDF のサンプル「ABCPDFView」プロジェクトに非常に密接に基づいています。私のアプリケーションは Windows 7 と Windows XP の開発ボックスでは問題なく動作しましたが、Windows 2003 のテスト ボックスに移行すると、単純な埋め込みフォント (Times New Roman 12 など) が完全に間違ってレンダリングされました (間違った場所、短くてしゃがんだ、ほとんどDPIは狂ったように間違っていました)。

ここで DPI を 240 にハードコーディングしたことに注意してください。b/c 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
      }
4

2 に答える 2

0

abcpdf 8 の新しいバージョンにアップグレードしてみてください。Gecko に基づく独自のレンダリング エンジンを備えているため、abcpdf が組み込みのサーバー バージョンの IE をレンダリングに使用している場合、このような問題を回避できます。

于 2011-12-06T12:26:31.717 に答える
0

私はもともと 1920x1080 の解像度で RDPing を行っていましたが、RDP を 1024x768 の解像度に切り替えることで問題は解決しました。私のメイン プログラムはサービスとして実行され、1024x768 の RDP セッションからこのサービスを開始すると修正されます。

これについて説明し、より洗練されたソリューションを提供できるかどうかを確認するために、ABC PDF を添付したメールを送信しましたが、今のところこれで機能します。

これは ABC PDF 7 であることに注意してください。この問題が他のバージョンに当てはまるかどうかはわかりません。

更新: ABC PDF サポートは、サービスがプロセスを開始した人からのディスプレイ解像度をキャッシュしている可能性があることを確認しました。彼らは、リモート デスクトップに関するその他の奇妙な問題を確認したことを確認し、この 1024x768 の回避策を使用するか、サービスをリモートで開始するよう勧めました。

于 2011-11-28T19:49:20.273 に答える