Postscript ファイルの印刷中に奇妙な問題を発見しました。
だからここに私のセットアップがあります:
私はWindows 8 PCを持っています。この PC にはC# アプリケーション"NetworkPrintTest.exe" があり、実行すると PDF が開き、Postscript ファイルが生成され、最終的には印刷されます。しかし、それは何もしません。エラーは発生しませんが、印刷もされません。同じプログラムがWindows 7でエラーなしで実行され、プリンターでファイルを印刷することさえできます。
前述のように、.ps ファイルは両方のオペレーティング システムで正常に生成されますが、印刷は失敗します。
ファイルを印刷するソースコードを次に示します。
public static bool SendBytesToPrinter(string szPrinterName, IntPtr pBytes, int dwCount, params string[] docName)
{
int dwWritten = 0;
IntPtr hPrinter = new IntPtr(0);
DOCINFOA di = new DOCINFOA();
bool flag = false;
di.pDocName = "print document";
if (docName.Length > 0)
di.pDocName = docName[0];
di.pDataType = "RAW";
if (OpenPrinter(szPrinterName.Normalize(), out hPrinter, IntPtr.Zero))
{
if (StartDocPrinter(hPrinter, 1, di))
{
if (StartPagePrinter(hPrinter))
{
flag = WritePrinter(hPrinter, pBytes, dwCount, out dwWritten);
EndPagePrinter(hPrinter);
}
EndDocPrinter(hPrinter);
}
ClosePrinter(hPrinter);
}
if (!flag)
{
Marshal.GetLastWin32Error();
}
return flag;
}
[StructLayout(LayoutKind.Sequential)]
public class DOCINFOA
{
[MarshalAs(UnmanagedType.LPStr)]
public string pDocName;
[MarshalAs(UnmanagedType.LPStr)]
public string pOutputFile;
[MarshalAs(UnmanagedType.LPStr)]
public string pDataType;
}
いくつかの DLL インポートを使用しました
[DllImport("winspool.Drv", CallingConvention = CallingConvention.StdCall, SetLastError = true, ExactSpelling = true)]
public static extern bool EndDocPrinter(IntPtr hPrinter);
[DllImport("winspool.Drv", CallingConvention = CallingConvention.StdCall, SetLastError = true, ExactSpelling = true)]
public static extern bool EndPagePrinter(IntPtr hPrinter);
[DllImport("gdi32.dll")]
private static extern int GetDeviceCaps(IntPtr hdc, int capindex);
[DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
public static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter, out IntPtr hPrinter, IntPtr pd);
GDI32.dll のバージョンが異なることがわかりましたが、今のところ問題はありません。
Windows 7 -> 6.1.7601.18275
Windows 8 -> 6.2.9200.16654
私のアプリケーションは.Net Framework 2.0のC#で書かれています