3

Я пытаюсь создать пакетный файл OR .bat, который будет линеаризовать несколько файлов PDF. У меня уже есть сценарий, который я приобрел, использующий PDFTK, который отправляет PDF-файлы в папку «sendto», где они объединяются. Я хотел бы сделать то же самое с qpdf, но вместо этого использовать команду --linearize .

Основная проблема в том, что я не могу сначала объединить файлы в один PDF-файл, используя PDFTK, а затем линеаризовать один файл - файлы все равно получаются слишком большими. Что работает лучше всего, это если я линеаризую каждый ИНДИВИДУАЛЬНЫЙ файл, а затем объединю их Вероятно, было бы лучше, если бы я мог также комбинировать их с помощью qpdf, чтобы мне не пришлось использовать две разные программы.

В сумме:

Это мой текущий bat-файл, который отлично работает (ниже) -> я могу выбрать несколько PDF-файлов, поместить их в bat-файл и открыть новый PDF-файл с именем Combined_PDFs.pdf. Я хочу сделать то же самое с qpdf, кроме линеаризации, затем объединить файлы. Я не могу понять синтаксис правильно, я просто недостаточно знаю о файлах bat.

СОВРЕМЕННЫЙ РАБОЧИЙ СКРИПТ:

@echo off
PUSHD "%~dp0"
setlocal enabledelayedexpansion
FOR %%A IN (%*) DO (set command=!command! %%A)
pdftk.exe %command% cat output "%~dp1Combined_PDFs.pdf" compress

Этот скрипт работает, но он будет работать ТОЛЬКО для одного файла за раз:

@echo off
PUSHD "%~dp0"
setlocal enabledelayedexpansion
FOR %%A IN (%*) DO (set command=!command! %%A)
qpdf.exe --linearize %command% "%~dpn1_Reduced%~x1"

Мне нужен скрипт выше для работы с несколькими входами.

1 ответ1

2

Я считаю, что вам нужно изменить цикл FOR во втором пакетном файле. Первый пакетный файл создает локальную переменную под названием « команда », которая содержит все файлы, переданные в пакетный файл в виде строки, разделенных пробелами.

Однако во втором пакетном файле вам нужно запустить программу qpdf.exe отдельно для каждого файла. Для этого измените цикл FOR для выполнения программы qpdf.exe в каждом цикле:

@echo off
PUSHD "%~dp0"
setlocal enabledelayedexpansion
FOR %%A IN (%*) DO qpdf.exe --linearize %%A "%%~dpnA_Reduced%%~xA"

Короче говоря, он будет запускаться независимо от DO один раз для каждой строки, передаваемой в пакетный файл.


Также, в качестве подсказки для будущей отладки, попробуйте временно поместить REM перед оператором @echo off . REM используется для комментирования кода и может улучшить читаемость. Это будет отображать каждую строку в командном файле во время его выполнения, так что вы получите гораздо лучшее представление о том, что происходит при запуске.

REM @echo off

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .