CSV => PDF
Here is another in my series of applications of xtopdf, my PDF creation toolkit for Python (xtopdf source here).
This xtopdf application is actually a pipeline (nothing Unix-specific though, will work on both *nix and Windows) - a D program reading CSV data and sending it to a Python program, which writes the data to PDF.
The D program, read_csv.d, reads CSV data from a .csv file, and writes it to standard output.
The Python program, StdinToPDF.py (which is part of the xtopdf toolkit), reads its standard input (which is redirected by the pipeline to come from the D program's standard output) and writes the data it reads, to PDF.
Here is the D program, read_csv.d:
/************************************************** File: read_csv.d Purpose: A program to read CSV data from a file and write it to standard output. Author: Vasudev Ram Date created: 2016-10-25 Copyright 2016 Vasudev Ram Web site: https://vasudevram.github.io Blog: http://jugad2.blogspot.com Product store: https://gumroad.com/vasudevram **************************************************/ import std.algorithm; import std.array; import std.csv; import std.stdio; import std.file; import std.typecons; int main() { try { stderr.writeln("Reading CSV data from file."); auto file = File("input.csv", "r"); foreach (record; file.byLine.joiner("\n").csvReader!(Tuple!(string, string, int))) { writefln("%s works as a %s and earns $%d per year", record[0], record[1], record[2]); } } catch (CSVException csve) { stderr.writeln("Caught CSVException: msg = ", csve.msg, " at row, col = ", csve.row, ", ", csve.col); } catch (FileException fe) { stderr.writeln("Caught FileException: msg = ", fe.msg); } catch (Exception e) { stderr.writeln("Caught Exception: msg = ", e.msg); } return 0; }The D program is compiled as usual with:
dmd read_csv.dI ran it first (only the D program) with an invalid CSV file (it has an extra comma at the start on line 3, which invalidates the data by making "Driver" be in the salary column position), and got the expected error message, which includes the row and column number of the place in the CSV file where the program encountered the error - this is useful for fixing the input data:
$ type input.csv Jack,Carpenter,40000 Tom,Blacksmith,50000 ,Jill,Driver,60000 $ read_csv Reading CSV data from file. Jack works as a Carpenter and earns $40000 per year Tom works as a Blacksmith and earns $50000 per year Caught CSVException: msg = Unexpected 'D' when converting from type string to type int at row, col = 3, 3Then I ran it again, in the regular way, this time with a valid CSV file, and as part of a pipeline, the other pipeline component being StdinToPDF:
$ read_csv | python StdinToPDF.py csv_output.pdf Reading CSV data from file.And here is a cropped view of the output as seen in Foxit PDF Reader:
- Enjoy.
- Vasudev Ram - Online Python training and consulting Get updates on my software products / ebooks / courses. Jump to posts: Python DLang xtopdf Subscribe to my blog by email My ActiveState recipes FlyWheel - Managed WordPress Hosting
No comments:
Post a Comment