I have a PDF that I want to show to someone without giving them the ability to copy it. One possible way would be to convert pages to images, then these back into a PDF. How can I use convert or pdftk or otherwise script? Not GUI.
5 Answers
Imagemagick rasterizes everything. You could simply do:
convert -density 200 input.pdf output.pdfOf course the recipient might decide to run an OCR program on your file. The density parameter sets the resolution expressed as PPI.
PDF to Image
The poppler-utils packages includes the pdftoppm utility, capable of converting PDF files to either ppm, png or jpeg format:
pdftoppm -png file.pdf prefixThis will make files name prefix-X.extension where X is the page number (each file outputted will be one page of the PDF converted) and where extension is whatever output type you choose.
By default the resolution is 150dpi. You can increase the resolution (for higher quality output) by using this command:
pdftoppm -rx 300 -ry 300 -extension file.pdf prefixAnd to print only one page, do:
pdftoppm -f N -singlefile -extension file.pdf prefixwhere N is the page number, starting with 1.
This method is a lot faster and less clunky than using the imagemagick package as mentioned in other posts. Although you do have to use it to convert back.
Image to PDF
This requires the installation of the imagemagick package. To do this, do:
sudo apt-get install imagemagickThe imagemagick package has a utility called convert which will do just as it is named; convert. To make use of it in the way that you want, run it like so:
convert file.extension file.pdfThis will make a PDF of only that single page, though. To combine all outputs of the previous command for converting to images, use this command:
convert *.extension file.pdfThis will grab all files in the directory that you are in with the extension extension and convert them into a PDF file named file.pdf.
Note
I chose to format my answer in the way of two separate commands as to give the OP flexibility and understanding of the task that they are trying to complete, instead of one command linking the two. Of course, if that solution is better for them, then I encourage them to upvote/mark as answered that particular answer.
2I always use pdftoppm to convert pdf to png images. simply execute the following command
pdftoppm -f [startpage] -l [end page] -r [resolution (use 300 or 600) -png <pdf file location> [Prefix for your image files]and then execute
convert prefix-[number].png file.pdfbut there are programs that convert these images back into text. making your pdf uncopyable is very hard. You could add an encryption protection to prevent copying and printing which will make is (slightly) more difficult to copy and print your pdf file
I routinely have to perform the operation. This is the way I usually do it.
First assign name of file to variable fileToFlatten:
fileToFlatten=NameOfFile.pdfSince you need to be in the same folder as your file, type-ahead will work fine by pressing Tab. Especially useful if you have spaces for instance in your file name.
Then run one-liner script:
pdftoppm "$fileToFlatten" -r 150 tmpImage && img2pdf tmpImage*.ppm -o tmpBitmapPDF.pdf && rm tmpImage*.ppm && gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -sOutputFile="${fileToFlatten%????}"_btmp.pdf tmpBitmapPDF.pdf && rm tmpBitmapPDF.pdfSeveral temporary files are created and then deleted in the folder during the execution of the script.
You can adjust the dpi of the file with the -r 150 (could be 300 for more definition for instance).
The ghostscript command (gs) is used to add a layer of compression to the file. In my experience it reduces the file size significantly for a very limited cost in visible compression.
Yes, you can first convert your PDF pages to PNG/JPG images, then convert the PNG/JPG to PDF.
However, the person you send your file to can use an OCR service to get the text from your file.
3