Seldom printers fail to print a PDF file, a possible solution is to convert the file to a sequence of pictures; basically this means to do the whole process that decides where the inks should go in your computer; before sending the result to the printer.
Ghostscript does most of the hard work creating the pictures, however it does not apply any kind of smoothing to the curves so when creating a picture in the printing resolution (usually 300 DPI) the result will be poor.
To workaround this problem we use a trick similar to videogames antialiasing. We create the picture 4 times larger and we resize it later to the correct size applying smoothing algorithms.
Finally we losslessy put all the pictures in a new PDF. The resulting PDF will have no text, no fonts or anything a part of pictures. So it loses much of its convenience and the resulting file will be much larger, however printers will not fail to print it.
Step 1, create the large image files:
$ gs -sDEVICE=pngalpha -o output-%04d.png -r1200 input.pdf
Please note that 1200 is four times the wanted resolution, we want to print to 300DPI.
Step 2, resize the resulting pictures to have antialiasing and remove transparency information:
$ for f in output-* ;do convert "$f" -background white -alpha remove -alpha off -resize '25%' s"$f" ;done
Step 3, rebuild an easy to print PDF:
$ img2pdf --pagesize a4 --border 0 --output easy2print_output.pdf soutput-*png
It is possible to use greater resolutions to print for example with 600DPI, just use
-r2400. But the
convert step may require too much memory to resize the output
.png files. It is the case, it is possible to limit the amount of memory using environment variables:
MAGICK_TEMPORARY_PATH=. MAGICK_AREA_LIMIT=1024mb convert ...
convert will store its temporary files in the current directory and avoid using more than 1Gb of memory. The process might be slower, but it will end correctly.
img2pdf creates a
It is worth a try to trim the pictures to have the new paper size. To do so you need to know the correct size of the picture and
convert. For example, if you want to print 300DPI, the picture size will be the paper size in inches times 300.
The command, for a 300DPI A4 will be:
$ convert input.png -gravity Center -crop 2481x3507+0+0 +repage output.png
It is also possible to add
-gravity Center -crop 2481×3507+0+0 +repage directly in Step two just before the output filename.