11.01.2006, 16:27 | #1 |
Участник
|
Печать самих файлов PDF
AXAPTA 2.5 SP3
Есть набор файлов PDF. Мне необходимо организовать печать этих файлов в определенном порядке. На первый взгляд, показалось все просто: PHP код:
В результате, очередь на печать формируется практически в произвольном порядке. "По хорошему", надо бы каждый раз дожидаться окончания печати одного файла и только после этого посылать на печать другой. Но Acrobat просто не закрывает свое окно по окончании печати (Acrobat 5.0 - разные "подверсии" - 5.0.1, 5.0.5). Т.е. даже зная номер процесса я не могу отследить факт окончания этого процесса, поскольку он так и не завершился. Пока вышел из положения поставив секундную задержку sleep(1000); Т.е. я предполагаю, что 1 секунды должно хватить Acrobat для полной обработки одного PDF-файла. В общем, вроде бы хватает. Но ведь понятно, что дело случая. Если вдруг на загрузку файла понадобиться более 1 секунды, то опять порядок следования будет нарушен. Есть ли какой-нибудь корректный способ отследить факт завершения печати PDF-файла? Может быть есть другие способы решения поставленной задачи? AXAPTA 2.5 SP3 |
|
|
За это сообщение автора поблагодарили: DSPIC (5). |
11.01.2006, 16:38 | #2 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
В принципе, это работает. Но! Acrobat просто не успевает корректно обрабатывать все поступающие файлы. Не успел он обработать и послать на печать один файл PDF, как ему уже подсовывают другой.
2. создайте bat-файл и подсовывайте shell'у его. |
|
11.01.2006, 17:01 | #3 |
Участник
|
виноват - ввод ссылок не освоил, решал через wmi , shell не годиться
//http://www.sql.ru/forum/actualthread.aspx?bid=4&tid=113360&pg=2&hl=wmi |
|
12.01.2006, 09:37 | #4 |
Участник
|
Последний раз редактировалось belugin; 12.01.2006 в 09:48. |
|
12.01.2006, 14:03 | #5 |
Участник
|
Как мне кажется, уважаемые гуру пропустили главную проблему при работе с Acrobat.
Acrobat сам НЕ ЗАКРЫВАЕТСЯ. Это главная проблема. Бессмысленно ждать завершения этого процесса, поскольку он автоматически НИКОГДА НЕ ЗАКРОЕТСЯ. Попробуйте дать из командной строки Windows команду вроде AcroRd32.exe /p /h "C:\Program Files\Adobe\Acrobat 5.0\Help\ENU\acrobat.pdf" Ключ /p - это отправка на печать, а ключ /h - это скрытый режим работы. Эту команду я взял не "с потолка", а из реестра Windows. Посмотрел, какая команда там записана при печати файлов через ShellExecute. Наблюдается 2 глюка:
Это значит, что при использовании API-функций в режиме ожидания завершения процесса я просто "подвешиваю" AXAPTA. Ну, или придется ЯВНО указать время ожидания, что эквивалетно использованию функции sleep() Ну, и у меня при запуске через приведенную по ссылке belugin функцию требует указания полного пути доступа к файлу AcroRd32.exe, что плохо как само по себе, так и с точки зрения того, что нужно ЯВНО указать имя запускающего файла. А это может быть и не AcroRd32.exe, а, например, acrobat.exe Впрочем, это мелочи. Таким образом, получается, что оценивать факт выполнения печати по тому, запущен Acrobat или нет просто не получается. Он не закрывается! Следовательно, единственное оставшееся место контроля - это очередь на печать. Надо отловить момент появления нужного мне задания в очереди и только после этого посылать на печать следующий файл. Даже через WMI это кажется не тривиальной задачей. А если учесть тот факт, что WMI - это потенциальная "дыра" в безопасности и некоторые продвинутые пользователи его просто отключают, то остается искать нужные API-функции. В любом случае, дело это не быстрое. Пока сделал такую заплатку: PHP код:
|
|
08.02.2006, 17:36 | #6 |
Участник
|
Эх, неблагодарная это работа оказалась.
Написал я класс для чтения очереди на печать. Стал он контролировать факт попадания очередного задания в очередь принтера. Но тут выяснилось, что слишком медленная сеть. Полный процесс от закачки файлов PDF с сетевого ресурса до попадания в очередь всех необходимых документов занимает около 10 минут. Пользователей это никак не устраивает. Вот и пришлось вернуться к старой схеме, когда документы печатаются как попало, зато нет задержки в AXAPTA. Т.е. код AXAPTA не ожидает принтера. Не ждет эти самые 10 минут. В общем, не пропадать же добру. Класс "заточен" под конкретную проблему, поэтому как универсальное решение не пригоден, но в нем есть полноценный код считывания очереди на печать принтера по умолчанию. Можно использовать как основу, если у кого опять встанет подобная задача. |
|
|
За это сообщение автора поблагодарили: mazzy (18), Serge Kotov (2), Logger (2). |
06.09.2007, 19:29 | #7 |
Участник
|
Спасибо, это то что я искал.
|
|
05.05.2014, 14:36 | #8 |
Участник
|
Закрытие Acrobat при печати pdf
Добрый день.
Столкнулся с проблемой "висящего" в процессах Acrobat'а при программной отправке на печать pdf-файлов. Ниже пример реализации печати с последующим закрытием Acrobat'а. Может кому-нибудь пригодится. X++: static void TestPrintPdf(Args _args) { System.Diagnostics.Process printJob; System.Diagnostics.ProcessStartInfo startInfo; FileName fileName = @"C:\Test.pdf"; ; try { printJob = new System.Diagnostics.Process(); startInfo = new System.Diagnostics.ProcessStartInfo(); startInfo.set_FileName(fileName); startInfo.set_UseShellExecute(true); startInfo.set_CreateNoWindow(true); startInfo.set_WindowStyle(System.Diagnostics.ProcessWindowStyle::Hidden); startInfo.set_Verb("print"); printJob.set_StartInfo(startInfo); printJob.Start(); if (!printJob.get_HasExited()) { if (!printJob.WaitForExit(5000)) printJob.Kill(); } if (printJob) { printJob.Close(); printJob.Dispose(); } } catch { if (printJob) { printJob.Close(); printJob.Dispose(); } } }
__________________
С уважением, Александр. Последний раз редактировалось samolalex; 05.05.2014 в 14:51. |
|
|
За это сообщение автора поблагодарили: Logger (3), Veter (1), kpoxa (1). |
07.12.2015, 15:44 | #9 |
Участник
|
Тоже столкнулись в такой проблемой. Стали использовать вот такой механизм
X++: WinAPI::shellExecute('Foxit_Reader.exe' , strFmt('/s /h /t "%1" "%2" "%3" "%4"' , _URL , printJobSettings.deviceName() , printJobSettings.printerDriverName() , printJobSettings.printerPortName() , true) ); |
|
17.08.2017, 10:34 | #10 |
Участник
|
Привет.
А никто не пробовал для печати акробатовских файлов задействовать winWord из пакета Office 2013 ? Вроде бы он это умеет. Думаю там будет проще решить проблемы с зависанием печатающей программы. С вордом таких проблем нет. Но есть сомнения, напечатает ли word документ также как Акробат или будут искажения. |
|
Теги |
axapta, download, pdf, print management, очередь печати, печать, полезное |
|
Похожие темы | ||||
Тема | Ответов | |||
печать на AOS | 10 | |||
Печать (сохранение) отчета в PDF | 41 | |||
Печать в PDF и отправка по почте…DAX 4 | 2 | |||
create Pdf invoice report | 1 | |||
Печать в PDF | 3 |
|