Quick and dirty PDF Reports for Plain Text Accounting - Part 2
Previously I wrote about how to generate PDF reports for Plain Text Accounting. The post was a tad on Org mode fanboy side in that it relies heavily on org-mode to generate the PDF.
If you are willing however to compromise somewhat in the looks department and don’t mind a whiff of old school nostalgia then you can produce PDF reports even simpler.
First of you probably need to install a few tools:
enscript- is used to generate Postscript from the output of
hledger. ps2pdf- will convert above Postscript to PDF.
iconv- unless your journal only contains ASCII you most likely
need
iconvasenscriptpredates Unicode and cannot handle it (yes it is that old). So we need to convert thehledgeroutput to ISO-8859-1 for example. pdftk- Finally we will combine all resulting PDF files into one with the help of the PDF Toolkit.
The basic command to generate a single PDF report is as follows (again we’ll use the demo.journal from the hledger web site):
$ hledger balancesheet -f demo.journal | \
iconv -c -f utf-8 -t ISO-8859-1 | \
enscript -b 'Balancesheet' -o - | \
ps2pdf - balancesheet.pdf
This generates a hledger report first, encodes it to ISO-8859-1, renders it as Postscript and finally converts the result to PDF and stores it in a file.
Now pack this into a Makefile to generate all the reports that you need for your financial statement.
LEDGER=hledger
JOURNAL=demo.journal
ICONV=iconv -c -f utf-8 -t ISO-8859-1
REPORTS= incomestatement.pdf balancesheet.pdf register.pdf all_transactions.pdf
financial_statement.pdf: ${REPORTS}
pdftk $^ cat output $@
incomestatement.pdf: ${JOURNAL}
${LEDGER} incomestatement -f $< | ${ICONV} | enscript -b 'Incomestatement' -o - | ps2pdf - $@
balancesheet.pdf: ${JOURNAL}
${LEDGER} balancesheet -f $< | ${ICONV} | enscript -b 'Balancesheet' -o - | ps2pdf - $@
register.pdf: ${JOURNAL}
${LEDGER} register Asset:Bank -w 91 -f $< | ${ICONV} | enscript -b 'Register' -o - | ps2pdf - $@
all_transactions.pdf: ${JOURNAL}
${LEDGER} print -x -f $< | ${ICONV} | enscript -b 'All Transactions||Page $$% of $$=' -o - | ps2pdf - $@
.PHONY: clean
clean:
rm -f ${REPORTS} financial_statement.pdf
The generated PDF looks decent enough. Maybe not for a glossy annual report but certainly good enough to hand over to your accountant for approval.