{"course":{"slug":"vector-and-print","title":"Vectors, Logos and Things That Get Printed","url":"https://addaly.com/learn/vector-and-print","level":"beginner","track":"create"},"lesson":{"slug":"preflight-your-own-pdf","title":"Preflighting your own PDF, free","url":"https://addaly.com/learn/vector-and-print/preflight-your-own-pdf","position":59,"of":73,"minutes":9,"answer":"Run seven checks against the exported PDF rather than the design file (boxes, fonts, image ppi, ink coverage, separations, overprint simulation and structure) all of which poppler-utils and Ghostscript do for nothing.","keyIdea":"Run seven checks against the exported PDF rather than the design file (boxes, fonts, image ppi, ink coverage, separations, overprint simulation and structure) all of which poppler-utils and Ghostscript do for nothing, and none of which will catch a misspelled name."},"body":{"format":"markdown","text":"## Check the file you are sending, not the file you made\n\nThe design document is your intention. The PDF is the artefact. Every check in this lesson runs against the PDF, because that is what the press receives.\n\nYou do not need Acrobat Pro. Two free packages cover nearly everything: **poppler-utils** (`pdfinfo`, `pdffonts`, `pdfimages`, `pdftoppm`) and **Ghostscript**. Both install on Windows, macOS and Linux, and both run on a laptop that could not open Illustrator.\n\n## The seven checks\n\n**1. Page size and boxes.**\n\n```bash\npdfinfo -box job.pdf\n```\n\nConfirm TrimBox equals the agreed finished size and BleedBox extends past it. Previous lesson.\n\n**2. Fonts.**\n\n```bash\npdffonts job.pdf\n```\n\nEvery row must show `yes` under `emb`. A `no` means the font is referenced but not embedded, and the press will substitute. A six-letter prefix like `ABCDEF+` means a subset, which is normal and good. A font you did not choose appearing in the list means something substituted silently.\n\n**3. Image resolution.**\n\n```bash\npdfimages -list job.pdf\n```\n\nRead the `x-ppi` and `y-ppi` columns. Anything well below your target is a problem; anything enormous in pixel dimensions next to a small placed size means a clipped image was not cropped on export.\n\n**4. Colour and ink coverage.**\n\n```bash\ngs -q -o /dev/null -sDEVICE=inkcov job.pdf\n```\n\nYou get four numbers per page: C, M, Y, K coverage. A page you believe is mono showing cyan, magenta and yellow means your \"black\" is a four-colour build. A page showing coverage far above the press's ink limit needs attention.\n\n**5. Separations.**\n\n```bash\ngs -o sep-%02d.tif -sDEVICE=tiffsep job.pdf\n```\n\nOne TIFF per plate, spot plates named. If you expected two plates and get five, you have accidental spots or RGB that separated. Next lesson covers reading these.\n\n**6. Overprint.** Ghostscript can simulate it:\n\n```bash\ngs -o overprint.png -sDEVICE=png16m -dSimulateOverprint=true -r150 job.pdf\n```\n\nCompare against a normal render. Anything that disappears was set to overprint and should not have been. This catches the vanishing white object.\n\n**7. Structure.**\n\n```bash\nqpdf --check job.pdf\n```\n\nReports damage, broken cross-reference tables and recoverable errors before the RIP finds them.\n\n## A script you can keep\n\n```bash\n#!/bin/sh\nf=\"$1\"\necho \"== BOXES ==\";  pdfinfo -box \"$f\"\necho \"== FONTS ==\";  pdffonts \"$f\"\necho \"== IMAGES ==\"; pdfimages -list \"$f\"\necho \"== INK ==\";    gs -q -o /dev/null -sDEVICE=inkcov \"$f\"\necho \"== CHECK ==\";  qpdf --check \"$f\" 2>&1 | head -5\n```\n\nSave it as `preflight.sh`, make it executable, and run it on every file before you send one. Thirty seconds, and it has caught every failure in this module at least once.\n\n## The GUI options\n\n- **Scribus** has a built-in *Preflight Verifier* that runs before export and reports missing images, low resolution, overset text, non-embedded fonts and transparency in a flavour that forbids it. It is good and it is free.\n- **Acrobat Pro** has the most complete preflight available, with editable profiles and fixups.\n- **PDF24, Ghostscript front-ends and online validators** exist. Be careful about uploading a client's unreleased artwork to a free web service; read what the service says it does with your file, and default to local tools.\n\n## What preflight cannot tell you\n\nIt cannot tell you the phone number is wrong, the client's name is misspelled, the photograph is of the wrong building, or the price is out of date. Those are the errors that actually get reprinted, and the only defence is a human reading the proof.\n\nPrint the PDF at 100%, read every word out loud, and have somebody who did not design it read it too. Both of those catch things no software will.\n\n## Rendering a page to look at\n\nSometimes you want to see what the file contains rather than what a viewer chooses to show you.\n\n```bash\npdftoppm -r 300 -png -f 4 -l 4 job.pdf page\n```\n\nThat writes page 4 at 300 ppi as a PNG, rendered by poppler rather than by Acrobat. Open it in GIMP and zoom in on the small text, the hairlines and the edges of any shadow. Rendering artefacts that were hidden by a viewer's anti-aliasing become visible, and you are looking at something much closer to what the RIP will produce.\n\nFor a long document, render every page at a low resolution and flick through the images. Missing content, a page in the wrong orientation and an accidentally blank page all show up in a contact sheet faster than in a scroll through a viewer."},"check":{"question":"`pdffonts job.pdf` lists a font called `Helvetica` with `no` in the `emb` column, although the designer never used Helvetica. What does this most likely indicate?","options":[{"text":"The PDF was saved from an older application that always lists the base fonts, and it can safely be ignored.","correct":false,"tempting":"Base-14 fonts are only listed when the file references them. A referenced font that is not embedded is a real dependency, whatever wrote the file."},{"text":"Helvetica is one of the PDF base fonts, so it is resolved by the RIP and does not need embedding.","correct":false,"tempting":"The base-font mechanism exists, but relying on it means the press's own Helvetica substitute is used, with different metrics from whatever was intended."},{"text":"A font used in the document was unavailable and was silently substituted.","correct":true},{"text":"The font is embedded as a subset, and subset fonts are reported as not embedded because their names carry a prefix.","correct":false,"tempting":"Subsets report `yes` under `emb` and carry a six-letter prefix in the name; the two indicators are independent."}]},"prev":{"slug":"the-five-pdf-boxes","title":"The five rectangles inside a PDF","url":"https://addaly.com/learn/vector-and-print/the-five-pdf-boxes"},"next":{"slug":"reading-separations","title":"Reading separations, and the fifth plate you did not order","url":"https://addaly.com/learn/vector-and-print/reading-separations"},"authorship":"Founder and series editor: Dr Mustafa Mun. Written by AI models to a written standard. Exam keys checked blind by a second model: 3,665 of 3,666 agreed. Academic review invited.","review":{"status":"Draft, open for academic review"},"cite":"Addaly (2026) 'Preflighting your own PDF, free', in Vectors, Logos and Things That Get Printed. Edited by M. Mun. Addaly. Available at: https://addaly.com/learn/vector-and-print/preflight-your-own-pdf (Accessed: 13 October 2026).","licence":{"name":"CC BY-NC-SA 4.0","url":"https://creativecommons.org/licenses/by-nc-sa/4.0/"},"reader":{"schema":1,"title":"Preflighting your own PDF, free","courseTitle":"Vectors, Logos and Things That Get Printed","module":{"index":7,"slug":"the-handover","title":"The handover"},"answer":null,"keyIdea":"Run seven checks against the exported PDF rather than the design file (boxes, fonts, image ppi, ink coverage, separations, overprint simulation and structure) all of which poppler-utils and Ghostscript do for nothing, and none of which will catch a misspelled name.","hero":{"kind":"plate","image":null,"alt":null,"caption":null},"blocks":[{"t":"h2","id":"check-the-file-you-are-sending-not-the-file-you-made","runs":[{"text":"Check the file you are sending, not the file you made"}]},{"t":"p","runs":[{"text":"The design document is your intention. The PDF is the artefact. Every check in this lesson runs against the PDF, because that is what the press receives."}]},{"t":"p","runs":[{"text":"You do not need Acrobat Pro. Two free packages cover nearly everything: "},{"text":"poppler-utils","b":true},{"text":" ("},{"text":"pdfinfo","code":true},{"text":", "},{"text":"pdffonts","code":true},{"text":", "},{"text":"pdfimages","code":true},{"text":", "},{"text":"pdftoppm","code":true},{"text":") and "},{"text":"Ghostscript","b":true},{"text":". Both install on Windows, macOS and Linux, and both run on a laptop that could not open Illustrator."}]},{"t":"h2","id":"the-seven-checks","runs":[{"text":"The seven checks"}]},{"t":"p","runs":[{"text":"1. Page size and boxes.","b":true}]},{"t":"code","lang":"bash","label":"Bash","text":"pdfinfo -box job.pdf"},{"t":"p","runs":[{"text":"Confirm TrimBox equals the agreed finished size and BleedBox extends past it. Previous lesson."}]},{"t":"p","runs":[{"text":"2. Fonts.","b":true}]},{"t":"code","lang":"bash","label":"Bash","text":"pdffonts job.pdf"},{"t":"p","runs":[{"text":"Every row must show "},{"text":"yes","code":true},{"text":" under "},{"text":"emb","code":true},{"text":". A "},{"text":"no","code":true},{"text":" means the font is referenced but not embedded, and the press will substitute. A six-letter prefix like "},{"text":"ABCDEF+","code":true},{"text":" means a subset, which is normal and good. A font you did not choose appearing in the list means something substituted silently."}]},{"t":"p","runs":[{"text":"3. Image resolution.","b":true}]},{"t":"code","lang":"bash","label":"Bash","text":"pdfimages -list job.pdf"},{"t":"p","runs":[{"text":"Read the "},{"text":"x-ppi","code":true},{"text":" and "},{"text":"y-ppi","code":true},{"text":" columns. Anything well below your target is a problem; anything enormous in pixel dimensions next to a small placed size means a clipped image was not cropped on export."}]},{"t":"p","runs":[{"text":"4. Colour and ink coverage.","b":true}]},{"t":"code","lang":"bash","label":"Bash","text":"gs -q -o /dev/null -sDEVICE=inkcov job.pdf"},{"t":"p","runs":[{"text":"You get four numbers per page: C, M, Y, K coverage. A page you believe is mono showing cyan, magenta and yellow means your “black” is a four-colour build. A page showing coverage far above the press’s ink limit needs attention."}]},{"t":"p","runs":[{"text":"5. Separations.","b":true}]},{"t":"code","lang":"bash","label":"Bash","text":"gs -o sep-%02d.tif -sDEVICE=tiffsep job.pdf"},{"t":"p","runs":[{"text":"One TIFF per plate, spot plates named. If you expected two plates and get five, you have accidental spots or RGB that separated. Next lesson covers reading these."}]},{"t":"p","runs":[{"text":"6. Overprint.","b":true},{"text":" Ghostscript can simulate it:"}]},{"t":"code","lang":"bash","label":"Bash","text":"gs -o overprint.png -sDEVICE=png16m -dSimulateOverprint=true -r150 job.pdf"},{"t":"p","runs":[{"text":"Compare against a normal render. Anything that disappears was set to overprint and should not have been. This catches the vanishing white object."}]},{"t":"p","runs":[{"text":"7. Structure.","b":true}]},{"t":"code","lang":"bash","label":"Bash","text":"qpdf --check job.pdf"},{"t":"p","runs":[{"text":"Reports damage, broken cross-reference tables and recoverable errors before the RIP finds them."}]},{"t":"h2","id":"a-script-you-can-keep","runs":[{"text":"A script you can keep"}]},{"t":"code","lang":"bash","label":"Bash","text":"#!/bin/sh\nf=\"$1\"\necho \"== BOXES ==\";  pdfinfo -box \"$f\"\necho \"== FONTS ==\";  pdffonts \"$f\"\necho \"== IMAGES ==\"; pdfimages -list \"$f\"\necho \"== INK ==\";    gs -q -o /dev/null -sDEVICE=inkcov \"$f\"\necho \"== CHECK ==\";  qpdf --check \"$f\" 2>&1 | head -5"},{"t":"p","runs":[{"text":"Save it as "},{"text":"preflight.sh","code":true},{"text":", make it executable, and run it on every file before you send one. Thirty seconds, and it has caught every failure in this module at least once."}]},{"t":"h2","id":"the-gui-options","runs":[{"text":"The GUI options"}]},{"t":"ul","items":[[{"text":"Scribus","b":true},{"text":" has a built-in "},{"text":"Preflight Verifier","i":true},{"text":" that runs before export and reports missing images, low resolution, overset text, non-embedded fonts and transparency in a flavour that forbids it. It is good and it is free."}],[{"text":"Acrobat Pro","b":true},{"text":" has the most complete preflight available, with editable profiles and fixups."}],[{"text":"PDF24, Ghostscript front-ends and online validators","b":true},{"text":" exist. Be careful about uploading a client’s unreleased artwork to a free web service; read what the service says it does with your file, and default to local tools."}]]},{"t":"h2","id":"what-preflight-cannot-tell-you","runs":[{"text":"What preflight cannot tell you"}]},{"t":"p","runs":[{"text":"It cannot tell you the phone number is wrong, the client’s name is misspelled, the photograph is of the wrong building, or the price is out of date. Those are the errors that actually get reprinted, and the only defence is a human reading the proof."}]},{"t":"p","runs":[{"text":"Print the PDF at 100%, read every word out loud, and have somebody who did not design it read it too. Both of those catch things no software will."}]},{"t":"h2","id":"rendering-a-page-to-look-at","runs":[{"text":"Rendering a page to look at"}]},{"t":"p","runs":[{"text":"Sometimes you want to see what the file contains rather than what a viewer chooses to show you."}]},{"t":"code","lang":"bash","label":"Bash","text":"pdftoppm -r 300 -png -f 4 -l 4 job.pdf page"},{"t":"p","runs":[{"text":"That writes page 4 at 300 ppi as a PNG, rendered by poppler rather than by Acrobat. Open it in GIMP and zoom in on the small text, the hairlines and the edges of any shadow. Rendering artefacts that were hidden by a viewer’s anti-aliasing become visible, and you are looking at something much closer to what the RIP will produce."}]},{"t":"p","runs":[{"text":"For a long document, render every page at a low resolution and flick through the images. Missing content, a page in the wrong orientation and an accidentally blank page all show up in a contact sheet faster than in a scroll through a viewer."}]}],"check":{"question":[{"text":"pdffonts job.pdf","code":true},{"text":" lists a font called "},{"text":"Helvetica","code":true},{"text":" with "},{"text":"no","code":true},{"text":" in the "},{"text":"emb","code":true},{"text":" column, although the designer never used Helvetica. What does this most likely indicate?"}],"options":[{"text":[{"text":"The PDF was saved from an older application that always lists the base fonts, and it can safely be ignored."}],"correct":false,"tempting":[{"text":"Base-14 fonts are only listed when the file references them. A referenced font that is not embedded is a real dependency, whatever wrote the file."}]},{"text":[{"text":"Helvetica is one of the PDF base fonts, so it is resolved by the RIP and does not need embedding."}],"correct":false,"tempting":[{"text":"The base-font mechanism exists, but relying on it means the press’s own Helvetica substitute is used, with different metrics from whatever was intended."}]},{"text":[{"text":"A font used in the document was unavailable and was silently substituted."}],"correct":true,"tempting":null},{"text":[{"text":"The font is embedded as a subset, and subset fonts are reported as not embedded because their names carry a prefix."}],"correct":false,"tempting":[{"text":"Subsets report "},{"text":"yes","code":true},{"text":" under "},{"text":"emb","code":true},{"text":" and carry a six-letter prefix in the name; the two indicators are independent."}]}],"order":[3,2,0,1],"why":null},"prev":{"slug":"the-five-pdf-boxes","title":"The five rectangles inside a PDF","minutes":8},"next":{"slug":"reading-separations","title":"Reading separations, and the fifth plate you did not order","minutes":8}}}