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.pyto 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
1 comment:
Oops, error in gen-file.py.
fil.close()
should not be there, because the with statement (context manager) will close the file after the body of the with finishes running.
Post a Comment