Проблема с пакетным преобразованием .png к использованию pdf преобразовывает

convert /home/bill/TempScan/*.png  myfile.pdf

дает сообщение об ошибке:

convert-im6.q16: not authorized `myfile.pdf' @ error/constitute.c/WriteImage/1037.

Любая справка ценилась бы!

239
задан 19 October 2018 в 14:15

5 ответов

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, закомментировав одну строку:

Отредактируйте файл и поместите пометки комментариев вокруг этой строки, чтобы отключить это правило:

->

Если вы не хотите отменять все политики безопасности, это правильный путь.

298
ответ дан 22 November 2019 в 22:55

Решение abu_bua действительно хорошо сработало для меня. Для удобства здесь в одной командной строке с sed :

sudo sed -i 's/rights="none" pattern="PDF"/rights="read|write" pattern="PDF"/g' /etc/ImageMagick-6/policy.xml
6
ответ дан 22 November 2019 в 22:55

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:

78
ответ дан 22 November 2019 в 22:55

Вместо того, чтобы заново ослаблять ограничения безопасности ImageMagick, я бы просто использовал img2pdf .

Он специально разработан для такого рода вариантов использования.

Вы следует использовать img2pdf, если ваши приоритеты (в следующем порядке):

  • всегда без потерь: изображение, встроенное в PDF, всегда будет иметь ту же самую цветовую информацию для каждого пикселя, что и входной
  • small: если возможно, разница в размерах файлов между входным изображением и выходным PDF будет только накладными расходами самого контейнера PDF
  • быстро: если возможно, входное изображение просто вставляется в документ PDF как есть без любое требовательное к процессору перекодирование пиксельных данных

Обычное программное обеспечение преобразования (например, ImageMagick) либо:

  1. не будет работать без потерь, потому что перекодирование с потерями в JPEG
  2. не будет mall, потому что использование расточительного плоского кодирования необработанных данных пикселей
  3. не будет быстрым, потому что входные данные перекодируются

Еще одно преимущество отсутствия повторного кодирования входных данных (в большинстве распространенных ситуаций) заключается в том, что img2pdf может обрабатывать гораздо больший объем ввода, чем другое программное обеспечение, потому что необработанные данные пикселей никогда не должны загружаться в память.

Это должна быть эквивалентная команда:

img2pdf --out myfile.pdf /home/bill/TempScan/*.png 

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

]
9
ответ дан 5 January 2021 в 22:05

Вот еще более удобный способ, который автоматически получает местоположение (а) файла (ов) 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
2
ответ дан 5 January 2021 в 22:05

Другие вопросы по тегам:

Похожие вопросы: