About

About

Scientist working on radiation physics in Japan Atomic Energy Agency's Center for Computational Science and e-Systems.

Spotted an error on this site?
Corrections appreciated, please email alex (at) alexmalins.com or leave a comment.

Blog

Updating the version of a port on MacPorts

This post broadly follows the MacPorts howto/Upgrade guide: https://trac.macports.org/wiki/howto/Upgrade

If you come across a piece of software on MacPorts where the version is out of date, here’s how to update it. First open up a terminal window and identify the port’s maintainer:

port info --maintainers <portname>

If the port has a maintainer, easiest is to send them a polite email requesting the port is brought up to date.

If the port has no maintainer (nomaintainer@macports.org), or allows open maintenance (openmaintainer@macports.org), you can upgrade the port manually yourself with the following steps. If successful, you can then submit a new ticket to http://trac.macports.org/ in order for the update to be propagated onto the MacPorts server for the benefit of other users.

First change directory into the port folder:

cd $(port dir <portname>)

Backup the port build file:

sudo cp Portfile Portfile.orig

Use a text editor to edit the software version in the Portfile to the latest version number (e.g. version 1.4.1 to 1.5):

sudo nano Portfile

If the Portfile revision entry is not set to 0, set it to 0 as this is the first revision for the updated version. Now download the source code of the latest version of the port and find its checksums with the following command:

sudo port -d checksum <portname>

Copy the checksums (rmd160 and sha256) that are printed out for the for the latest version and paste them into place over the old checksums in the Portfile. Similarly, if the Portfile contains a livecheck.md5 entry, fetch this for the latest version and propagate it into the Portfile:

sudo port -d livecheck <portname>

You can now compile and install the latest version on your local machine by:

sudo port -d install <portname>

If the compile is successful and the updated software functions correctly, you can then file an update. First create a diff file for the changes to the Portfile:

diff -u Portfile.orig Portfile | sudo tee <portname>.diff

Then file a new ticket at http://trac.macports.org/. Give the ticket a title like:

<portname> @<current_version>: update to <latest_version>

Cc in the email address coupled to the port which you identified at the beginning of this process. Attach the <portname>.diff file. All being well one of the MacPorts team will use your patch and update the port to the latest version on the MacPorts server within the following days.

Converting a scanned TIFF document to PDF and creating text searchable PDFs

You can follow these steps to create a text searchable PDF document if your scanner only outputs TIFF files. If your scanner creates PDF files but doesn’t perform OCR to make text searchable, skip to the last step.

Convert TIFF to PDF

ImageMagick comes with a command line tool magick to do this.

magick convert scanned.tiff scanned.pdf

Executing this command creates a PDF file from a TIFF created by a scanner.

Optional: Rotate the PDF Pages

Sometimes the scanned pages will need rotating to the correct orientation. Use PDFtk to rotate the pages. Rotating all the pages in the scanned PDF by 90º anti-clockwise is achieved with the following command:

pdftk scanned.pdf cat 1-endwest output rotated.pdf

Individual pages can be selected and rotated as necessary, see PDFtk examples.

Perform Optical Character Recognition

For this step I resort to a copy of Acrobat Pro.

It would have been nice if I had succeeded in achieving good quality output for this step using open source software. Solutions do exist, mainly using Tesseract to do OCR and then forming a new PDF file with a text searchable layer hidden underneath the scanned images. See e.g. Voelkel’s and OCRmyPDF solutions.

However despite reasonable stabs, for various reasons I couldn’t succeed with either. The quality of the OCR output I was getting from Tesseract was lower than Acrobat. Also Acrobat offers the advantage that it performs small rotations to the pages to make sure the text is horizontal. So eventually I gave up on the open source route and now use Acrobat.

Note Acrobat can perform OCR on any PDF file. This is very useful for making old journal articles text searchable if the download offered by the publisher is not.

 

[Edit: 24 August 2018 – Updated ImageMagick command “convert” to “magick convert”]

Remove pesky PDF title pages and other PDF tricks

PDFtk

PDFtk command to remove a title page

Taking out pages from PDF files, binding PDFs together, and removing PDF security. Here are a couple of free programmes to perform these tasks.

Taking out pages from a PDF

Sometimes PDFs contain a title page or blank pages that you might want to remove. PDFtk Server is a useful command line tool that can take pages out from a PDF file. To remove the title page from a PDF file, run the following command:

pdftk input.pdf cat 2-end output output.pdf

Set the pages you want to maintain within the document after the cat command, and change input.pdf and output.pdf to suit.

Merging PDF files

You may wish to combine a journal article with its supplementary information, or with comment letters and author responses. Again PDFtk can do this. To combine two pdf files into one:

pdftk input1.pdf input2.pdf cat output combined.pdf

PDFtk can also perform a host of other useful tasks – see its examples page.

Removing PDF Security

Sometimes PDF files come with encryption settings that prevent you from doing the above, or from performing OCR on the document. I find that QPDF works well for removing the security settings, even if you do not know the PDF password. To remove the security settings from a file run:

qpdf --decrypt input.pdf output.pdf

However QPDF does not always succeed. An alternative is to use a PDF printer driver to ‘print’ an unencrypted PDF. Examples of such software for Windows include CutePDF, Bullzip, PDFCreater etc. Preview on Mac will also ‘Export as PDF’. Ghostscript can also perform this task:

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf -c 
.setpdfwrite -f input.pdf

More Powerful Manipulation of PDFs

The python package pyPdf can be used to perform PDF file operations with the benefit of easy scripting ability. For instance when merging many hundreds of PDF sections of a larger document, each with a filename describing one part of the document (front matter, initial pages with Roman numerals, main pages…), I wrote a python script to merge the files in the correct order.

Edit 9th June 2015

Added ghostscript command to print to a new PDF file.