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
}