Можно ли напечатать изображение без использования 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. Любая помощь с благодарностью!