今日の多くのプリンターや多機能デバイスは、PDFの直接印刷をサポートしています。これにより、問題の1つが解決する可能性があります。PDFをプリンタに送信するだけです。実際、URLの送信をサポートしているものもあり、プリンターはドキュメントを取得して印刷します。Lexmarkは確かにこれを行っており、他のいくつかのベンダーも同様に行っていると思います。これは、Word文書を処理する必要があることを意味します。Word 2007はPDF(Microsoftからインストールされたアドインを使用)をサポートしており、この関数をプログラムで使用して、C#で大成功を収めました。
そのためのコードは次のとおりです。
Microsoft.Office.Interop.Word.ApplicationClass msWord = new Microsoft.Office.Interop.Word.ApplicationClass();
object paramUnknown = Type.Missing;
object missing = Type.Missing;
object paramSaveChangesNo = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges;
//object paramFonts = Microsoft.Office.Interop.Word.wde
object paramFormatPDF = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatPDF;
object paramTrue = true;
object paramReadOnly = true;
object sourceDoc = @"c:\input.doc"
object target = @"c:\output.pdf";
msWord.Visible = false;
//open .doc
msWord.Documents.Open(ref sourceDoc, ref paramUnknown, ref paramReadOnly, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown);
//so it won't show on the taskbar
msWord.Application.Visible = false;
msWord.WindowState = Microsoft.Office.Interop.Word.WdWindowState.wdWindowStateMinimize;
//save .doc to new target name and format
msWord.ActiveDocument.SaveAs(ref targetDoc, ref paramFormatPDF, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramTrue, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown);
msWord.ActiveDocument.Close(ref missing, ref missing, ref missing);
msWord.Quit(ref paramSaveChangesNo, ref paramUnknown, ref paramUnknown);
最後に、デバイスがPDF印刷をサポートしていない場合は、Ghostscriptまたはその他のツールを使用してPDFをPSまたはPCLに変換できます。これは、管理されていないコードや最悪の場合を実行し、GSコマンドラインをシェルアウトして実行することを意味するため、最大ではありません。現在、これはWebアプリの1つで実行されており、正常に機能します。余談ですが、私たちは印刷用ではなく、多数のPDFを結合するためにそれを行いますが、最終的には同じように機能します。