---
# System prepended metadata

title: 'Document hack with only MacOS '

---

# PDF Document hack with MacOS Terminal only
###### tags: `compress pdf for free`, `convert pdf to jpg`, `make pdf looks scanned`, `make pdf look like scan`


### 1. Convert pdf to small size

Install ghostscript from aptitude.

```
brew install ghostscript
```


Now, you can use ghostscript to compress your PDF file for the web:

```
gs -sDEVICE=pdfwrite -dNOPAUSE -dQUIET -dBATCH -dPDFSETTINGS=/printer -dCompatibilityLevel=1.4 -sOutputFile=output.pdf input.pdf
```
Type: [screen|ebook|printer|prepress]

#### + additional enhancement

That’s not exactly a memorable command, so I’ve made a function that you can add to your ~/.bash_profile to allow you to easily compress PDF files from your terminal:

```
# Usage: compresspdf [input file] [output file] [screen*|ebook|printer|prepress]
compresspdf() {
    gs -sDEVICE=pdfwrite -dNOPAUSE -dQUIET -dBATCH -dPDFSETTINGS=/${3:-"screen"} -dCompatibilityLevel=1.4 -sOutputFile="$2" "$1"
}
```

Now you can simply run the following command:

```
compresspdf "Massive.pdf" "Small.pdf"
```

Using this command I managed to compress an A3 size PDF (originally around 9MB) down to just under 1MB, which is perfect for the web.

[Source](https://blog.omgmog.net/post/compressing-pdf-from-your-mac-or-linux-terminal-with-ghostscript/)

### 2. Convert pdf to jpg
Prerequisites
```
brew install imagemagick
brew install ghostscript
```


```
magick -density 150 input.pdf -quality 80 output.jpg
```

Change the **density** up to 300 or **quality** up to 100 to adjust the file size and quality you like

[Source](https://imagemagick.org/script/download.php)

### 3. Make pdf looks like scanned

Prerequisites
```
brew install imagemagick poppler
```


Run this automotor
- Download the automotor script from this github
https://github.com/Robihamanto/make-pdf-look-like-scanned

- Follow the instruction on ReadMe.md file to run the automotor on macOS.

[Source](https://github.com/Coderwelsch/make-pdf-look-like-scanned?tab=readme-ov-file)

Script behind
```
#!/bin/bash

set -e
export PATH=/usr/local/bin:$PATH
export PATH=/opt/homebrew/bin:$PATH

for file in "$@"; do
  base=${file%.pdf}
  base=$base"_scanned.pdf"

  # Split PDF into pages
  echo "Splitting $base into separate pages"
  pdfseparate "$file" /tmp/fake-scan-split-%04d.pdf

  # Loop over the pages
  for splitFile in /tmp/fake-scan-split-*.pdf; do
    splitFileBase=${splitFile%.pdf}
    splitFileScanned=$splitFileBase"_scanned.pdf"

    # Slightly rotate page, add a bit of noise and output a flat pdf
    convert -density 130 -trim -flatten "$splitFile" -attenuate 0.2 +noise Gaussian -rotate "$([ $((RANDOM % 2)) -eq 1 ] && echo -)0.$(($RANDOM % 8 + 1))" \( +clone -background black -shadow 30x5+5+5 \) +swap -background white -layers merge +repage "$splitFileScanned"
    echo "Output page $splitFileBase to $splitFileScanned"
  done

  # Combine the PDFs, add noise across the entire document, apply sharpening, convert to b&w, soften the blacks slightly
  convert -density 130 $(ls -rt /tmp/fake-scan-split-*_scanned.pdf) -attenuate 0.2 +noise Multiplicative -sharpen 0x1.0 -colorspace Gray +level 15%,100% "$base"
  echo "PDF re-combined to $base"

  # Remove all the temporary PDFs
  echo "Cleaning up"
  rm /tmp/fake-scan-split-*.pdf
done
```