Friday, January 30, 2015

Twitter Adds Group Messaging and Native Video

By Vasudev Ram

Saw this via a tweet.

Should be interesting to check it out once ready. They say the group messaging feature will allow for messaging to small groups of up to 20 at a time. Could be useful for some applications.

- Vasudev Ram - Dancing Bison Enterprises

Signup to hear about my new software products.

Contact Page

Wednesday, January 28, 2015

HTML text to PDF with Beautiful Soup and xtopdf

By Vasudev Ram

Recently, I thought of getting the text from HTML documents and putting that text to PDF. So I did it :)

Here's how:

A demo program to show how to convert the text extracted from HTML 
content, to PDF. It uses the Beautiful Soup library, v4, to 
parse the HTML, and the xtopdf library to generate the PDF output.
Beautiful Soup is at:
xtopdf is at:
Guide to using and installing xtopdf:
Author: Vasudev Ram -
Copyright 2015 Vasudev Ram

import sys
from bs4 import BeautifulSoup
from PDFWriter import PDFWriter

def usage():
    sys.stderr.write("Usage: python " + sys.argv[0] + " html_file pdf_file\n")
    sys.stderr.write("which will extract only the text from html_file and\n")
    sys.stderr.write("write it to pdf_file\n")

def main():

    # Create some HTML for testing conversion of its text to PDF.
    html_doc = """
            Test file for HTMLTextToPDF
        This is text within the body element but outside any paragraph.
        This is a paragraph of text. Hey there, how do you do?
        The quick red fox jumped over the slow blue cow.
        This is another paragraph of text.
        Don't mind what it contains.
        What is mind? Not matter.
        What is matter? Never mind.
        This is also text within the body element but not within any paragraph.

    pw = PDFWriter("HTMLTextTo.pdf")
    pw.setFont("Courier", 10)
    pw.setHeader("Conversion of HTML text to PDF")
    pw.setFooter("Generated by xtopdf:")
    # Use method chaining this time.
    for line in BeautifulSoup(html_doc).get_text().split("\n"):

if __name__ == '__main__':

The program uses the Beautiful Soup library for parsing and extracting information from HTML, and xtopdf, my Python library for PDF generation.
Run it with:
and the output will be in the file HTMLTextTo.pdf.
Screenshot below:

- Vasudev Ram - Python training and programming - Dancing Bison Enterprises

Read more of my posts about Python or read posts about xtopdf (latter is subset of former)

Signup to hear about my new software products or services.

Contact Page

Friday, January 23, 2015

PrettyTable to PDF is pretty easy with xtopdf

By Vasudev Ram

"PrettyTable to PDF is pretty easy with xtopdf."

How's that for some alliteration? :)

PrettyTable is a Python library to help you generate nice tables with ASCII characters as the borders, plus alignment of text within columns, headings, padding, etc.

Excerpt from the site:

[ PrettyTable is a simple Python library designed to make it quick and easy to represent tabular data in visually appealing ASCII tables.
PrettyTable lets you control many aspects of the table, like the width of the column padding, the alignment of text within columns, which characters are used to draw the table border, whether you even want a border, and much more. You can control which subsets of the columns and rows are printed, and you can sort the rows by the value of a particular column.

PrettyTable can also generate HTML code with the data in a <table> structure. ]

I came across PrettyTable via this blog post:

11 Python Libraries You Might Not Know.

Then I thought of using it with my PDF creation toolkit, to generate such ASCII tables, but as PDF. Here's a program,, that shows how to do that:
A demo program to show how to convert the output generated 
by the PrettyTable library, to PDF, using the xtopdf toolkit 
for PDF creation from other formats.
Author: Vasudev Ram -
xtopdf is at:

Copyright 2015 Vasudev Ram

from prettytable import PrettyTable
from PDFWriter import PDFWriter

pt = PrettyTable(["City name", "Area", "Population", "Annual Rainfall"])
pt.align["City name"] = "l" # Left align city names
pt.padding_width = 1 # One space between column edges and contents (default)
pt.add_row(["Adelaide",1295, 1158259, 600.5])
pt.add_row(["Brisbane",5905, 1857594, 1146.4])
pt.add_row(["Darwin", 112, 120900, 1714.7])
pt.add_row(["Hobart", 1357, 205556, 619.5])
pt.add_row(["Sydney", 2058, 4336374, 1214.8])
pt.add_row(["Melbourne", 1566, 3806092, 646.9])
pt.add_row(["Perth", 5386, 1554769, 869.4])
lines = pt.get_string()

pw = PDFWriter('Australia-Rainfall.pdf')
pw.setFont('Courier', 12)
pw.setHeader('Demo of PrettyTable to PDF')
pw.setFooter('Demo of PrettyTable to PDF')
for line in lines.split('\n'):

You can run the program with:
$ python
And here is a screenshot of the output PDF in Foxit PDF Reader:

- Enjoy.

--- Posts about Python --- Posts about xtopdf ---

- Vasudev Ram - Dancing Bison Enterprises - Python programming and training

Signup to be informed about my new products or services.

Contact Page

Monday, January 19, 2015

Music video: Dire Straits - Walk of Life

By Vasudev Ram

An old favorite, listened to it again today. The video is good too.

Dire Straits

Dire Straits - Walk of Life:

- Vasudev Ram - Dancing Bison Enterprises

Sunday, January 18, 2015

Manas National Park, Assam, India

By Vasudev Ram

From Wikipedia, the free encyclopedia:

"Manas National Park or Manas Wildlife Sanctuary (Pron:ˈmʌnəs) (Assamese: মানস ৰাষ্ট্ৰীয় উদ্যান) is a National Park, UNESCO Natural World Heritage site, a Project Tiger Reserve, an Elephant Reserve and a Biosphere Reserve in Assam, India. Located in the Himalayan foothills, it is contiguous with the Royal Manas National Park[1] in Bhutan. The park is known for its rare and endangered endemic wildlife."

- Vasudev Ram - Dancing Bison Enterprises

Signup to hear about new products or services from me.

Contact Page