convert /home/bill/TempScan/*.png myfile.pdf
дает сообщение об ошибке:
convert-im6.q16: not authorized `myfile.pdf' @ error/constitute.c/WriteImage/1037.
Любая справка ценилась бы!
convert
- мощный инструмент командной строки для преобразования графики. Его поддержка PDF обеспечивается Ghostscript. Из-за значительной дыры в безопасности в Ghostscript до версии 9.24 использование convert
в файлах PDF было заблокировано в качестве временной меры. Проблема устранена, начиная с версии Ghostscript 9.24. Хотя версии Ghostscript обновлены до защищенных версий во всех поддерживаемых версиях Ubuntu (в настоящее время начиная с Ubuntu 16.04), ограничение на использование может все еще действовать.
Файл политики - / etc / ImageMagick-6 / policy .xml
. Вы можете редактировать этот файл как пользователь root, чтобы изменить политики.
Устранение всех ограничений использования
Для пользователей настольных компьютеров, не использующих веб-сервер, простого устранения этих ограничений может быть достаточно. С этой целью можно удалить файл,но лучше «переместить файл», переименовав его. С помощью этой команды вы переименовываете файл. В результате все политики отменяются, но вы все равно можете вернуться к ним при необходимости:
sudo mv /etc/ImageMagick-6/policy.xml /etc/ImageMagick-6/policy.xmlout
Чтобы вернуться к исходному ситуации, просто переименуйте обратно к исходному имени:
sudo mv /etc/ImageMagick-6/policy.xmlout /etc/ImageMagick-6/policy.xml
Помните, что перемещение файла политики снижает безопасность системы. .
Устранение только ограничения на объединение в PDF
Для вашего конкретного случая, gene_wood в комментарии указывал на возможность выборочного ослабления политики для работы с файлами PDF, закомментировав одну строку:
Отредактируйте файл и поместите пометки комментариев вокруг этой строки, чтобы отключить это правило:
->
Если вы не хотите отменять все политики безопасности, это правильный путь.
Решение abu_bua действительно хорошо сработало для меня. Для удобства здесь в одной командной строке с sed
:
sudo sed -i 's/rights="none" pattern="PDF"/rights="read|write" pattern="PDF"/g' /etc/ImageMagick-6/policy.xml
Seperti vanadium disiarkan , anda harus mengubah dasar ImageMagick.
sudo vim /etc/ImageMagick-6/policy.xml
dan ganti baris
<policy domain="coder" rights="none" pattern="PDF" />
dengan
<policy domain="coder" rights="read|write" pattern="PDF" />
Sekiranya anda hanya mahu membenarkan menulis, dan tidak membaca, anda juga boleh menghapus bahagian baca |
pada baris di atas.
BTW, bagi mereka yang berminat mengenai kerentanan ImageMagick, di sini adalah 2 pautan maklumat:
Вместо того, чтобы заново ослаблять ограничения безопасности ImageMagick, я бы просто использовал img2pdf .
Он специально разработан для такого рода вариантов использования.
Вы следует использовать img2pdf, если ваши приоритеты (в следующем порядке):
- всегда без потерь: изображение, встроенное в PDF, всегда будет иметь ту же самую цветовую информацию для каждого пикселя, что и входной
- small: если возможно, разница в размерах файлов между входным изображением и выходным PDF будет только накладными расходами самого контейнера PDF
- быстро: если возможно, входное изображение просто вставляется в документ PDF как есть без любое требовательное к процессору перекодирование пиксельных данных
Обычное программное обеспечение преобразования (например, ImageMagick) либо:
- не будет работать без потерь, потому что перекодирование с потерями в JPEG
- не будет mall, потому что использование расточительного плоского кодирования необработанных данных пикселей
- не будет быстрым, потому что входные данные перекодируются
Еще одно преимущество отсутствия повторного кодирования входных данных (в большинстве распространенных ситуаций) заключается в том, что img2pdf может обрабатывать гораздо больший объем ввода, чем другое программное обеспечение, потому что необработанные данные пикселей никогда не должны загружаться в память.
Это должна быть эквивалентная команда:
img2pdf --out myfile.pdf /home/bill/TempScan/*.png
Если по какой-то причине вы не можете этого сделать (например, не может устанавливать новые пакеты), другим потенциальным способом преобразования без потерь было бы преобразование
ваших изображений в многостраничный файл TIFF с последующим использованием tiff2pdf
из инструментов libtiff.
Вот еще более удобный способ, который автоматически получает местоположение (а) файла (ов) policy.xml и выполняет поиск / замену для всех них:
for file in `convert -list policy | grep "Path:" | grep -v built | sed 's/Path: \(.*\)/\1/g'`; do sed -i 's/domain="coder" rights="none" pattern="PDF"/domain="coder" rights="read|write" pattern="PDF"/g' $file; done