#delphi #pdf #printing #rave-reports
#delphi #PDF #печать #rave-отчеты
Вопрос:
Я тестировал некоторый код D2006 с использованием Rave reports на виртуальной машине и обнаружил, что приложение зависает, когда я создаю отчет в формате PDF, если принтер не установлен. Здесь происходит зависание:
exception message : The application seems to be frozen.
main thread ($108):
005c5e62 106 MyApp.exe RpRPTF SimpleTextWidth
006198f7 31b MyApp.exe RpMemo TMemoBuf.GetLine
0061a44a 086 MyApp.exe RpMemo TMemoBuf.MemoLinesLeft
005cba28 014 MyApp.exe RpBase TBaseReport.MemoLines
00672e8e 072 MyApp.exe MyAppReports PrintReportParagraph
00677f73 acb MyApp.exe MyAppReports PrintSummaryReportBody
0066b208 010 MyApp.exe MyAppMainForm TMainForm.RvSystemSummaryReportPrint
005c6f35 015 MyApp.exe RpBase TBaseReport.PrintEvent
005c8066 03a MyApp.exe RpBase TBaseReport.Execute
0060a299 125 MyApp.exe RpSystem TRvSystem.GenerateReport
0060a52a 07e MyApp.exe RpSystem TRvSystem.Execute
0067d364 0ac MyApp.exe MyAppReports DoPrintSummaryReport
0067d64d 1d5 MyApp.exe MyAppReports ProduceReports
0066e966 1e6 MyApp.exe MyAppProcessing ProcessMyAppData
0066ab9b 0d7 MyApp.exe MyAppMainForm TMainForm.DoProcessData
и, без сомнения, это как-то связано с нулевой шириной страницы, сбивающей с толку код, который вычисляет, сколько строк он может уместить на странице, или что-то в этом роде.
Дело в том, что я пишу PDF-файл, а не печатаю, поэтому я не понимаю, почему отсутствие принтера должно отключить этот код (установлен Acrobat Reader). Если я устанавливаю принтер, он ведет себя нормально. Зачем мне нужен установленный принтер (приложение может быть установлено на рабочей станции без установленного принтера — сообщение об ошибке «Вы не можете сгенерировать отчет в формате PDF, если не установите printer» кажется немного неуклюжим)?
Ответ №1:
Это давняя ошибка в Rave Reports. Это связано с тем, что принтер по умолчанию не установлен. Я поищу ссылки на старые сообщения на форумах Borland / CodeGear (CodeNewsFast, похоже, сейчас не отвечает). Возникла проблема с предположением о наличии принтера. Я не знаю, было ли это исправлено в самых последних версиях Rave. (D2006 был довольно давно.)
Если я правильно помню, решением было установить текстовый драйвер на «макет» принтера. Это позволяет Rave продолжать функционировать.
Комментарии:
1. вы когда-нибудь отслеживали эти сообщения?
2. @rossmcm: Извините… Я забыл проследить за этим. : ( Вот один, который я нашел в CodeNewsFast — убедитесь, что вы следите за потоками.