Ubuntu – ImageMagick:convert-im6.q16: no images defined


According to this question, How can I convert a series of images to a PDF from the command line on linux?, ImageMagick can convert multiple images to a single PDF.

How could I reverse the operation and convert a PDF of several pages to multiple images?

I have tried the following command, but I got the errors shown:

$ convert test.pdf test-%02.png
convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
convert-im6.q16: no images defined `test-%02.png' @ error/convert.c/ConvertImageCommand/3258.

gs was installed:

$ gs --version

Ubuntu version:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 19.04
Release:    19.04
Codename:   disco

Best Answer

Interestingly enough ImageMagick under 19.04 (and other Ubuntu releases!) disables many ghostscript format types. This can be seen in this snippet from /etc/ImageMagick-6/policy.xml:

  <!-- disable ghostscript format types -->
  <policy domain="coder" rights="none" pattern="PS" />
  <policy domain="coder" rights="none" pattern="EPS" />
  <policy domain="coder" rights="none" pattern="PDF" /> <------- Here!!
  <policy domain="coder" rights="none" pattern="XPS" />

Of course I have added the arrow to catch your attention :). Modify this arrowed line to:

  <policy domain="coder" rights="read | write" pattern="PDF" />

You can use your favourite text editor to accomplish this, using elevated privileges, or perhaps simply use the following sed one-liner:

sudo sed -i_bak \
's/rights="none" pattern="PDF"/rights="read | write" pattern="PDF"/' \

And then all should be well, I have tested this comprehensively on my own 19.04 VM where the conversion you are after works flawlessly...

If you wish to change the settings back to the default the following one liner will restore the backup file created in the run with sed:

sudo mv /etc/ImageMagick-6/policy.xml_bak /etc/ImageMagick-6/policy.xml

How cool is the command line!