有没有一种方法可以在不使用PrintDocument的情况下打印图像?我的团队坚持直接打印到IP而无需在机器上安装打印机(网络打印机,但不想在每台计算机上安装40多台打印机)。到目前为止我所尝试的内容已经打印出一个空白页面,然后在下一次尝试中打印出一行乱码。这是我最新的(胡言乱语):
public static bool SendLTLReportToIP(IList<Stream> _streams, string ipAddress, int port)
{
bool rtn = true;
using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
IAsyncResult results = socket.BeginConnect(IPAddress.Parse(ipAddress), port, null, null);
bool success = results.AsyncWaitHandle.WaitOne(5000, true);
if (!socket.Connected)
{
rtn = false;
}
else
{
foreach (var stream in _streams)
{
Image image = System.Drawing.Image.FromStream(stream);
byte[] imageBytes = ImageToByte(image);
int numberOfBytes = imageBytes.Length;
byte[] numberOfBytesArray = BitConverter.GetBytes(numberOfBytes);
/*StreamReader reader = new StreamReader(stream);
string MSG = reader.ReadLine();
byte[] sendData = Encoding.ASCII.GetBytes(MSG);*/
int result = socket.Send(numberOfBytesArray, numberOfBytesArray.Length, 0);
if (result == 0)
{
rtn = false;
}
}
}
return rtn;
}
我们最初发送此数据的方式是使用PrintDocument,其打印页面功能如下:
private void PrintPage(object sender, PrintPageEventArgs ev)
{
using (Metafile pageImage = new Metafile(_streams[_currentPageIndex]))
{
Rectangle destRect = new Rectangle(0, 0, pageImage.Width, pageImage.Height);
ev.Graphics.DrawImage(pageImage, destRect);
_currentPageIndex++;
ev.HasMorePages = (_currentPageIndex < _streams.Count);
}
}
有什么方法可以基本上将两者结合起来?试图只是窃取PrintPage函数并将其放在我的foreach中,但我需要一个DrawImage函数的对象。非常感谢任何帮助!
答案 0 :(得分:-1)
答案是肯定的,但没有。
支持的方法是使用PrintDocument。
由于C#可以使用不安全的代码并调用任意函数,因此在C#中可以使用计算机可以执行的任何操作。
但不是。
只需。没有。
不要这样做。安装打印机,使用PrintDocument。