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:
Also, this is the one-off script, gen-file.py, that created the 1000 line input file:
- Vasudev
- Vasudev Ram - Online Python training and programmingSignup to hear about new products and services I create.Posts about Python Posts about xtopdfMy ActiveState recipes
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.pyI ran it in the usual way with:
# 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()
$ 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 programmingSignup to hear about new products and services I create.Posts about Python Posts about xtopdfMy ActiveState recipes