By Vasudev Ram
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:
- Enjoy.
- Vasudev Ram - Online Python training and consultingGet updates on my software products / ebooks / courses. Jump to posts: Python DLang xtopdfSubscribe to my blog by emailMy ActiveState recipesFlyWheel - Managed WordPress Hosting
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:
/**************************************************The D program is compiled as usual with:
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;
}
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.csvThen 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:
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, 3
$ read_csv | python StdinToPDF.py csv_output.pdfAnd here is a cropped view of the output as seen in Foxit PDF Reader:
Reading CSV data from file.
- Enjoy.
- Vasudev Ram - Online Python training and consultingGet updates on my software products / ebooks / courses. Jump to posts: Python DLang xtopdfSubscribe to my blog by emailMy ActiveState recipesFlyWheel - Managed WordPress Hosting