Markdown to Epson Thermal Printer
Assumptions Software and Equipment
Software
- Ubuntu Linux
- Pandoc
- htmldoc
- Dropbox
Hardware
- Epson TM-T20II Thermal receipt printer (sponsored link)
- Receipt paper (80 mm wide) (sponsored link)
Your Mind (final requirements)
- You have a brain and use Google or other search engine for research
- You are familiar with Linux
- You have already installed the drivers for your printer
- You have already setup and configured Dropbox on your Linux server
- For this documentation effort, the Linux printer is named Epson
File Generation Steps
- Convert markdown to HTML
- Convert HTML to a pdf
- Print the PDF to a printer
There are three steps because printing HTML to a printer using the lp command will print the html code and not the result of the html. You can use pandoc to convert markdown to a PDF. I found that I had more control using htmldoc to generate the final printable PDF file. PDF is better than postscript because of file size.
Examples
- FILE.md is the markdown file
- FILE.html is the intermediate html document
- FILE.pdf is the final print ready file
- Epson is the CUPS printer name
- USERNAME is your user account on the Linux system
Convert Markdown to HTML using pandoc
[code lang="bash"] pandoc FILE.md \ -o FILE.html \ --wrap=preserve \ -f markdown \ -t html \ [/code]
Convert HTML to PDF
[code lang="text"] htmldoc -f FILE.pdf FILE.html \ --no-toc \ --no-title \ --no-numbered \ --header . \ --footer . \ --top 1mm \ --bottom 1mm \ --left 3.5mm \ --right 5mm \ --size 79.5x297mm \ --embedfonts \ --gray [/code]
Print to Epson TM-T20II Thermal Printer
[code lang="text"] lp -d Epson FILE.pdf [/code]
Automation
Write a script to convert markdown and print it
Script Location
/usr/local/bin/autoprint_markdown
Make sure the permissions are set to execute (chmod +x)
Script Contents
[code lang="bash"] #!/bin/sh fname="$1" if [ $(file -b --mime-type "$fname") != "text/plain" ] ; then exit 0 fi pandoc "$fname" -o "$fname.html" \ --wrap=preserve \ -f markdown \ -t html htmldoc -f "$fname".pdf "$fname.html" \ --no-toc \ --no-title \ --no-numbered \ --header . \ --footer . \ --top 5mm \ --bottom 5mm \ --left 5mm \ --right 5mm \ --size 80x297mm \ --embedfonts \ --gray lp -d Epson "$fname.pdf" chown USERNAME "$fname" chgrp USERNAME "$fname" chown USERNAME "$fname.html" chgrp USERNAME "$fname.html" chown USERNAME "$fname.pdf" chgrp USERNAME "$fname.pdf" mv "$fname" /home/USERNAME/Dropbox/IFTTT/markdown_complete/ mv "$fname.html" /home/USERNAME/Dropbox/IFTTT/markdown_complete/ mv "$fname.pdf" /home/USERNAME/Dropbox/IFTTT/markdown_complete/ find /home/USERNAME/Dropbox/IFTTT/markdown_complete/* -mtime +0 -exec rm {} \; [/code]
Set up incrontab entry
Script Location: incontab
/etc/incron.d/autoprint_markdown
Script Contents
[code lang="text"] /home/USERNAME/Dropbox/IFTTT/markdown_print/ IN_CLOSE_NOWRITE,IN_NO_LOOP /usr/local/bin/autoprint_markdown $@/$# [/code]
Restart icon.d
[code lang="text"] sudo service incron restart [/code]
Enjoy
Files dropped into the markdown folder will print!
I am using IFTTT to send files to a Dropbox folder monitored by my Linux system.