C # Отправить изображение через гнездо для печати - PullRequest
0 голосов
/ 08 мая 2018

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

1 Ответ

0 голосов
/ 09 мая 2018

Ответ - да, но нет.

Поддерживаемый метод заключается в использовании PrintDocument.

Поскольку C # может использовать небезопасный код и вызывать произвольные функции, в C #, конечно, можно делать все, что может делать компьютер.

Но нет.

Just. №

Не делай этого. Установите принтер, используйте PrintDocument.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...