Название говорит само за себя. Преобразовать в надежный PDF - ценный инструмент, и было бы здорово реализовать его в экосистеме Ubuntu.
У вас есть ненадежный файл PDF. Он может содержать вредоносное ПО, которое может заразить ваш компьютер и совершить с ним ужасные вещи.
Вы хотите преобразовать этот PDF-файл в «надежный» PDF-файл, в котором нет вредоносных программ, не подвергая опасности ваш компьютер с Ubuntu.
Идея состоит в том, чтобы установить Multipass на вашем компьютере с Ubuntu и использовать основную виртуальную машину (ВМ) по умолчанию для «сглаживания» ненадежного файла PDF. Процесс выравнивания PDF включает преобразование файла PDF в файл PostScript (PS), а затем преобразование файла PS обратно в PDF. Полученный PDF-файл является «доверенным», поскольку никакие вредоносные программы в исходном PDF-файле не выдерживают процесса двойного преобразования.
Наконец, после завершения преобразования виртуальная машина уничтожается. Таким образом, любые изменения, которые могут быть внесены в виртуальную машину вредоносным ПО в исходном PDF-файле, уничтожаются вместе с ним.
Это решение основано на командной строке, где мы будем вводить (или вставлять) команды в терминал.
Сначала давайте установим Multipass на ваш компьютер с помощью следующей команды:
sudo snap install multipass
Вам нужно сделать это только один раз.
Остальная работа выполняется сценарием bash. Я называю это flatten.sh. Сохраните приведенный ниже сценарий в своей домашней папке как flatten.sh
и сделайте его исполняемым.
#!/bin/bash
if [ -z $1 ]; then
echo "No argument set. Valid argument is a PDF filename.pdf in the $HOME folder"
read -ep "Enter filename: " FULLNAME
else
FULLNAME=$1
fi
if [ ! -f $FULLNAME ]; then
echo "The file $FULLNAME not found."
echo "Valid argument is a PDF filename.pdf in the $HOME folder"
echo "exiting..."
exit 1
fi
INPNAME=$(basename $FULLNAME)
DIR=$(dirname $FULLNAME)
OUTNAME="Trusted-$INPNAME"
multipass start
multipass exec primary -- sudo apt update
multipass exec primary -- sudo apt install ghostscript -y
multipass exec primary -- cp "Home/$INPNAME" .
multipass exec primary -- pdf2ps "$INPNAME" temp
multipass exec primary -- ps2pdf temp "$OUTNAME"
multipass exec primary -- mv "$OUTNAME" Home/
multipass stop primary
multipass delete primary
multipass purge
Допустим, у вас есть файл с именем test.pdf
, которому вы не доверяете. Используйте следующую команду для запуска сценария:
./flatten.sh test.pdf
test.pdf
должен находиться в вашей папке $ HOME. Если у вас есть файл PDF в другой папке, сценарий (в том виде, в котором он написан) не найдет его.
Вот список вещей, которые произойдут после запуска этого сценария:
ghostscript
, необходимый для преобразования Весь этот процесс займет некоторое время, особенно запуск виртуальной машины и установка ghostscript
.
Примечание: если ненадежный файл PDF очень велик, на многопроходной виртуальной машине может не хватить виртуальной памяти, выделенной по умолчанию. См. Документацию Multipass о том, как выделить больше памяти для виртуальной машины.
Насколько я могу судить, нет способа сделать снимок основной виртуальной машины в Multipass после установки Ghostscript и развернуть эту сохраненную виртуальную машину, чтобы в следующий раз вам нужно было очистить PDF-файл. Если бы это было возможно, процесс занял бы немного меньше времени.
Другим способом достижения аналогичных результатов может быть использование контейнеров LDX / LXC .LXD поддерживает моментальные снимки, и пользовательский контейнер только с Ghostscript может быть немного легче, чем полноценная виртуальная машина. Однако у меня нет опыта работы с LXD / LXC.
Надеюсь, это поможет