summaryrefslogtreecommitdiff
path: root/test.sh
diff options
context:
space:
mode:
Diffstat (limited to 'test.sh')
-rwxr-xr-xtest.sh792
1 files changed, 487 insertions, 305 deletions
diff --git a/test.sh b/test.sh
index 88ec374..f33e036 100755
--- a/test.sh
+++ b/test.sh
@@ -18,8 +18,9 @@ similar()
# The lower PSNR value, the fewer the similarities
# The lowest (and worst) value is 1.0
+ # head -n == --lines, but more portable (MacOS)
min_psnr=50
- if [ "$min_psnr" != "$( printf "$psnr\n$min_psnr\n" | sort --general-numeric-sort | head --lines=1)" ]; then
+ if [ "$min_psnr" != "$( printf "$psnr\n$min_psnr\n" | sort --general-numeric-sort | head -n1)" ]; then
echo "pdf wrongly rendered"
return 1
fi
@@ -66,7 +67,9 @@ compare_mupdf()
pdf="$1"
img="$2"
mutool draw -o "$tempdir/mupdf.png" -r 96 "$pdf" 2>/dev/null
- compare -metric AE "$img" "$tempdir/mupdf.png" null: 2>/dev/null
+ if [ "$(uname)" != "Darwin" ]; then # mupdf is not pixel perfect on Darwin
+ compare -metric AE "$img" "$tempdir/mupdf.png" null: 2>/dev/null
+ fi
rm "$tempdir/mupdf.png"
}
@@ -79,6 +82,11 @@ compare_pdfimages()
rm "$tempdir/images-000.png"
}
+checkpdf()
+{
+ python3 -c 'import pikepdf,sys; p=pikepdf.open(sys.argv[1]);exit(sum([not eval("p.pages[0]."+l) for l in sys.stdin]))' "$1"
+}
+
error()
{
echo test $j failed
@@ -86,7 +94,8 @@ error()
exit 1
}
-tempdir=$(mktemp --directory --tmpdir img2pdf.XXXXXXXXXX)
+# -d == --directory, -t == --template, but more portable (MacOS, FreeBSD)
+tempdir=$(mktemp -d -t img2pdf.XXXXXXXXXX)
trap error EXIT
@@ -96,19 +105,25 @@ trap error EXIT
# See https://gitlab.mister-muffin.de/josch/img2pdf/issues/56
python3 magick.py "$tempdir"
-cat << END | ( cd "$tempdir"; md5sum --check --status - )
+if [ "$(uname)" = "Darwin" ]; then
+ status_arg=
+else
+ status_arg=--status
+fi
+
+cat << END | ( cd "$tempdir"; md5sum --check $status_arg - )
cc611e80cde3b9b7adb7723801a4e5d4 alpha.png
706175887af8ca1a33cfd93449f970df gray16.png
-198e3333d7dc6158f94d1007e75c5bd3 gray1.png
-795ff9c5c59cdc95f5a0b9191a7247d9 gray2.png
+ff4d9f18de39be879926be2e65990167 gray1.png
+d51900476658a1c9dd26a7b27db8a21f gray2.png
722223ba74be9cba1af4a549076b70d3 gray4.png
2320216faa5a10bf0f5f04ebce07f8e1 gray8.png
35a47d6ae6de8c9d0b31aa0cda8648f3 inverse.png
6ad810399058a87d8145d8d9a7734da5 normal16.png
c8d2e1f116f31ecdeae050524efca7b6 normal.png
-c69edd665ee3546d9eb57fe10cd8095a palette1.png
-504ecab83662aa2394042a62b1d2eafb palette2.png
-90d1bbe7b26e210d8846cf8692a98b72 palette4.png
+18a3dfca369f976996ef93389ddfad61 palette1.png
+d38646afa6fa0714be9badef25ff9392 palette2.png
+e1c59e68a68fca3273b6dc164d526ed7 palette4.png
50bf09eb3571901f0bf642b9a733038c palette8.png
END
@@ -117,11 +132,18 @@ if [ -z ${img2pdfprog+x} ]; then
img2pdfprog=src/img2pdf.py
fi
+available_engines="internal"
+
+if python3 -c "import pdfrw" 2>/dev/null; then
+ available_engines="$available_engines pdfrw"
+fi
+if python3 -c "import pikepdf" 2>/dev/null; then
+ available_engines="$available_engines pikepdf"
+fi
+
img2pdf()
{
- # we use --without-pdfrw to better "grep" the result and because we
- # cannot write palette based images otherwise
- $img2pdfprog --without-pdfrw --producer="" --nodate "$1" > "$2" 2>/dev/null
+ $img2pdfprog --producer="" --nodate --engine="$1" "$2" > "$3" 2>/dev/null
}
tests=51 # number of tests
@@ -141,7 +163,8 @@ identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Depth: 8-bit$'
identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Page geometry: 60x60+0+0$'
identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Compression: JPEG$'
-img2pdf "$tempdir/normal.jpg" "$tempdir/out.pdf"
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/normal.jpg" "$tempdir/out.pdf"
# We have to use jpegtopnm with the original JPG before being able to compare
# it with imagemagick because imagemagick will decode the JPG slightly
@@ -160,14 +183,18 @@ pdfimages -j "$tempdir/out.pdf" "$tempdir/images"
cmp "$tempdir/normal.jpg" "$tempdir/images-000.jpg"
rm "$tempdir/images-000.jpg"
-grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 8$' "$tempdir/out.pdf"
-grep --quiet '^ /ColorSpace /DeviceRGB$' "$tempdir/out.pdf"
-grep --quiet '^ /Filter /DCTDecode$' "$tempdir/out.pdf"
-grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
+cat << 'END' | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == 8
+Resources.XObject.Im0.ColorSpace == "/DeviceRGB"
+Resources.XObject.Im0.Filter == "/DCTDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
+rm "$tempdir/out.pdf"
+done
-rm "$tempdir/normal.jpg" "$tempdir/normal.pnm" "$tempdir/out.pdf"
+rm "$tempdir/normal.jpg" "$tempdir/normal.pnm"
j=$((j+1))
###############################################################################
@@ -189,7 +216,8 @@ identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Page geometry: 60x60+
identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Compression: JPEG$'
identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Orientation: RightTop$'
-img2pdf "$tempdir/normal.jpg" "$tempdir/out.pdf"
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/normal.jpg" "$tempdir/out.pdf"
# We have to use jpegtopnm with the original JPG before being able to compare
# it with imagemagick because imagemagick will decode the JPG slightly
@@ -210,15 +238,19 @@ pdfimages -j "$tempdir/out.pdf" "$tempdir/images"
cmp "$tempdir/normal.jpg" "$tempdir/images-000.jpg"
rm "$tempdir/images-000.jpg"
-grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 8$' "$tempdir/out.pdf"
-grep --quiet '^ /ColorSpace /DeviceRGB$' "$tempdir/out.pdf"
-grep --quiet '^ /Filter /DCTDecode$' "$tempdir/out.pdf"
-grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Rotate 90$' "$tempdir/out.pdf"
+cat << 'END' | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == 8
+Resources.XObject.Im0.ColorSpace == "/DeviceRGB"
+Resources.XObject.Im0.Filter == "/DCTDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+Rotate == 90
+END
+rm "$tempdir/out.pdf"
+done
-rm "$tempdir/normal.jpg" "$tempdir/normal.pnm" "$tempdir/out.pdf" "$tempdir/normal_rotated.png"
+rm "$tempdir/normal.jpg" "$tempdir/normal.pnm" "$tempdir/normal_rotated.png"
j=$((j+1))
###############################################################################
@@ -235,7 +267,8 @@ identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Depth: 8-bit$'
identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Page geometry: 60x60+0+0$'
identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Compression: JPEG$'
-img2pdf "$tempdir/normal.jpg" "$tempdir/out.pdf"
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/normal.jpg" "$tempdir/out.pdf"
gs -dQUIET -dNOPAUSE -dBATCH -sDEVICE=tiff32nc -r96 -sOutputFile="$tempdir/gs-%00d.tiff" "$tempdir/out.pdf"
similar "$tempdir/normal.jpg" "$tempdir/gs-1.tiff"
@@ -251,15 +284,19 @@ pdfimages -j "$tempdir/out.pdf" "$tempdir/images"
cmp "$tempdir/normal.jpg" "$tempdir/images-000.jpg"
rm "$tempdir/images-000.jpg"
-grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 8$' "$tempdir/out.pdf"
-grep --quiet '^ /ColorSpace /DeviceCMYK$' "$tempdir/out.pdf"
-grep --quiet '^ /Decode \[ 1 0 1 0 1 0 1 0 \]$' "$tempdir/out.pdf"
-grep --quiet '^ /Filter /DCTDecode$' "$tempdir/out.pdf"
-grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
+cat << 'END' | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == 8
+Resources.XObject.Im0.ColorSpace == "/DeviceCMYK"
+Resources.XObject.Im0.Decode == pikepdf.Array([ 1, 0, 1, 0, 1, 0, 1, 0 ])
+Resources.XObject.Im0.Filter == "/DCTDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
+rm "$tempdir/out.pdf"
+done
-rm "$tempdir/normal.jpg" "$tempdir/out.pdf"
+rm "$tempdir/normal.jpg"
j=$((j+1))
###############################################################################
@@ -276,7 +313,8 @@ identify -verbose "$tempdir/normal.jp2" | grep --quiet '^ Depth: 8-bit$'
identify -verbose "$tempdir/normal.jp2" | grep --quiet '^ Page geometry: 60x60+0+0$'
identify -verbose "$tempdir/normal.jp2" | grep --quiet '^ Compression: JPEG2000$'
-img2pdf "$tempdir/normal.jp2" "$tempdir/out.pdf"
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/normal.jp2" "$tempdir/out.pdf"
compare_rendered "$tempdir/out.pdf" "$tempdir/normal.jp2"
@@ -284,14 +322,18 @@ pdfimages -jp2 "$tempdir/out.pdf" "$tempdir/images"
cmp "$tempdir/normal.jp2" "$tempdir/images-000.jp2"
rm "$tempdir/images-000.jp2"
-grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 8$' "$tempdir/out.pdf"
-grep --quiet '^ /ColorSpace /DeviceRGB$' "$tempdir/out.pdf"
-grep --quiet '^ /Filter /JPXDecode$' "$tempdir/out.pdf"
-grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
+cat << 'END' | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == 8
+Resources.XObject.Im0.ColorSpace == "/DeviceRGB"
+Resources.XObject.Im0.Filter == "/JPXDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
+rm "$tempdir/out.pdf"
+done
-rm "$tempdir/normal.jp2" "$tempdir/out.pdf"
+rm "$tempdir/normal.jp2"
j=$((j+1))
###############################################################################
@@ -316,23 +358,27 @@ identify -verbose "$tempdir/normal.png" | grep --quiet '^ png:IHDR.color-type
identify -verbose "$tempdir/normal.png" | grep --quiet '^ png:IHDR.color_type: 2 (Truecolor)$'
identify -verbose "$tempdir/normal.png" | grep --quiet '^ png:IHDR.interlace_method: 0 (Not interlaced)$'
-img2pdf "$tempdir/normal.png" "$tempdir/out.pdf"
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/normal.png" "$tempdir/out.pdf"
compare_rendered "$tempdir/out.pdf" "$tempdir/normal.png"
compare_pdfimages "$tempdir/out.pdf" "$tempdir/normal.png"
-grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 8$' "$tempdir/out.pdf"
-grep --quiet '^ /ColorSpace /DeviceRGB$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 8$' "$tempdir/out.pdf"
-grep --quiet '^ /Colors 3$' "$tempdir/out.pdf"
-grep --quiet '^ /Predictor 15$' "$tempdir/out.pdf"
-grep --quiet '^ /Filter /FlateDecode$' "$tempdir/out.pdf"
-grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
-
+cat << 'END' | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == 8
+Resources.XObject.Im0.ColorSpace == "/DeviceRGB"
+Resources.XObject.Im0.DecodeParms.BitsPerComponent == 8
+Resources.XObject.Im0.DecodeParms.Colors == 3
+Resources.XObject.Im0.DecodeParms.Predictor == 15
+Resources.XObject.Im0.Filter == "/FlateDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
rm "$tempdir/out.pdf"
+done
+
j=$((j+1))
###############################################################################
@@ -352,7 +398,8 @@ identify -verbose "$tempdir/normal16.png" | grep --quiet '^ png:IHDR.color-ty
identify -verbose "$tempdir/normal16.png" | grep --quiet '^ png:IHDR.color_type: 2 (Truecolor)$'
identify -verbose "$tempdir/normal16.png" | grep --quiet '^ png:IHDR.interlace_method: 0 (Not interlaced)$'
-img2pdf "$tempdir/normal16.png" "$tempdir/out.pdf"
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/normal16.png" "$tempdir/out.pdf"
compare_ghostscript "$tempdir/out.pdf" "$tempdir/normal16.png" tiff48nc
@@ -363,17 +410,20 @@ rm "$tempdir/poppler-1.png"
# pdfimages is unable to write 16 bit output
-grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 16$' "$tempdir/out.pdf"
-grep --quiet '^ /ColorSpace /DeviceRGB$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 16$' "$tempdir/out.pdf"
-grep --quiet '^ /Colors 3$' "$tempdir/out.pdf"
-grep --quiet '^ /Predictor 15$' "$tempdir/out.pdf"
-grep --quiet '^ /Filter /FlateDecode$' "$tempdir/out.pdf"
-grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
-
+cat << 'END' | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == 16
+Resources.XObject.Im0.ColorSpace == "/DeviceRGB"
+Resources.XObject.Im0.DecodeParms.BitsPerComponent == 16
+Resources.XObject.Im0.DecodeParms.Colors == 3
+Resources.XObject.Im0.DecodeParms.Predictor == 15
+Resources.XObject.Im0.Filter == "/FlateDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
rm "$tempdir/out.pdf"
+done
+
j=$((j+1))
###############################################################################
@@ -395,11 +445,13 @@ identify -verbose "$tempdir/alpha8.png" | grep --quiet '^ png:IHDR.color-type
identify -verbose "$tempdir/alpha8.png" | grep --quiet '^ png:IHDR.color_type: 6 (RGBA)$'
identify -verbose "$tempdir/alpha8.png" | grep --quiet '^ png:IHDR.interlace_method: 0 (Not interlaced)$'
-img2pdf "$tempdir/alpha8.png" /dev/null && rc=$? || rc=$?
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/alpha8.png" /dev/null && rc=$? || rc=$?
if [ "$rc" -eq 0 ]; then
echo needs to fail here
exit 1
fi
+done
rm "$tempdir/alpha8.png"
j=$((j+1))
@@ -421,11 +473,13 @@ identify -verbose "$tempdir/alpha.png" | grep --quiet '^ png:IHDR.color-type-
identify -verbose "$tempdir/alpha.png" | grep --quiet '^ png:IHDR.color_type: 6 (RGBA)$'
identify -verbose "$tempdir/alpha.png" | grep --quiet '^ png:IHDR.interlace_method: 0 (Not interlaced)$'
-img2pdf "$tempdir/alpha.png" /dev/null && rc=$? || rc=$?
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/alpha.png" /dev/null && rc=$? || rc=$?
if [ "$rc" -eq 0 ]; then
echo needs to fail here
exit 1
fi
+done
j=$((j+1))
@@ -448,11 +502,13 @@ identify -verbose "$tempdir/alpha_gray8.png" | grep --quiet '^ png:IHDR.color
identify -verbose "$tempdir/alpha_gray8.png" | grep --quiet '^ png:IHDR.color_type: 4 (GrayAlpha)$'
identify -verbose "$tempdir/alpha_gray8.png" | grep --quiet '^ png:IHDR.interlace_method: 0 (Not interlaced)$'
-img2pdf "$tempdir/alpha_gray8.png" /dev/null && rc=$? || rc=$?
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/alpha_gray8.png" /dev/null && rc=$? || rc=$?
if [ "$rc" -eq 0 ]; then
echo needs to fail here
exit 1
fi
+done
rm "$tempdir/alpha_gray8.png"
j=$((j+1))
@@ -476,11 +532,13 @@ identify -verbose "$tempdir/alpha_gray16.png" | grep --quiet '^ png:IHDR.colo
identify -verbose "$tempdir/alpha_gray16.png" | grep --quiet '^ png:IHDR.color_type: 4 (GrayAlpha)$'
identify -verbose "$tempdir/alpha_gray16.png" | grep --quiet '^ png:IHDR.interlace_method: 0 (Not interlaced)$'
-img2pdf "$tempdir/alpha_gray16.png" /dev/null && rc=$? || rc=$?
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/alpha_gray16.png" /dev/null && rc=$? || rc=$?
if [ "$rc" -eq 0 ]; then
echo needs to fail here
exit 1
fi
+done
rm "$tempdir/alpha_gray16.png"
j=$((j+1))
@@ -504,23 +562,28 @@ identify -verbose "$tempdir/interlace.png" | grep --quiet '^ png:IHDR.color-t
identify -verbose "$tempdir/interlace.png" | grep --quiet '^ png:IHDR.color_type: 2 (Truecolor)$'
identify -verbose "$tempdir/interlace.png" | grep --quiet '^ png:IHDR.interlace_method: 1 (Adam7 method)$'
-img2pdf "$tempdir/interlace.png" "$tempdir/out.pdf"
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/interlace.png" "$tempdir/out.pdf"
compare_rendered "$tempdir/out.pdf" "$tempdir/normal.png"
compare_pdfimages "$tempdir/out.pdf" "$tempdir/normal.png"
-grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 8$' "$tempdir/out.pdf"
-grep --quiet '^ /ColorSpace /DeviceRGB$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 8$' "$tempdir/out.pdf"
-grep --quiet '^ /Colors 3$' "$tempdir/out.pdf"
-grep --quiet '^ /Predictor 15$' "$tempdir/out.pdf"
-grep --quiet '^ /Filter /FlateDecode$' "$tempdir/out.pdf"
-grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
-
-rm "$tempdir/interlace.png" "$tempdir/out.pdf"
+cat << 'END' | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == 8
+Resources.XObject.Im0.ColorSpace == "/DeviceRGB"
+Resources.XObject.Im0.DecodeParms.BitsPerComponent == 8
+Resources.XObject.Im0.DecodeParms.Colors == 3
+Resources.XObject.Im0.DecodeParms.Predictor == 15
+Resources.XObject.Im0.Filter == "/FlateDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
+rm "$tempdir/out.pdf"
+done
+
+rm "$tempdir/interlace.png"
j=$((j+1))
###############################################################################
@@ -549,23 +612,27 @@ for i in 1 2 4 8; do
identify -verbose "$tempdir/gray$i.png" | grep --quiet '^ png:IHDR.color_type: 0 (Grayscale)$'
identify -verbose "$tempdir/gray$i.png" | grep --quiet '^ png:IHDR.interlace_method: 0 (Not interlaced)$'
- img2pdf "$tempdir/gray$i.png" "$tempdir/out.pdf"
+ for engine in $available_engines; do
+ img2pdf $engine "$tempdir/gray$i.png" "$tempdir/out.pdf"
compare_rendered "$tempdir/out.pdf" "$tempdir/gray$i.png" pnggray
compare_pdfimages "$tempdir/out.pdf" "$tempdir/gray$i.png"
- grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
- grep --quiet '^ /BitsPerComponent '"$i"'$' "$tempdir/out.pdf"
- grep --quiet '^ /ColorSpace /DeviceGray$' "$tempdir/out.pdf"
- grep --quiet '^ /BitsPerComponent '"$i"'$' "$tempdir/out.pdf"
- grep --quiet '^ /Colors 1$' "$tempdir/out.pdf"
- grep --quiet '^ /Predictor 15$' "$tempdir/out.pdf"
- grep --quiet '^ /Filter /FlateDecode$' "$tempdir/out.pdf"
- grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
- grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
-
+ cat << END | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == $i
+Resources.XObject.Im0.ColorSpace == "/DeviceGray"
+Resources.XObject.Im0.DecodeParms.BitsPerComponent == $i
+Resources.XObject.Im0.DecodeParms.Colors == 1
+Resources.XObject.Im0.DecodeParms.Predictor == 15
+Resources.XObject.Im0.Filter == "/FlateDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
rm "$tempdir/out.pdf"
+ done
+
j=$((j+1))
done
@@ -586,7 +653,8 @@ identify -verbose "$tempdir/gray16.png" | grep --quiet '^ png:IHDR.color-type
identify -verbose "$tempdir/gray16.png" | grep --quiet '^ png:IHDR.color_type: 0 (Grayscale)$'
identify -verbose "$tempdir/gray16.png" | grep --quiet '^ png:IHDR.interlace_method: 0 (Not interlaced)$'
-img2pdf "$tempdir/gray16.png" "$tempdir/out.pdf"
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/gray16.png" "$tempdir/out.pdf"
# ghostscript outputs 8-bit grayscale, so the comparison will not be exact
gs -dQUIET -dNOPAUSE -dBATCH -sDEVICE=pnggray -r96 -sOutputFile="$tempdir/gs-%00d.png" "$tempdir/out.pdf"
@@ -603,17 +671,20 @@ pdfimages -png "$tempdir/out.pdf" "$tempdir/images"
similar "$tempdir/gray16.png" "$tempdir/images-000.png"
rm "$tempdir/images-000.png"
-grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 16$' "$tempdir/out.pdf"
-grep --quiet '^ /ColorSpace /DeviceGray$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 16$' "$tempdir/out.pdf"
-grep --quiet '^ /Colors 1$' "$tempdir/out.pdf"
-grep --quiet '^ /Predictor 15$' "$tempdir/out.pdf"
-grep --quiet '^ /Filter /FlateDecode$' "$tempdir/out.pdf"
-grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
-
+cat << 'END' | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == 16
+Resources.XObject.Im0.ColorSpace == "/DeviceGray"
+Resources.XObject.Im0.DecodeParms.BitsPerComponent == 16
+Resources.XObject.Im0.DecodeParms.Colors == 1
+Resources.XObject.Im0.DecodeParms.Predictor == 15
+Resources.XObject.Im0.Filter == "/FlateDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
rm "$tempdir/out.pdf"
+done
+
j=$((j+1))
###############################################################################
@@ -634,23 +705,31 @@ for i in 1 2 4 8; do
identify -verbose "$tempdir/palette$i.png" | grep --quiet '^ png:IHDR.color_type: 3 (Indexed)$'
identify -verbose "$tempdir/palette$i.png" | grep --quiet '^ png:IHDR.interlace_method: 0 (Not interlaced)$'
- img2pdf "$tempdir/palette$i.png" "$tempdir/out.pdf"
+ for engine in $available_engines; do
+ if [ $engine = "pdfrw" ]; then
+ continue
+ fi
+ img2pdf $engine "$tempdir/palette$i.png" "$tempdir/out.pdf"
compare_rendered "$tempdir/out.pdf" "$tempdir/palette$i.png"
# pdfimages cannot export palette based images
- grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
- grep --quiet '^ /BitsPerComponent '"$i"'$' "$tempdir/out.pdf"
- grep --quiet '^ /ColorSpace \[ /Indexed /DeviceRGB ' "$tempdir/out.pdf"
- grep --quiet '^ /BitsPerComponent '"$i"'$' "$tempdir/out.pdf"
- grep --quiet '^ /Colors 1$' "$tempdir/out.pdf"
- grep --quiet '^ /Predictor 15$' "$tempdir/out.pdf"
- grep --quiet '^ /Filter /FlateDecode$' "$tempdir/out.pdf"
- grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
- grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
-
+ cat << END | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == $i
+Resources.XObject.Im0.ColorSpace[0] == "/Indexed"
+Resources.XObject.Im0.ColorSpace[1] == "/DeviceRGB"
+Resources.XObject.Im0.DecodeParms.BitsPerComponent == $i
+Resources.XObject.Im0.DecodeParms.Colors == 1
+Resources.XObject.Im0.DecodeParms.Predictor == 15
+Resources.XObject.Im0.Filter == "/FlateDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
rm "$tempdir/out.pdf"
+ done
+
j=$((j+1))
done
@@ -669,11 +748,13 @@ identify -verbose "$tempdir/alpha.gif" | grep --quiet '^ Colormap entries: 256$
identify -verbose "$tempdir/alpha.gif" | grep --quiet '^ Page geometry: 60x60+0+0$'
identify -verbose "$tempdir/alpha.gif" | grep --quiet '^ Compression: LZW$'
-img2pdf "$tempdir/alpha.gif" /dev/null && rc=$? || rc=$?
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/alpha.gif" /dev/null && rc=$? || rc=$?
if [ "$rc" -eq 0 ]; then
echo needs to fail here
exit 1
fi
+done
rm "$tempdir/alpha.gif"
j=$((j+1))
@@ -699,23 +780,32 @@ for i in 1 2 4 8; do
identify -verbose "$tempdir/palette$i.gif" | grep --quiet '^ Page geometry: 60x60+0+0$'
identify -verbose "$tempdir/palette$i.gif" | grep --quiet '^ Compression: LZW$'
- img2pdf "$tempdir/palette$i.gif" "$tempdir/out.pdf"
+ for engine in $available_engines; do
+ if [ $engine = "pdfrw" ]; then
+ continue
+ fi
+ img2pdf $engine "$tempdir/palette$i.gif" "$tempdir/out.pdf"
compare_rendered "$tempdir/out.pdf" "$tempdir/palette$i.png"
# pdfimages cannot export palette based images
- grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
- grep --quiet '^ /BitsPerComponent '"$i"'$' "$tempdir/out.pdf"
- grep --quiet '^ /ColorSpace \[ /Indexed /DeviceRGB ' "$tempdir/out.pdf"
- grep --quiet '^ /BitsPerComponent '"$i"'$' "$tempdir/out.pdf"
- grep --quiet '^ /Colors 1$' "$tempdir/out.pdf"
- grep --quiet '^ /Predictor 15$' "$tempdir/out.pdf"
- grep --quiet '^ /Filter /FlateDecode$' "$tempdir/out.pdf"
- grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
- grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
-
- rm "$tempdir/out.pdf" "$tempdir/palette$i.gif"
+ cat << END | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == $i
+Resources.XObject.Im0.ColorSpace[0] == "/Indexed"
+Resources.XObject.Im0.ColorSpace[1] == "/DeviceRGB"
+Resources.XObject.Im0.DecodeParms.BitsPerComponent == $i
+Resources.XObject.Im0.DecodeParms.Colors == 1
+Resources.XObject.Im0.DecodeParms.Predictor == 15
+Resources.XObject.Im0.Filter == "/FlateDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
+ rm "$tempdir/out.pdf"
+ done
+
+ rm "$tempdir/palette$i.gif"
j=$((j+1))
done
@@ -745,7 +835,11 @@ identify -verbose "$tempdir/animation.gif[1]" | grep --quiet '^ Page geometry:
identify -verbose "$tempdir/animation.gif[1]" | grep --quiet '^ Compression: LZW$'
identify -verbose "$tempdir/animation.gif[1]" | grep --quiet '^ Scene: 1$'
-img2pdf "$tempdir/animation.gif" "$tempdir/out.pdf"
+for engine in $available_engines; do
+if [ $engine = "pdfrw" ]; then
+ continue
+fi
+img2pdf $engine "$tempdir/animation.gif" "$tempdir/out.pdf"
if [ "$(pdfinfo "$tempdir/out.pdf" | awk '/Pages:/ {print $2}')" != 2 ]; then
echo "pdf does not have 2 pages"
@@ -760,13 +854,22 @@ for page in 1 2; do
# pdfimages cannot export palette based images
- # We cannot grep the PDF metadata here, because the page was
- # rewritten into a non-greppable format by pdfseparate. but that's
- # okay, because we already grepped single pages before and multipage
- # PDF should not be different.
+ cat << END | checkpdf "$tempdir/page-$page.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == 8
+Resources.XObject.Im0.ColorSpace[0] == "/Indexed"
+Resources.XObject.Im0.ColorSpace[1] == "/DeviceRGB"
+Resources.XObject.Im0.DecodeParms.BitsPerComponent == 8
+Resources.XObject.Im0.DecodeParms.Colors == 1
+Resources.XObject.Im0.DecodeParms.Predictor == 15
+Resources.XObject.Im0.Filter == "/FlateDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
rm "$tempdir/page-$page.pdf"
done
+done
rm "$tempdir/animation.gif"
j=$((j+1))
@@ -781,8 +884,8 @@ identify -verbose "$tempdir/float.tiff" | grep --quiet '^ Mime type: image/tiff
identify -verbose "$tempdir/float.tiff" | grep --quiet '^ Geometry: 60x60+0+0$'
identify -verbose "$tempdir/float.tiff" | grep --quiet '^ Colorspace: sRGB$'
identify -verbose "$tempdir/float.tiff" | grep --quiet '^ Type: TrueColor$'
-identify -verbose "$tempdir/float.tiff" | grep --quiet '^ Endianess: LSB$'
-identify -verbose "$tempdir/float.tiff" | grep --quiet '^ Depth: 32/8-bit$'
+identify -verbose "$tempdir/float.tiff" | grep --quiet '^ Endiann\?ess: LSB$'
+identify -verbose "$tempdir/float.tiff" | grep --quiet '^ Depth: 32/\(8\|16\)-bit$' # imagemagick may produce a Depth: 32/8-bit or 32/16-bit image
identify -verbose "$tempdir/float.tiff" | grep --quiet '^ Page geometry: 60x60+0+0$'
identify -verbose "$tempdir/float.tiff" | grep --quiet '^ Compression: Zip$'
identify -verbose "$tempdir/float.tiff" | grep --quiet '^ quantum:format: floating-point$'
@@ -790,11 +893,13 @@ identify -verbose "$tempdir/float.tiff" | grep --quiet '^ tiff:alpha: unspeci
identify -verbose "$tempdir/float.tiff" | grep --quiet '^ tiff:endian: lsb$'
identify -verbose "$tempdir/float.tiff" | grep --quiet '^ tiff:photometric: RGB$'
-img2pdf "$tempdir/float.tiff" /dev/null && rc=$? || rc=$?
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/float.tiff" /dev/null && rc=$? || rc=$?
if [ "$rc" -eq 0 ]; then
echo needs to fail here
exit 1
fi
+done
rm "$tempdir/float.tiff"
j=$((j+1))
@@ -809,7 +914,7 @@ identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ Mime type: image/tiff
identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ Geometry: 60x60+0+0$'
identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ Colorspace: CMYK$'
identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ Type: ColorSeparation$'
-identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ Endianess: LSB$'
+identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ Endiann\?ess: LSB$'
identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ Depth: 8-bit$'
identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ Page geometry: 60x60+0+0$'
identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ Compression: Zip$'
@@ -817,7 +922,8 @@ identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ tiff:alpha: unspeci
identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ tiff:endian: lsb$'
identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ tiff:photometric: separated$'
-img2pdf "$tempdir/cmyk8.tiff" "$tempdir/out.pdf"
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/cmyk8.tiff" "$tempdir/out.pdf"
compare_ghostscript "$tempdir/out.pdf" "$tempdir/cmyk8.tiff" tiff32nc
@@ -831,14 +937,18 @@ pdfimages -tiff "$tempdir/out.pdf" "$tempdir/images"
compare -metric AE "$tempdir/cmyk8.tiff" "$tempdir/images-000.tif" null: 2>/dev/null
rm "$tempdir/images-000.tif"
-grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 8$' "$tempdir/out.pdf"
-grep --quiet '^ /ColorSpace /DeviceCMYK$' "$tempdir/out.pdf"
-grep --quiet '^ /Filter /FlateDecode$' "$tempdir/out.pdf"
-grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
+cat << 'END' | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == 8
+Resources.XObject.Im0.ColorSpace == "/DeviceCMYK"
+Resources.XObject.Im0.Filter == "/FlateDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
+rm "$tempdir/out.pdf"
+done
-rm "$tempdir/cmyk8.tiff" "$tempdir/out.pdf"
+rm "$tempdir/cmyk8.tiff"
j=$((j+1))
###############################################################################
@@ -851,7 +961,7 @@ identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ Mime type: image/tif
identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ Geometry: 60x60+0+0$'
identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ Colorspace: CMYK$'
identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ Type: ColorSeparation$'
-identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ Endianess: LSB$'
+identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ Endiann\?ess: LSB$'
identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ Depth: 16-bit$'
identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ Page geometry: 60x60+0+0$'
identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ Compression: Zip$'
@@ -860,11 +970,13 @@ identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ tiff:endian: lsb$'
identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ tiff:photometric: separated$'
# PIL is unable to read 16 bit CMYK images
-img2pdf "$tempdir/cmyk16.gif" /dev/null && rc=$? || rc=$?
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/cmyk16.gif" /dev/null && rc=$? || rc=$?
if [ "$rc" -eq 0 ]; then
echo needs to fail here
exit 1
fi
+done
rm "$tempdir/cmyk16.tiff"
j=$((j+1))
@@ -879,7 +991,7 @@ identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ Mime type: image/tif
identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ Geometry: 60x60+0+0$'
identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ Colorspace: sRGB$'
identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ Type: TrueColor$'
-identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ Endianess: LSB$'
+identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ Endiann\?ess: LSB$'
identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ Depth: 8-bit$'
identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ Page geometry: 60x60+0+0$'
identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ Compression: Zip$'
@@ -887,23 +999,28 @@ identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ tiff:alpha: unspec
identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ tiff:endian: lsb$'
identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ tiff:photometric: RGB$'
-img2pdf "$tempdir/normal.tiff" "$tempdir/out.pdf"
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/normal.tiff" "$tempdir/out.pdf"
compare_rendered "$tempdir/out.pdf" "$tempdir/normal.tiff" tiff24nc
compare_pdfimages "$tempdir/out.pdf" "$tempdir/normal.tiff"
-grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 8$' "$tempdir/out.pdf"
-grep --quiet '^ /ColorSpace /DeviceRGB$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 8$' "$tempdir/out.pdf"
-grep --quiet '^ /Colors 3$' "$tempdir/out.pdf"
-grep --quiet '^ /Predictor 15$' "$tempdir/out.pdf"
-grep --quiet '^ /Filter /FlateDecode$' "$tempdir/out.pdf"
-grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
-
-rm "$tempdir/normal.tiff" "$tempdir/out.pdf"
+cat << 'END' | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == 8
+Resources.XObject.Im0.ColorSpace == "/DeviceRGB"
+Resources.XObject.Im0.DecodeParms.BitsPerComponent == 8
+Resources.XObject.Im0.DecodeParms.Colors == 3
+Resources.XObject.Im0.DecodeParms.Predictor == 15
+Resources.XObject.Im0.Filter == "/FlateDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
+rm "$tempdir/out.pdf"
+done
+
+rm "$tempdir/normal.tiff"
j=$((j+1))
###############################################################################
@@ -916,7 +1033,7 @@ identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ Mime type: image/tif
identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ Geometry: 60x60+0+0$'
identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ Colorspace: sRGB$'
identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ Type: TrueColorAlpha$'
-identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ Endianess: LSB$'
+identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ Endiann\?ess: LSB$'
identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ Depth: 8-bit$'
identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ Page geometry: 60x60+0+0$'
identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ Compression: Zip$'
@@ -924,11 +1041,13 @@ identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ tiff:alpha: unasso
identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ tiff:endian: lsb$'
identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ tiff:photometric: RGB$'
-img2pdf "$tempdir/alpha8.tiff" /dev/null && rc=$? || rc=$?
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/alpha8.tiff" /dev/null && rc=$? || rc=$?
if [ "$rc" -eq 0 ]; then
echo needs to fail here
exit 1
fi
+done
rm "$tempdir/alpha8.tiff"
j=$((j+1))
@@ -943,7 +1062,7 @@ identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ Mime type: image/ti
identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ Geometry: 60x60+0+0$'
identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ Colorspace: sRGB$'
identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ Type: TrueColorAlpha$'
-identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ Endianess: LSB$'
+identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ Endiann\?ess: LSB$'
identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ Depth: 16-bit$'
identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ Page geometry: 60x60+0+0$'
identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ Compression: Zip$'
@@ -951,11 +1070,13 @@ identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ tiff:alpha: unass
identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ tiff:endian: lsb$'
identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ tiff:photometric: RGB$'
-img2pdf "$tempdir/alpha16.tiff" /dev/null && rc=$? || rc=$?
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/alpha16.tiff" /dev/null && rc=$? || rc=$?
if [ "$rc" -eq 0 ]; then
echo needs to fail here
exit 1
fi
+done
rm "$tempdir/alpha16.tiff"
j=$((j+1))
@@ -970,7 +1091,7 @@ identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ Mime type: image/tiff
identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ Geometry: 60x60+0+0$'
identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ Colorspace: Gray$'
identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ Type: Bilevel$'
-identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ Endianess: LSB$'
+identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ Endiann\?ess: LSB$'
identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ Depth: 1-bit$'
identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ Page geometry: 60x60+0+0$'
identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ Compression: Zip$'
@@ -978,24 +1099,29 @@ identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ tiff:alpha: unspeci
identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ tiff:endian: lsb$'
identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ tiff:photometric: min-is-black$'
-img2pdf "$tempdir/gray1.tiff" "$tempdir/out.pdf"
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/gray1.tiff" "$tempdir/out.pdf"
compare_rendered "$tempdir/out.pdf" "$tempdir/gray1.png" pnggray
compare_pdfimages "$tempdir/out.pdf" "$tempdir/gray1.png"
-grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 1$' "$tempdir/out.pdf"
-grep --quiet '^ /ColorSpace /DeviceGray$' "$tempdir/out.pdf"
-grep --quiet '^ /BlackIs1 true$' "$tempdir/out.pdf"
-grep --quiet '^ /Columns 60$' "$tempdir/out.pdf"
-grep --quiet '^ /K -1$' "$tempdir/out.pdf"
-grep --quiet '^ /Rows 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Filter \[ /CCITTFaxDecode \]$' "$tempdir/out.pdf"
-grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
-
-rm "$tempdir/gray1.tiff" "$tempdir/out.pdf"
+cat << 'END' | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == 1
+Resources.XObject.Im0.ColorSpace == "/DeviceGray"
+Resources.XObject.Im0.DecodeParms[0].BlackIs1 == True
+Resources.XObject.Im0.DecodeParms[0].Columns == 60
+Resources.XObject.Im0.DecodeParms[0].K == -1
+Resources.XObject.Im0.DecodeParms[0].Rows == 60
+Resources.XObject.Im0.Filter[0] == "/CCITTFaxDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
+rm "$tempdir/out.pdf"
+done
+
+rm "$tempdir/gray1.tiff"
j=$((j+1))
###############################################################################
@@ -1009,7 +1135,7 @@ for i in 2 4 8; do
identify -verbose "$tempdir/gray$i.tiff" | grep --quiet '^ Geometry: 60x60+0+0$'
identify -verbose "$tempdir/gray$i.tiff" | grep --quiet '^ Colorspace: Gray$'
identify -verbose "$tempdir/gray$i.tiff" | grep --quiet '^ Type: Grayscale$'
- identify -verbose "$tempdir/gray$i.tiff" | grep --quiet '^ Endianess: LSB$'
+ identify -verbose "$tempdir/gray$i.tiff" | grep --quiet '^ Endiann\?ess: LSB$'
identify -verbose "$tempdir/gray$i.tiff" | grep --quiet "^ Depth: $i-bit$"
identify -verbose "$tempdir/gray$i.tiff" | grep --quiet '^ Page geometry: 60x60+0+0$'
identify -verbose "$tempdir/gray$i.tiff" | grep --quiet '^ Compression: Zip$'
@@ -1017,24 +1143,29 @@ for i in 2 4 8; do
identify -verbose "$tempdir/gray$i.tiff" | grep --quiet '^ tiff:endian: lsb$'
identify -verbose "$tempdir/gray$i.tiff" | grep --quiet '^ tiff:photometric: min-is-black$'
- img2pdf "$tempdir/gray$i.tiff" "$tempdir/out.pdf"
+ for engine in $available_engines; do
+ img2pdf $engine "$tempdir/gray$i.tiff" "$tempdir/out.pdf"
compare_rendered "$tempdir/out.pdf" "$tempdir/gray$i.png" pnggray
compare_pdfimages "$tempdir/out.pdf" "$tempdir/gray$i.png"
# When saving a PNG, PIL will store it as 8-bit data
- grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
- grep --quiet '^ /BitsPerComponent 8$' "$tempdir/out.pdf"
- grep --quiet '^ /ColorSpace /DeviceGray$' "$tempdir/out.pdf"
- grep --quiet '^ /BitsPerComponent 8$' "$tempdir/out.pdf"
- grep --quiet '^ /Colors 1$' "$tempdir/out.pdf"
- grep --quiet '^ /Predictor 15$' "$tempdir/out.pdf"
- grep --quiet '^ /Filter /FlateDecode$' "$tempdir/out.pdf"
- grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
- grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
-
- rm "$tempdir/gray$i.tiff" "$tempdir/out.pdf"
+ cat << 'END' | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == 8
+Resources.XObject.Im0.ColorSpace == "/DeviceGray"
+Resources.XObject.Im0.DecodeParms.BitsPerComponent == 8
+Resources.XObject.Im0.DecodeParms.Colors == 1
+Resources.XObject.Im0.DecodeParms.Predictor == 15
+Resources.XObject.Im0.Filter == "/FlateDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
+ rm "$tempdir/out.pdf"
+ done
+
+ rm "$tempdir/gray$i.tiff"
j=$((j+1))
done
@@ -1048,7 +1179,7 @@ identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ Mime type: image/tif
identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ Geometry: 60x60+0+0$'
identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ Colorspace: Gray$'
identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ Type: Grayscale$'
-identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ Endianess: LSB$'
+identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ Endiann\?ess: LSB$'
identify -verbose "$tempdir/gray16.tiff" | grep --quiet "^ Depth: 16-bit$"
identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ Page geometry: 60x60+0+0$'
identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ Compression: Zip$'
@@ -1056,11 +1187,13 @@ identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ tiff:alpha: unspec
identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ tiff:endian: lsb$'
identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ tiff:photometric: min-is-black$'
-img2pdf "$tempdir/gray16.tiff" /dev/null && rc=$? || rc=$?
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/gray16.tiff" /dev/null && rc=$? || rc=$?
if [ "$rc" -eq 0 ]; then
echo needs to fail here
exit 1
fi
+done
rm "$tempdir/gray16.tiff"
j=$((j+1))
@@ -1075,7 +1208,7 @@ identify -verbose "$tempdir/multipage.tiff[0]" | grep --quiet '^ Mime type: ima
identify -verbose "$tempdir/multipage.tiff[0]" | grep --quiet '^ Geometry: 60x60+0+0$'
identify -verbose "$tempdir/multipage.tiff[0]" | grep --quiet '^ Colorspace: sRGB$'
identify -verbose "$tempdir/multipage.tiff[0]" | grep --quiet '^ Type: TrueColor$'
-identify -verbose "$tempdir/multipage.tiff[0]" | grep --quiet '^ Endianess: LSB$'
+identify -verbose "$tempdir/multipage.tiff[0]" | grep --quiet '^ Endiann\?ess: LSB$'
identify -verbose "$tempdir/multipage.tiff[0]" | grep --quiet '^ Depth: 8-bit$'
identify -verbose "$tempdir/multipage.tiff[0]" | grep --quiet '^ Page geometry: 60x60+0+0$'
identify -verbose "$tempdir/multipage.tiff[0]" | grep --quiet '^ Compression: Zip$'
@@ -1088,7 +1221,7 @@ identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ Mime type: ima
identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ Geometry: 60x60+0+0$'
identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ Colorspace: sRGB$'
identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ Type: TrueColor$'
-identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ Endianess: LSB$'
+identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ Endiann\?ess: LSB$'
identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ Depth: 8-bit$'
identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ Page geometry: 60x60+0+0$'
identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ Compression: Zip$'
@@ -1097,7 +1230,8 @@ identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ tiff:endian:
identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ tiff:photometric: RGB$'
identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ Scene: 1$'
-img2pdf "$tempdir/multipage.tiff" "$tempdir/out.pdf"
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/multipage.tiff" "$tempdir/out.pdf"
if [ "$(pdfinfo "$tempdir/out.pdf" | awk '/Pages:/ {print $2}')" != 2 ]; then
echo "pdf does not have 2 pages"
@@ -1112,13 +1246,21 @@ for page in 1 2; do
compare_pdfimages "$tempdir/page-$page.pdf" "$tempdir/multipage.tiff[$((page-1))]"
- # We cannot grep the PDF metadata here, because the page was
- # rewritten into a non-greppable format by pdfseparate. but that's
- # okay, because we already grepped single pages before and multipage
- # PDF should not be different.
+ cat << 'END' | checkpdf "$tempdir/page-$page.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == 8
+Resources.XObject.Im0.ColorSpace == "/DeviceRGB"
+Resources.XObject.Im0.DecodeParms.BitsPerComponent == 8
+Resources.XObject.Im0.DecodeParms.Colors == 3
+Resources.XObject.Im0.DecodeParms.Predictor == 15
+Resources.XObject.Im0.Filter == "/FlateDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
rm "$tempdir/page-$page.pdf"
done
+done
rm "$tempdir/multipage.tiff"
j=$((j+1))
@@ -1134,7 +1276,7 @@ for i in 1 2 4 8; do
identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ Geometry: 60x60+0+0$'
identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ Colorspace: sRGB$'
identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ Type: Palette$'
- identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ Endianess: LSB$'
+ identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ Endiann\?ess: LSB$'
if [ "$i" -eq 8 ]; then
identify -verbose "$tempdir/palette$i.tiff" | grep --quiet "^ Depth: 8-bit$"
else
@@ -1152,23 +1294,31 @@ for i in 1 2 4 8; do
identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ tiff:endian: lsb$'
identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ tiff:photometric: palette$'
- img2pdf "$tempdir/palette$i.tiff" "$tempdir/out.pdf"
+ for engine in $available_engines; do
+ if [ $engine = "pdfrw" ]; then
+ continue
+ fi
+ img2pdf $engine "$tempdir/palette$i.tiff" "$tempdir/out.pdf"
compare_rendered "$tempdir/out.pdf" "$tempdir/palette$i.png"
# pdfimages cannot export palette based images
- grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
- grep --quiet '^ /BitsPerComponent '"$i"'$' "$tempdir/out.pdf"
- grep --quiet '^ /ColorSpace \[ /Indexed /DeviceRGB ' "$tempdir/out.pdf"
- grep --quiet '^ /BitsPerComponent '"$i"'$' "$tempdir/out.pdf"
- grep --quiet '^ /Colors 1$' "$tempdir/out.pdf"
- grep --quiet '^ /Predictor 15$' "$tempdir/out.pdf"
- grep --quiet '^ /Filter /FlateDecode$' "$tempdir/out.pdf"
- grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
- grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
+ cat << END | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == $i
+Resources.XObject.Im0.ColorSpace[0] == "/Indexed"
+Resources.XObject.Im0.ColorSpace[1] == "/DeviceRGB"
+Resources.XObject.Im0.DecodeParms.BitsPerComponent == $i
+Resources.XObject.Im0.DecodeParms.Colors == 1
+Resources.XObject.Im0.DecodeParms.Predictor == 15
+Resources.XObject.Im0.Filter == "/FlateDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
rm "$tempdir/out.pdf"
+ done
rm "$tempdir/palette$i.tiff"
j=$((j+1))
@@ -1185,7 +1335,7 @@ for i in 12 14 16; do
identify -verbose "$tempdir/normal$i.tiff" | grep --quiet '^ Geometry: 60x60+0+0$'
identify -verbose "$tempdir/normal$i.tiff" | grep --quiet '^ Colorspace: sRGB$'
identify -verbose "$tempdir/normal$i.tiff" | grep --quiet '^ Type: TrueColor$'
- identify -verbose "$tempdir/normal$i.tiff" | grep --quiet '^ Endianess: LSB$'
+ identify -verbose "$tempdir/normal$i.tiff" | grep --quiet '^ Endiann\?ess: LSB$'
if [ $i -eq 16 ]; then
identify -verbose "$tempdir/normal$i.tiff" | grep --quiet "^ Depth: $i-bit$"
else
@@ -1197,11 +1347,13 @@ for i in 12 14 16; do
identify -verbose "$tempdir/normal$i.tiff" | grep --quiet '^ tiff:endian: lsb$'
identify -verbose "$tempdir/normal$i.tiff" | grep --quiet '^ tiff:photometric: RGB$'
- img2pdf "$tempdir/normal$i.tiff" /dev/null && rc=$? || rc=$?
+ for engine in $available_engines; do
+ img2pdf $engine "$tempdir/normal$i.tiff" /dev/null && rc=$? || rc=$?
if [ "$rc" -eq 0 ]; then
echo needs to fail here
exit 1
fi
+ done
rm "$tempdir/normal$i.tiff"
j=$((j+1))
@@ -1217,31 +1369,36 @@ tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Photometric Interpretation: min-
tiffinfo "$tempdir/group4.tiff" | grep --quiet 'FillOrder: msb-to-lsb'
tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Samples/Pixel: 1'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Type: Bilevel'
-identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Endianess: LSB'
+identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Endian*ess: LSB'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Depth: 1-bit'
-identify -verbose "$tempdir/group4.tiff" | grep --quiet 'gray: 1-bit'
+identify -verbose "$tempdir/group4.tiff" | grep --quiet '[gG]ray: 1-bit'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Compression: Group4'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:endian: lsb'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:photometric: min-is-white'
-img2pdf "$tempdir/group4.tiff" "$tempdir/out.pdf"
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/group4.tiff" "$tempdir/out.pdf"
compare_rendered "$tempdir/out.pdf" "$tempdir/group4.tiff" pnggray
compare_pdfimages "$tempdir/out.pdf" "$tempdir/group4.tiff"
-grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 1$' "$tempdir/out.pdf"
-grep --quiet '^ /ColorSpace /DeviceGray$' "$tempdir/out.pdf"
-grep --quiet '^ /BlackIs1 false$' "$tempdir/out.pdf"
-grep --quiet '^ /Columns 60$' "$tempdir/out.pdf"
-grep --quiet '^ /K -1$' "$tempdir/out.pdf"
-grep --quiet '^ /Rows 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Filter \[ /CCITTFaxDecode \]$' "$tempdir/out.pdf"
-grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
-
-rm "$tempdir/group4.tiff" "$tempdir/out.pdf"
+cat << 'END' | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == 1
+Resources.XObject.Im0.ColorSpace == "/DeviceGray"
+Resources.XObject.Im0.DecodeParms[0].BlackIs1 == False
+Resources.XObject.Im0.DecodeParms[0].Columns == 60
+Resources.XObject.Im0.DecodeParms[0].K == -1
+Resources.XObject.Im0.DecodeParms[0].Rows == 60
+Resources.XObject.Im0.Filter[0] == "/CCITTFaxDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
+rm "$tempdir/out.pdf"
+done
+
+rm "$tempdir/group4.tiff"
j=$((j+1))
###############################################################################
@@ -1254,31 +1411,36 @@ tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Photometric Interpretation: min-
tiffinfo "$tempdir/group4.tiff" | grep --quiet 'FillOrder: msb-to-lsb'
tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Samples/Pixel: 1'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Type: Bilevel'
-identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Endianess: MSB'
+identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Endian*ess: MSB'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Depth: 1-bit'
-identify -verbose "$tempdir/group4.tiff" | grep --quiet 'gray: 1-bit'
+identify -verbose "$tempdir/group4.tiff" | grep --quiet '[gG]ray: 1-bit'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Compression: Group4'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:endian: msb'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:photometric: min-is-white'
-img2pdf "$tempdir/group4.tiff" "$tempdir/out.pdf"
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/group4.tiff" "$tempdir/out.pdf"
compare_rendered "$tempdir/out.pdf" "$tempdir/group4.tiff" pnggray
compare_pdfimages "$tempdir/out.pdf" "$tempdir/group4.tiff"
-grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 1$' "$tempdir/out.pdf"
-grep --quiet '^ /ColorSpace /DeviceGray$' "$tempdir/out.pdf"
-grep --quiet '^ /BlackIs1 false$' "$tempdir/out.pdf"
-grep --quiet '^ /Columns 60$' "$tempdir/out.pdf"
-grep --quiet '^ /K -1$' "$tempdir/out.pdf"
-grep --quiet '^ /Rows 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Filter \[ /CCITTFaxDecode \]$' "$tempdir/out.pdf"
-grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
-
-rm "$tempdir/group4.tiff" "$tempdir/out.pdf"
+cat << 'END' | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == 1
+Resources.XObject.Im0.ColorSpace == "/DeviceGray"
+Resources.XObject.Im0.DecodeParms[0].BlackIs1 == False
+Resources.XObject.Im0.DecodeParms[0].Columns == 60
+Resources.XObject.Im0.DecodeParms[0].K == -1
+Resources.XObject.Im0.DecodeParms[0].Rows == 60
+Resources.XObject.Im0.Filter[0] == "/CCITTFaxDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
+rm "$tempdir/out.pdf"
+done
+
+rm "$tempdir/group4.tiff"
j=$((j+1))
###############################################################################
@@ -1291,31 +1453,36 @@ tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Photometric Interpretation: min-
tiffinfo "$tempdir/group4.tiff" | grep --quiet 'FillOrder: lsb-to-msb'
tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Samples/Pixel: 1'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Type: Bilevel'
-identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Endianess: MSB'
+identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Endian*ess: MSB'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Depth: 1-bit'
-identify -verbose "$tempdir/group4.tiff" | grep --quiet 'gray: 1-bit'
+identify -verbose "$tempdir/group4.tiff" | grep --quiet '[gG]ray: 1-bit'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Compression: Group4'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:endian: msb'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:photometric: min-is-white'
-img2pdf "$tempdir/group4.tiff" "$tempdir/out.pdf"
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/group4.tiff" "$tempdir/out.pdf"
compare_rendered "$tempdir/out.pdf" "$tempdir/group4.tiff" pnggray
compare_pdfimages "$tempdir/out.pdf" "$tempdir/group4.tiff"
-grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 1$' "$tempdir/out.pdf"
-grep --quiet '^ /ColorSpace /DeviceGray$' "$tempdir/out.pdf"
-grep --quiet '^ /BlackIs1 false$' "$tempdir/out.pdf"
-grep --quiet '^ /Columns 60$' "$tempdir/out.pdf"
-grep --quiet '^ /K -1$' "$tempdir/out.pdf"
-grep --quiet '^ /Rows 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Filter \[ /CCITTFaxDecode \]$' "$tempdir/out.pdf"
-grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
-
-rm "$tempdir/group4.tiff" "$tempdir/out.pdf"
+cat << 'END' | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == 1
+Resources.XObject.Im0.ColorSpace == "/DeviceGray"
+Resources.XObject.Im0.DecodeParms[0].BlackIs1 == False
+Resources.XObject.Im0.DecodeParms[0].Columns == 60
+Resources.XObject.Im0.DecodeParms[0].K == -1
+Resources.XObject.Im0.DecodeParms[0].Rows == 60
+Resources.XObject.Im0.Filter[0] == "/CCITTFaxDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
+rm "$tempdir/out.pdf"
+done
+
+rm "$tempdir/group4.tiff"
j=$((j+1))
###############################################################################
@@ -1333,31 +1500,36 @@ tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Photometric Interpretation: min-
#tiffinfo "$tempdir/group4.tiff" | grep --quiet 'FillOrder: msb-to-lsb'
#tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Samples/Pixel: 1'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Type: Bilevel'
-identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Endianess: LSB'
+identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Endian*ess: LSB'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Depth: 1-bit'
-identify -verbose "$tempdir/group4.tiff" | grep --quiet 'gray: 1-bit'
+identify -verbose "$tempdir/group4.tiff" | grep --quiet '[gG]ray: 1-bit'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Compression: Group4'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:endian: lsb'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:photometric: min-is-black'
-img2pdf "$tempdir/group4.tiff" "$tempdir/out.pdf"
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/group4.tiff" "$tempdir/out.pdf"
compare_rendered "$tempdir/out.pdf" "$tempdir/group4.tiff" pnggray
compare_pdfimages "$tempdir/out.pdf" "$tempdir/group4.tiff"
-grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 1$' "$tempdir/out.pdf"
-grep --quiet '^ /ColorSpace /DeviceGray$' "$tempdir/out.pdf"
-grep --quiet '^ /BlackIs1 true$' "$tempdir/out.pdf"
-grep --quiet '^ /Columns 60$' "$tempdir/out.pdf"
-grep --quiet '^ /K -1$' "$tempdir/out.pdf"
-grep --quiet '^ /Rows 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Filter \[ /CCITTFaxDecode \]$' "$tempdir/out.pdf"
-grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
-
-rm "$tempdir/group4.tiff" "$tempdir/out.pdf"
+cat << 'END' | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == 1
+Resources.XObject.Im0.ColorSpace == "/DeviceGray"
+Resources.XObject.Im0.DecodeParms[0].BlackIs1 == True
+Resources.XObject.Im0.DecodeParms[0].Columns == 60
+Resources.XObject.Im0.DecodeParms[0].K == -1
+Resources.XObject.Im0.DecodeParms[0].Rows == 60
+Resources.XObject.Im0.Filter[0] == "/CCITTFaxDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
+rm "$tempdir/out.pdf"
+done
+
+rm "$tempdir/group4.tiff"
j=$((j+1))
###############################################################################
@@ -1376,31 +1548,36 @@ tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Photometric Interpretation: min-
tiffinfo "$tempdir/group4.tiff" | grep --quiet 'FillOrder: msb-to-lsb' && exit 1
tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Samples/Pixel: 1' && exit 1
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Type: Bilevel'
-identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Endianess: LSB'
+identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Endian*ess: LSB'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Depth: 1-bit'
-identify -verbose "$tempdir/group4.tiff" | grep --quiet 'gray: 1-bit'
+identify -verbose "$tempdir/group4.tiff" | grep --quiet '[gG]ray: 1-bit'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Compression: Group4'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:endian: lsb'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:photometric: min-is-white'
-img2pdf "$tempdir/group4.tiff" "$tempdir/out.pdf"
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/group4.tiff" "$tempdir/out.pdf"
compare_rendered "$tempdir/out.pdf" "$tempdir/group4.tiff" pnggray
compare_pdfimages "$tempdir/out.pdf" "$tempdir/group4.tiff"
-grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 1$' "$tempdir/out.pdf"
-grep --quiet '^ /ColorSpace /DeviceGray$' "$tempdir/out.pdf"
-grep --quiet '^ /BlackIs1 false$' "$tempdir/out.pdf"
-grep --quiet '^ /Columns 60$' "$tempdir/out.pdf"
-grep --quiet '^ /K -1$' "$tempdir/out.pdf"
-grep --quiet '^ /Rows 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Filter \[ /CCITTFaxDecode \]$' "$tempdir/out.pdf"
-grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
-
-rm "$tempdir/group4.tiff" "$tempdir/out.pdf"
+cat << 'END' | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == 1
+Resources.XObject.Im0.ColorSpace == "/DeviceGray"
+Resources.XObject.Im0.DecodeParms[0].BlackIs1 == False
+Resources.XObject.Im0.DecodeParms[0].Columns == 60
+Resources.XObject.Im0.DecodeParms[0].K == -1
+Resources.XObject.Im0.DecodeParms[0].Rows == 60
+Resources.XObject.Im0.Filter[0] == "/CCITTFaxDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
+rm "$tempdir/out.pdf"
+done
+
+rm "$tempdir/group4.tiff"
j=$((j+1))
###############################################################################
@@ -1416,31 +1593,36 @@ tiffinfo "$tempdir/group4.tiff" | grep --quiet 'FillOrder: msb-to-lsb'
tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Samples/Pixel: 1'
tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Rows/Strip:' && exit 1
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Type: Bilevel'
-identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Endianess: LSB'
+identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Endian*ess: LSB'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Depth: 1-bit'
-identify -verbose "$tempdir/group4.tiff" | grep --quiet 'gray: 1-bit'
+identify -verbose "$tempdir/group4.tiff" | grep --quiet '[gG]ray: 1-bit'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Compression: Group4'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:endian: lsb'
identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:photometric: min-is-white'
-img2pdf "$tempdir/group4.tiff" "$tempdir/out.pdf"
+for engine in $available_engines; do
+img2pdf $engine "$tempdir/group4.tiff" "$tempdir/out.pdf"
compare_rendered "$tempdir/out.pdf" "$tempdir/group4.tiff" pnggray
compare_pdfimages "$tempdir/out.pdf" "$tempdir/group4.tiff"
-grep --quiet '^45.0000 0 0 45.0000 0.0000 0.0000 cm$' "$tempdir/out.pdf"
-grep --quiet '^ /BitsPerComponent 1$' "$tempdir/out.pdf"
-grep --quiet '^ /ColorSpace /DeviceGray$' "$tempdir/out.pdf"
-grep --quiet '^ /BlackIs1 false$' "$tempdir/out.pdf"
-grep --quiet '^ /Columns 60$' "$tempdir/out.pdf"
-grep --quiet '^ /K -1$' "$tempdir/out.pdf"
-grep --quiet '^ /Rows 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Filter \[ /CCITTFaxDecode \]$' "$tempdir/out.pdf"
-grep --quiet '^ /Height 60$' "$tempdir/out.pdf"
-grep --quiet '^ /Width 60$' "$tempdir/out.pdf"
-
-rm "$tempdir/group4.tiff" "$tempdir/out.pdf"
+cat << 'END' | checkpdf "$tempdir/out.pdf"
+Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ'
+Resources.XObject.Im0.BitsPerComponent == 1
+Resources.XObject.Im0.ColorSpace == "/DeviceGray"
+Resources.XObject.Im0.DecodeParms[0].BlackIs1 == False
+Resources.XObject.Im0.DecodeParms[0].Columns == 60
+Resources.XObject.Im0.DecodeParms[0].K == -1
+Resources.XObject.Im0.DecodeParms[0].Rows == 60
+Resources.XObject.Im0.Filter[0] == "/CCITTFaxDecode"
+Resources.XObject.Im0.Height == 60
+Resources.XObject.Im0.Width == 60
+END
+rm "$tempdir/out.pdf"
+done
+
+rm "$tempdir/group4.tiff"
j=$((j+1))
rm "$tempdir/alpha.png" "$tempdir/normal.png" "$tempdir/inverse.png" "$tempdir/palette1.png" "$tempdir/palette2.png" "$tempdir/palette4.png" "$tempdir/palette8.png" "$tempdir/gray8.png" "$tempdir/normal16.png" "$tempdir/gray16.png" "$tempdir/gray4.png" "$tempdir/gray2.png" "$tempdir/gray1.png"