Войти

Показать полную графическую версию : [решено] Печать pdf-файлов из командной строки.


Michael
01-02-2019, 11:46
Начало здесь (http://forum.oszone.net/post-2855324-6.html)
В определенный каталог пользователь выкладывает pdf-файлы.
Надо в автоматическом режиме их печатать из командной строки (скриптом в шедулере)
Можно сделать так:
"c:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe" /n /t c:\temp\print\small.pdf
Но после печати процесс Adobe Acrobat Reader не завершается, соответственно батник "замирает".
Решил переносить файлы в подкаталог и оттуда их печатать, а удалять другим скриптом (где-нибудь в автозагрузке).
Проблема в том, что файлы могут быть до 50Мб и, чисто теоретически, процесс переноса может быть запущен в том момент, когда копирование в подкаталог еще не завершилось. Поэтому файл переименовываю в каталоге, проверяю на ошибку переименования (файл "занят"), потом переношу и из подкаталога печатаю.
Получилось следующим образом:

echo off
Setlocal EnableDelayedExpansion
rem имя файла для печати
set FileNameForPrint=0
rem каталог, в который пользователь помещает файлы
set DirNameForPrint=d:\printer\
rem каталог, куда перемещается файл, который надо распечатать и удалить, является подкаталогом для DirNameForPrint
set DirNameForDel=d:\printer\del\
cd /d %DirNameForPrint%
FOR %%i IN (*.pdf) DO (
set FileNameForPrint="%%~ni__!random!".pdf
rename "!DirNameForPrint!%%i" "!FileNameForPrint!"
if %ERRORLEVEL% EQU 0 (
move /y "!DirNameForPrint!!FileNameForPrint!" "!DirNameForDel!"
!ProgramFiles!\print_job\nircmd.exe shexec "print" "!DirNameForDel!!FileNameForPrint!"
)

)

Скрипт в шедулере с повторением каждые 2 минуты.
Так же в шедулере скрипт очистки подкаталога с запуском при включении компьютера

del /f /q d:\printer\del\*.*

Имеет право на жизнь? Пока вроде работает.
P.S. странно, но справка по if (if /?) выдает, что для сравнения нужна команда EQL, хотя по факту - EQU

Iska
01-02-2019, 12:35
Имеет право на жизнь? »
Неа. Рано или поздно столкнётесь с ошибками. Смотрите ссылку на тему на Сером форуме, которую я приводил в прошлой теме — скрипт следит за каталогом в синхронном режиме.

P.S. странно, но справка по if (if /?) выдает, что для сравнения нужна команда EQL, хотя по факту - EQU »
Это очень, очень старая история. Все через это проходят.

Michael
01-02-2019, 13:07
Iska, не, пожалуй буду решать проблемы по мере их поступления. Но за ссылку спасибо

megaloman
01-02-2019, 17:46
Michael, @Echo Off
cls
Set "BoxIn=Z:\Box_In"
Set "Mask=*.pdf"

Set /A Repeat=60
Set /A Waiting=30

Set "PRG="c:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe" /n /t"
rem Set "PRG="C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" /n /t"

:Begin
If Not Exist "%BoxIn%\Tmp" Md "%BoxIn%\Tmp"
FOR /F "usebackq delims=" %%f IN (`2^>nul Dir /b /a:-D "%BoxIn%\%Mask%"`) DO (
Move /Y "%BoxIn%\%%f" "%BoxIn%\Tmp\%%f" >NUL &&Call :Out "%BoxIn%\Tmp\%%f" %Waiting%
)
Timeout /T %Repeat%
rem CHOICE /C YN /T %Repeat% /D Y /M "Y-Продолжить работу, N-Завершить командный файл"
rem If %ErrorLevel%==2 Exit /B 2
GoTo :Begin
Exit /B

:Out
Start " " %PRG% %1
:OutWait
Timeout /T %2
Del %1 >nul 2>&1
If Exist %1 GoTo :OutWait
Exit /BВ определенный каталог пользователь выкладывает pdf-файлы. »В этом каталоге организуем каталог TMP. Туда переносим последовательно файл пользователя. При благополучном переносе запускаем акробата. Даём время для его загрузки (у меня Set /A Waiting=30) сек. Пытаемся удалить файл. Если акробат не отработал, файл будет занят и не удалится. С задержками будем пытаться удалить файл, пока не добьемся успеха. Переходим к обработке следующего файла. Если список файлов исчерпан, повторим батник через некоторое время (у меня Set /A Repeat=60) сек.

megaloman
02-02-2019, 12:11
Michael, простите великодушно за неуместное любопытство: а зачем вообще эта возня, если файлы печатаете в автоматическом режиме? Почему сразу не поставить пользователям сетевой принтер и акробат? Имхо, акробат, или нечто подобное, должен присутствовать у каждого. По крайней мере, у тех пользователей, которым приходится в конечном итоге отправлять pdf на печать.

Busla
02-02-2019, 14:57
megaloman, пользователь может на удалёке/ в филиале за 1000 км формировать документы. А местный персонал на них только печать ставит.

Michael
06-02-2019, 10:18
а зачем вообще эта возня, если файлы печатаете в автоматическом режиме? »
Есть острая необходимость раз в месяц распечатать порядка 8000 страниц, причем чем быстрее - тем лучше,
Есть старенькая тошиба, которую не удалось подцепить на сервер печати под управлением windows server 2008R2, но, во-первых, выкидывать ее жалко, во-вторых - файлы на печать изначально формируются в pdf-формате. Решил заморочиться




© OSzone.net 2001-2012