Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2018, 10:15   #1
Maray
Форумчанин
 
Регистрация: 03.01.2015
Сообщений: 160
Восклицание Печать в файл

Добрый день!

Помогите, пожалуйста. Сделал печать данных из datagridview. Все работает прекрасно. Попробовал этот же документ сохранить в файл, точнее сделал печать в файл, но вместо нормальных данных, там ерунда какая то. Подскажите, может не так сохраняю?

Код:
 private void button7_Click(object sender, EventArgs e)
        {
            PrintDocument Document = new PrintDocument();
            Document.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);
            SaveFileDialog dlg = new SaveFileDialog();
            dlg.Filter = @"Word Documents(*.doc)|*.doc";
            dlg.FileName = "*.txt";
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                Document.PrinterSettings.PrintToFile = true;
                Document.PrinterSettings.PrintFileName = dlg.FileName;
                Document.Print();
            }
        }
Код:
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {

            Graphics g = e.Graphics;
            int x = 10;
            int y = 20;
            int cell_height = 0;

            int colCount = dataGridView1.ColumnCount;
            int rowCount = dataGridView1.RowCount;

            Font font = new Font("Tahoma", 9, FontStyle.Bold, GraphicsUnit.Point);
            Font font1 = new Font("Tahoma", 14, FontStyle.Bold, GraphicsUnit.Point);

            int[] widthC = new int[colCount];

            int current_col = 0;
            int current_row = 0;

            while (current_col < colCount)
            {
                if (g.MeasureString(dataGridView1.Columns[current_col].HeaderText.ToString(), font).Width > widthC[current_col])
                {
                    widthC[current_col] = (int)g.MeasureString(dataGridView1.Columns[current_col].HeaderText.ToString(), font).Width + 20;
                }
                current_col++;
            }

            while (current_row < rowCount-1)
            {
                while (current_col < colCount)
                {
                    if (g.MeasureString(dataGridView1[current_col, current_row].Value.ToString(), font).Width > widthC[current_col])
                    {
                        widthC[current_col] = (int)g.MeasureString(dataGridView1[current_col, current_row].Value.ToString(), font).Width + 20;
                    }
                    current_col++;
                }
                current_col = 0;
                current_row++;
            }

            current_col = 0;
            current_row = 0;

            string value = "";

            int width = widthC[current_col];
            int height = dataGridView1[current_col, current_row].Size.Height;

            Rectangle cell_border;
            SolidBrush brush = new SolidBrush(Color.Black);

            g.DrawString("Продажи за период c " + dateTimePicker1.Text + " по " + dateTimePicker2.Text + "", font1, brush, x, y);
            y = y+30;
            

            while (current_col < colCount)
            {
                width = widthC[current_col];
                cell_height = dataGridView1[current_col, current_row].Size.Height;
                cell_border = new Rectangle(x, y, width, height);
                value = dataGridView1.Columns[current_col].HeaderText.ToString();
                g.DrawRectangle(new Pen(Color.Black), cell_border);
                g.DrawString(value, font, brush, x, y);
                x += widthC[current_col];
                current_col++;
            }
            while (current_row < rowCount)
            {

                while (current_col < colCount)
                {
                    width = widthC[current_col];
                    cell_height = dataGridView1[current_col, current_row - 1].Size.Height;
                    cell_border = new Rectangle(x, y, width, height);
                    value = dataGridView1[current_col, current_row - 1].Value.ToString();

                    g.DrawRectangle(new Pen(Color.Black), cell_border);
                    g.DrawString(value, font, brush, x, y);
                    x += widthC[current_col];
                    current_col++;
                }
                current_col = 0;
                current_row++;
                x = 10;
                y += cell_height;
            }
            g.DrawString("Итого: " + label4.Text + "", font, brush, x, y);
        }
Maray вне форума Ответить с цитированием
Старый 18.05.2018, 11:40   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

С чего вы взяли, что он напечатает в формате word?
Печать в файл - это сохранить данные для печати на компе без принтера, перенести его на компьютер с принтером, распечатать там.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Печать в текстовый файл (Си) zaira001002 Помощь студентам 4 22.06.2016 18:17
C, печать матрицы в файл с прочитанным названием Bombiman Помощь студентам 6 08.01.2016 14:22
Как текстовый файл отправить на печать orazz WPF, UWP, WinRT, XAML 0 25.04.2014 21:54
Печать в файл aleehamster C# (си шарп) 0 19.02.2011 01:25
Сохранение заданий на печать в файл изображения JPG DimD Фриланс 1 15.04.2009 19:27