модуль "Запустить процесс" исполяет только первую итерацию...

Поддержка
  • Здравствуйте есть такой вопрос...
    Пытаюсь приручить GhostScript с помощью командной строки. Цель: скриншотить все страницы PDF в PNG для дальнейшего распознавания текста в переменную с помощью Tesseract OCR.
    На тесте, 5-ти страничный PDF.

    В командной строке windows 10 команда:

    gswinc.exe "-sOutputFile=C:\Users\user\Desktop\pdfbase\pdf_base_tem_images\page%03d.png" -dNOPAUSE -dALLOWPSTRANSPARENCY "-sFONTPATH=C:\WINDOWS\Fonts" -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r300  -sDEVICE=png16m  "C:\Users\user\Desktop\pdfbase\80400603245680_20241106.pdf"
    

    ... отрабатывает прекрасно... в желаемой мной папке создается 5 png изображений со страниц PDF. Но как только я добавляю эту команду в модуль "запустить процесс" и запускаю, то в переменную STANDART_OUTPUT куда пишется результат выполнения скрипта, записывается только первая итерация скрипта, а в папке для изображений создаётся только первый скриншот из N-страниц PDF, причем по названию понятно что скриншот создан как временный файл, а не в соответствии с той нумерацией которую я задал в команде.

    Вот скришот модуля:
    9f8a68ac-5e8c-44fb-a106-b7934b7dbe8f-image.png

    А в STANDART_OUTPUTe та самая первая итерация выводится как первое вступительное сообщение от GS, после него должны были появится еще сообщения о статусе обработки страниц, но их нет. Отсюда сделал вывод, что модуль "Запустить процесс" сделал лишь первую итерацию и вышел из процесса, но как заставить его работать до окончания работы команды в системе?

  • @yooriko said in модуль "Запустить процесс" исполяет только первую итерацию...:

    Здравствуйте есть такой вопрос...
    Пытаюсь приручить GhostScript с помощью командной строки. Цель: скриншотить все страницы PDF в PNG для дальнейшего распознавания текста в переменную с помощью Tesseract OCR.
    На тесте, 5-ти страничный PDF.

    В командной строке windows 10 команда:

    gswinc.exe "-sOutputFile=C:\Users\user\Desktop\pdfbase\pdf_base_tem_images\page%03d.png" -dNOPAUSE -dALLOWPSTRANSPARENCY "-sFONTPATH=C:\WINDOWS\Fonts" -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r300  -sDEVICE=png16m  "C:\Users\user\Desktop\pdfbase\80400603245680_20241106.pdf"
    

    ... отрабатывает прекрасно... в желаемой мной папке создается 5 png изображений со страниц PDF. Но как только я добавляю эту команду в модуль "запустить процесс" и запускаю, то в переменную STANDART_OUTPUT куда пишется результат выполнения скрипта, записывается только первая итерация скрипта, а в папке для изображений создаётся только первый скриншот из N-страниц PDF, причем по названию понятно что скриншот создан как временный файл, а не в соответствии с той нумерацией которую я задал в команде.

    Вот скришот модуля:

    А в STANDART_OUTPUTe та самая первая итерация выводится как первое вступительное сообщение от GS, после него должны были появится еще сообщения о статусе обработки страниц, но их нет. Отсюда сделал вывод, что модуль "Запустить процесс" сделал лишь первую итерацию и вышел из процесса, но как заставить его работать до окончания работы команды в системе?

    BAS создаёт батник из вашего кода и запускает его, а код для выполнения в файле немного отличается от кода выполняемого в командной строке. Чтобы использовать символ процента в файле его надо написать дважды. Попробуйте так:

    gswinc.exe "-sOutputFile=C:\Users\user\Desktop\pdfbase\pdf_base_tem_images\page%%03d.png" -dNOPAUSE -dALLOWPSTRANSPARENCY "-sFONTPATH=C:\WINDOWS\Fonts" -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r300  -sDEVICE=png16m  "C:\Users\user\Desktop\pdfbase\80400603245680_20241106.pdf"
    
  • @Fox Большое спасибо! Вы очень помогли, потому что я провёл в документациях этих двух библиотек огромное количество безрезультатных часов. Если потребуется опубликую своё решение в подробную инструкцию.

  • Остался только 1 вопрос, каким инструментом я могу убрать из переменной OUTPUT статус
    C:\Users\user\AppData\Roaming\BrowserAutomationStudio\apps\28.1.1>chcp 65001
    Active code page: 65001

    C:\Users\user\AppData\Roaming\BrowserAutomationStudio\apps\28.1.1>cd C:\Program Files\PDF24\tesseract

  • @yooriko said in модуль "Запустить процесс" исполяет только первую итерацию...:

    Остался только 1 вопрос, каким инструментом я могу убрать из переменной OUTPUT статус
    C:\Users\user\AppData\Roaming\BrowserAutomationStudio\apps\28.1.1>chcp 65001
    Active code page: 65001

    C:\Users\user\AppData\Roaming\BrowserAutomationStudio\apps\28.1.1>cd C:\Program Files\PDF24\tesseract

    Код chcp 65001 добавляется автоматически, что бы его убрать, нужно изменить код модуля. Но ещё вы можете с помощью файлового модуля создать батник с нужным кодом и запускать его через "Запустить процесс"