34

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
9.26

Ubuntu version:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 19.04
Release:    19.04
Codename:   disco
4
  • Maybe stackoverflow.com/q/2693820/12181862 has some tips.
    – DK Bose
    Oct 18, 2019 at 2:13
  • Which version of Ubuntu are you running? Looks like some judicious editing of /etc/ImageMagick-7/policy.xml should sort out the issue: add <policy domain="coder" rights="read | write" pattern="PDF" /> before </policymap>
    – andrew.46
    Oct 18, 2019 at 2:57
  • Ubuntu 19.04 @andrew.46
    – AbstProcDo
    Oct 18, 2019 at 3:01
  • This error message is also fixed by the below answer convert-im6.q16: not authorized filename.pdf @ error/constitute.c/WriteImage/1037.
    – M.Viking
    Dec 10, 2019 at 14:26

3 Answers 3

59

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 favorite 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"/' \
/etc/ImageMagick-6/policy.xml

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!

2
  • what about Security issue with PostScript PDF described in cromwell-intl.com/open-source/pdf-not-authorized.html ? Is that any concern ? Jan 14, 2021 at 8:57
  • 1
    @equivalent8 Fair call, note that the writers of this article stated: 'If we instead are talking about your desktop, then you might want to enable those data types for ImageMagick. '. These are changes I am happy to have on my own system...
    – andrew.46
    Jan 14, 2021 at 9:17
12

Another reason for getting that same error is that the source images are too wide, too tall or too heavy.

The /etc/ImageMagick-6/policy.xml file controls what is acceptable as an image. Maximum width and height are set like this:

<policy domain="resource" name="width" value="10KP"/>
<policy domain="resource" name="height" value="10KP"/>

10KP stands for 10000 pixels. If your image is larger than that running identify will not show the image info in the terminal and the image is basically out of reach for Image Magick.

Other common properties that affect images being available or not are: memory, map, area and disk.

Here the document describing policy.xml: https://imagemagick.org/script/security-policy.php

3

+1 on all of the above.

Also note that my Docker container didn't have gs (Ghostscript) installed, so a very similar convert-im6.q16: no images defined error message is thrown in that case.

1
  • 2
    Same here, after a apt-get install ghostscript in the container, (and the comment of the policy lines in policy.xml), everything worked.
    – scandel
    May 1, 2022 at 7:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.