Форум программистов, компьютерный форум CyberForum.ru

Печать текстового файла - C++

Восстановить пароль Регистрация
 
deniska91
54 / 3 / 3
Регистрация: 17.05.2014
Сообщений: 72
11.07.2014, 22:59     Печать текстового файла #1
Пытаюсь распечатать текстовый файл.
Использую шаги и функции как написано в MSDN:

To begin a print job, call StartDocPrinter.
To begin each page, call StartPagePrinter.
To write data to a page, call WritePrinter.
To end each page, call EndPagePrinter.
Repeat 2, 3, and 4 for as many pages as necessary.
To end the print job, call EndDocPrinter.


И вроде все нормально, все функции выполняются успешно ( возвращают не 0 ), но печать не начинается все равно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2014, 22:59     Печать текстового файла
Посмотрите здесь:

C++ Выборка из текстового файла
Печать текстового файла C++
C++ Редактирование текстового файла
C++ Сортировка текстового файла
C++ Считывание текстового файла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
11.07.2014, 23:40     Печать текстового файла #2
deniska91, код в студию!
deniska91
54 / 3 / 3
Регистрация: 17.05.2014
Сообщений: 72
11.07.2014, 23:48  [ТС]     Печать текстового файла #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
int PrintFileToPrinter(char* sFileName)
{
     int ret = 0;
     HANDLE     hPrinter;
     DOC_INFO_1 DocInfo;
     DWORD      dwJob;
     DWORD      dwBytesWritten;
     char buffer[4096];
     DWORD dwCount;
     FILE* pF;
 
     TCHAR sPrinterName[MAX_PATH] = {0};
     DWORD Size = MAX_PATH;
 
     GetDefaultPrinter(sPrinterName, &Size);
    
     pF = fopen(sFileName, "rb");
     if (pF)
     {
           if( OpenPrinter( sPrinterName, &hPrinter, NULL ) )
           {
                DocInfo.pDocName = sFileName;
                DocInfo.pOutputFile = NULL;
                DocInfo.pDatatype = "RAW";
 
                if( (dwJob = StartDocPrinter( hPrinter, 1, (LPBYTE)&DocInfo )) != 0 )
                {
                      if( StartPagePrinter( hPrinter ) )
                      {
                          while( ret = !feof(pF) )
                          {
                                dwCount = fread( buffer, sizeof( char ), sizeof( buffer ) / sizeof( char ), pF );
                                if (dwCount <= 0) break;
                                if( !WritePrinter( hPrinter, &buffer[0] , dwCount, &dwBytesWritten ) ) break;
                          }
                          EndPagePrinter( hPrinter );
                      }
                      EndDocPrinter( hPrinter );
                }
                ClosePrinter( hPrinter );
           }
           fclose(pF);
     }
     return ret;
}
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
12.07.2014, 00:28     Печать текстового файла #4
deniska91, я думаю, Вам стоит посмотреть в сторону функции GetDefaultPrinter. Почитайте еще раз документацию. Она первым параметром просит строку с названием принтера, а Вы ей пустую строку. не хорошо как-то.
deniska91
54 / 3 / 3
Регистрация: 17.05.2014
Сообщений: 72
12.07.2014, 00:48  [ТС]     Печать текстового файла #5
metaluga145, нет, тут все правильно. Эта функция возвращает имя принтера по умолчанию.

Файл даже в очередь на печать добавляется, но после функции EndDocPrinter вылетает из очереди без печати. Я так понимаю, что нужен какой то завершающий символ передать.
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
12.07.2014, 00:50     Печать текстового файла #6
уже исправили
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
12.07.2014, 00:58     Печать текстового файла #7
MrCold, если вопрос решен где-то еще, то скажите решение. всем же интересно
deniska91
54 / 3 / 3
Регистрация: 17.05.2014
Сообщений: 72
12.07.2014, 01:01  [ТС]     Печать текстового файла #8
Я не видел решение по данной проблеме на других ресурсах, хотя находил вопросы примерно по той же проблеме
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2014, 10:24     Печать текстового файла
Еще ссылки по теме:

Описать функцию PoslSu(t), которая выводит на печать последнюю строку непустого текстового файла C++
Открытие текстового файла C++
Указание текстового файла-источника и принимающего файла в cmd C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,204
Завершенные тесты: 1
12.07.2014, 10:24     Печать текстового файла #9
Проблема, мне кажется, в том, что Вы посылаете на принтер непосредственно содержимое файла.
А он этого не понимает, поскольку требует некоторых последовательностей,
которые определены в постскрипт формате.
Думаю, проще будет пользоваться не WritePrinter, а функциями GDI используя hPrinter как HDC.
Yandex
Объявления
12.07.2014, 10:24     Печать текстового файла
Ответ Создать тему
Опции темы

Текущее время: 08:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru