From 664be129550a6fb2929a994185e3bd15dbdc7287 Mon Sep 17 00:00:00 2001 From: Brandon Rozek Date: Sun, 18 Dec 2022 18:52:04 -0500 Subject: [PATCH] New post --- content/blog/concatenating-pdf-linux.md | 78 +++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 content/blog/concatenating-pdf-linux.md diff --git a/content/blog/concatenating-pdf-linux.md b/content/blog/concatenating-pdf-linux.md new file mode 100644 index 0000000..592260a --- /dev/null +++ b/content/blog/concatenating-pdf-linux.md @@ -0,0 +1,78 @@ +--- +title: "Concatenating PDF files in Linux" +date: 2022-12-18T18:38:44-05:00 +draft: false +tags: [] +math: false +--- + +Every so often I need to combine several images into a single PDF. First, to convert an image to a PDF we can use `imagemagick`. + +```bash +convert -quality 100 Image.png Scanned.pdf +``` + +To combine or concatenate multiple PDF files, we can use `ghostscript`. + +```bash +gs -sDEVICE=pdfwrite \ + -sOUTPUTFILE=output.pdf \ + -dNOPAUSE \ + -dBATCH \ + input0.pdf input1.pdf input2.pdf +``` + +| Flag | Description | +| -------------- | ------------------------------------------------------------ | +| `-sDEVICE` | Device used for processing the output file type. Use `pdfwrite` to write to a PDF file. | +| `-sOUTPUTFILE` | Path to save the resulting file output. | +| `-dNOPAUSE` | Disables the prompting and pausing at the end of each page. | +| `-dBATCH` | Finishes interpreting after processing the inputted files | + +Alternatively you can use `pdftk` + +```bash +pdftk input0.pdf input1.pdf input2.pdf \ + cat output output.pdf +``` + +Lastly, you can also use `imagemagick`. Do note, however, that this program often leads to larger file sizes. + +```bash +convert input0.pdf input1.pdf input2.pdf output.pdf +``` + +## Aside: Pixel Densities + +One issue I came across is that the pages were of different sizes. This is often because the pages can be of different pixel densities. + +To check run `pdfimages` and look at the 3rd to last and 2nd to last columns: + +```bash +pdfimages -list filename.pdf +``` + +``` +page num type width height color comp bpc enc interp object ID x-ppi y-ppi size ratio +-------------------------------------------------------------------------------------------- + 1 0 image 613 77 rgb 3 8 jpeg no 8 0 1071 1076 9456B 6.7% + 1 1 image 2692 3496 rgb 3 8 jpeg no 9 0 329 329 418K 1.5% + 2 2 image 613 77 rgb 3 8 jpeg no 8 0 915 919 9456B 6.7% + 2 3 image 2300 3016 rgb 3 8 jpeg no 15 0 282 282 322K 1.6% + 3 4 image 613 77 rgb 3 8 jpeg no 8 0 937 942 9456B 6.7% + 3 5 image 2356 3024 rgb 3 8 jpeg no 21 0 288 288 150K 0.7% + 4 6 image 1686 2200 rgb 3 8 jpeg no 27 0 204 204 622K 5.7% + 5 7 image 5100 7016 rgb 3 8 jpeg no 33 0 600 600 1193K 1.1% + 6 8 image 613 77 rgb 3 8 jpeg no 8 0 1104 1110 9456B 6.7% + 6 9 image 2776 3720 rgb 3 8 jpeg no 38 0 339 339 231K 0.8% + 7 10 image 613 77 rgb 3 8 jpeg no 8 0 939 943 9456B 6.7% + 7 11 image 2360 3072 rgb 3 8 jpeg no 44 0 289 289 151K 0.7% +``` + +We can then use `imagemagick` to enforce a certain pixel density. The tradeoff being that the file size might increase. + +```bash +convert -density 300 input.pdf output.pdf +``` + +If you happen to know a different way to enforce a pixel density that doesn't have a file size increase tradeoff. Please get in touch.