用API打印问题:为什么只能打选取的.txt文件,不能打word,excel,html等,我是向打印机输出byte[]啊
选取.txt文本文件打没有问题,但是选取word等文件打出来得就是乱码!!我是向打印机输出byte[]啊。。为什么。。
请高手指点。
using System;
using System.IO;
using System.Drawing.Printing;
using System.Runtime.InteropServices;
namespace XXL.Tools
{
public class PrintingUtil
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
struct DOCINFOW
{
[MarshalAs(UnmanagedType.LPWStr)]
public string pDocName;
[MarshalAs(UnmanagedType.LPWStr)]
public string pOutputFile;
[MarshalAs(UnmanagedType.LPWStr)]
public string pDataType;
}
[DllImport("winspool.drv", CharSet = CharSet.Unicode, ExactSpelling = false,
CallingConvention = CallingConvention.StdCall)]
public static extern long OpenPrinter(string pPrinterName, ref IntPtr phPrinter, int pDefault);
//[DllImport("winspool.Drv", EntryPoint = "OpenPrinterW",
// CharSet = CharSet.Unicode, SetLastError = true,
// ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
//static extern bool OpenPrinter(string src, ref IntPtr hPrinter, long pd);
[DllImport("winspool.Drv", EntryPoint = "ClosePrinter",
CharSet = CharSet.Unicode, SetLastError = true,
ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
static extern bool ClosePrinter(IntPtr hPrinter);
[DllImport("winspool.Drv", EntryPoint = "StartDocPrinterW",
CharSet = CharSet.Unicode, SetLastError = true,
ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
static extern bool StartDocPrinter(IntPtr hPrinter,
int level, ref DOCINFOW pDI);
[DllImport("winspool.Drv", EntryPoint = "EndDocPrinter",
CharSet = CharSet.Unicode, SetLastError = true,
ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
static extern bool EndDocPrinter(IntPtr hPrinter);
[DllImport("winspool.Drv", EntryPoint = "StartPagePrinter",
CharSet = CharSet.Unicode, SetLastError = true,
ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
static extern bool StartPagePrinter(IntPtr hPrinter);
[DllImport("winspool.Drv", EntryPoint = "EndPagePrinter",
CharSet = CharSet.Unicode, SetLastError = true,
ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
static extern bool EndPagePrinter(IntPtr hPrinter);
[DllImport("winspool.Drv", EntryPoint = "WritePrinter",
CharSet = CharSet.Unicode, SetLastError = true,
ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
static extern bool WritePrinter(IntPtr hPrinter,
IntPtr pBytes, int dwCount, ref int dwWritten);
//SendBytesToPrinter()
//When the function is given a printer name and an unmanaged array of
//bytes, the function sends those bytes to the print queue.
//Returns True on success or False on failure.
public bool Sen