gpt4 book ai didi

c# - Windows 8 以编程方式打印 Postscript 文件

转载 作者:太空狗 更新时间:2023-10-30 01:20:12 24 4
gpt4 key购买 nike

我在打印 Postscript 文件时发现了一个奇怪的问题。

这是我的设置:

我有一台 Windows 8 PC,在这台 PC 上有一个 C# 应用程序“NetworkPrintTest.exe”,执行时应该打开一个 PDF,生成一个后记文件,最终应该打印它。但它什么也没做。我没有收到错误,但也不会打印。相同的程序在 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

我的应用程序是用 C#.Net Framework 2.0 中编写的

最佳答案

从 Windows Vista 开始,对于带有基于 XPS 的驱动程序的打印机,您需要使用数据类型“XPS_PASS”而不是“RAW”。

关于c# - Windows 8 以编程方式打印 Postscript 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19975988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com