При добавлении опции -c в команду Ghostscript всплывающее окно принтера появляется, хотя оно было подавлено - PullRequest
0 голосов
/ 12 апреля 2019

Рассмотрим следующую команду ghostscript, вызываемую из командной строки в Windows.

"C:\Program Files\gs\gs9.23\bin\gswin64c.exe" -sDEVICE=mswinpr2  -dORIENT1=false -dNOPROMPT -dNOPAUSE -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dFIXEDMEDIA -dDEVICEWIDTHPOINTS=398 -dDEVICEHEIGHTPOINTS=157 -dNOPAGEPROMPT -dQUIET -dNumCopies=1 -sOutputFile="\\spool\BWLAB05" "c:\print\download\133679.pdf"

Эта команда прекрасно работает.Отпечаток выходит, а всплывающего окна нет.Теперь я добавляю следующее.

-c "<</Orientation 2>>setpagedevice"

к вышеприведенной команде, чтобы

"C:\Program Files\gs\gs9.23\bin\gswin64c.exe" -sDEVICE=mswinpr2 -c "<</Orientation 2>>setpagedevice" -c "quit"  -dORIENT1=false -dNOPROMPT -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dFIXEDMEDIA -dDEVICEWIDTHPOINTS=398 -dDEVICEHEIGHTPOINTS=157 -dNumCopies=1 -sOutputFile="\\spool\BWLAB05" "c:\print\download\133679.pdf"

появилось окно печати.Я не изменил никакой другой части команды.Что является причиной этого?Как я могу остановить появление окна печати?

1 Ответ

1 голос
/ 12 апреля 2019

Порядок операндов в Ghostscript важен.Особенно при использовании переключателя -c, который вводит PostScript для выполнения.

Здесь вы фактически запускаете две команды:

-sDEVICE=mswinpr2 -c "<</Orientation 2>>setpagedevice" -c "quit"  

-dORIENT1=false -dNOPROMPT -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dFIXEDMEDIA -dDEVICEWIDTHPOINTS=398 -dDEVICEHEIGHTPOINTS=157 -dNumCopies=1 -sOutputFile="\\spool\BWLAB05" "c:\print\download\133679.pdf"

Как только он достигает -c Ghostscript останавливаетсяобрабатывает командную строку и запускает PostScript.На данный момент мы еще не сталкивались с -dNOPROMPT, и , поскольку вы (еще) не установили принтер, Ghostscript не знает, какой принтер использовать, поэтому неудивительно, что появляется всплывающее окно принтера.

Ghostscript продолжает обработку оставшейся части командной строки как PostScript, пока не достигнет -f или фактически любого переключателя, начинающегося -.Вы не указали здесь -f, но я бы настоятельно рекомендовал вам это сделать.Вам также не нужно помещать secopnd -c, после того как вы начали обрабатывать командную строку как PostScript, она продолжается до тех пор, пока вы не остановите ее.Я также подозреваю, что вы действительно не хотите, чтобы там был quit.Это завершает работу интерпретатора, что означает, что изменения, внесенные вами через setpagedevice, будут отброшены, поскольку интерпретатор возвращается в состояние по умолчанию.

После обработки содержимого -c Ghostscript продолжает и обрабатываетостаток от командной строки.На этот раз есть -dNOPROMPT, поэтому вы не получите подсказки.

Я ожидаю, что это:

"C:\Program Files\gs\gs9.23\bin\gswin64c.exe" -sDEVICE=mswinpr2 -dORIENT1=false -dNOPROMPT -dPrinted -dBATCH -dNOSAFER -q -dFIXEDMEDIA -dDEVICEWIDTHPOINTS=398 -dDEVICEHEIGHTPOINTS=157 -dNumCopies=1 -sOutputFile="\\spool\BWLAB05" -c "<</Orientation 2>>setpagedevice" -f "c:\print\download\133679.pdf"

будет работать намного лучше.Обратите внимание, что ваша начальная командная строка имеет дубликат NOPAUSE и определяет как NOPROMPT, так и NOPAGEPROMPT (вам не нужен NOPAGEPROMPT, если вы устанавливаете NOPROMPT, и вам не нужен ни один, если вы устанавливаете NOPAUSE).

Наконец, я бы призываю не использовать -dNOSAFER, хотя в настоящее время это не имеет никакого эффекта (поскольку это настройка по умолчанию), мы скоро сделаем SAFER по умолчанию, а настройка -dNOSAFER существенно снизит вашу безопасность при запуске файлов.

Вы действительно должны использовать -dSAFER прямо сейчас.Существует ряд CVE против этого, и в настоящее время распространяются доказательства концепций, которые могут иметь нежелательные последствия для вашего компьютера (запуск произвольных исполняемых файлов, открытие, запись, удаление файлов и т. Д.), Если вы не используете -dSAFER.Если вы не знаете, зачем вам нужен -dNOSAFER, вместо этого используйте -dSAFER.

О, вам также следует перейти на текущую версию, 9.27, используемой вами версии год.

...