Quantcast
Channel: Planet Python
Viewing all articles
Browse latest Browse all 22462

Vasudev Ram: Code for recent post about PDF from a Python pipeline

$
0
0
By Vasudev Ram

In this recent post:

Generate PDF from a Python-controlled Unix pipeline ,

I forgot to include the code for the program PopenToPDF.py. Here it is now:
# PopenToPDF.py
# Demo program to read text from a shell pipeline using
# subprocess.Popen, and write the text to PDF using xtopdf.
# Author: Vasudev Ram
# Copyright (C) 2016 Vasudev Ram - http://jugad2.blogspot.com

import sys
import subprocess
from PDFWriter import PDFWriter

def error_exit(message):
sys.stderr.write(message + '\n')
sys.stderr.write("Terminating.\n")
sys.exit(1)

def main():
try:
# Create and set up a PDFWriter instance.
pw = PDFWriter("PopenTo.pdf")
pw.setFont("Courier", 12)
pw.setHeader("Use subprocess.Popen to read pipe and write to PDF.")
pw.setFooter("Done using selpg, xtopdf, Python and ReportLab, on Linux.")

# Set up a pipeline with nl and selpg such that we can read from its stdout.
# nl numbers the lines of the input.
# selpg extracts pages 3 to 5 from the input.
pipe = subprocess.Popen("nl -ba 1000-lines.txt | selpg -s3 -e5", \
shell=True, bufsize=-1, stdout=subprocess.PIPE,
stderr=sys.stderr).stdout

# Read from the pipeline and write the data to PDF, using the PDFWriter instance.
for idx, line in enumerate(pipe):
pw.writeLine(str(idx).zfill(8) + ": " + line)
except IOError as ioe:
error_exit("Caught IOError: {}".format(str(ioe)))
except Exception as e:
error_exit("Caught Exception: {}".format(str(e)))
finally:
pw.close()

main()
I ran it in the usual way with:
$ python PopenToPDF.py
to get the output shown in the previous post describing PopenToPDF.

Also, this is the one-off script, gen-file.py, that created the 1000 line input file:
with open("1000-lines.txt", "w") as fil:
for i in range(1000):
fil.write("This is a line of text.\n")
fil.close()

- Vasudev

- Vasudev Ram - Online Python training and programming

Signup to hear about new products and services I create.

Posts about Python  Posts about xtopdf

My ActiveState recipes


Viewing all articles
Browse latest Browse all 22462

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>