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()
def docx_to_pdf(infilename, outfilename): # Extract the text from the DOCX file object infile and write it to # a PDF file. try: infil = opendocx(infilename) except: print("Error opening infilename") #print "Exception: " + repr(e) + "\n" sys.exit(1) paragraphs = getdocumenttext(infil) pw = PDFWriter(outfilename) pw.setFont("Courier", 12) pw.setHeader("DOCXtoPDF - convert text in DOCX file to PDF") pw.setFooter("Generated by xtopdf and python-docx") wrapper = TextWrapper(width=70, drop_whitespace=False) # For Unicode handling. new_paragraphs = [] for paragraph in paragraphs: new_paragraphs.append(paragraph.encode("utf-8")) for paragraph in new_paragraphs: lines = wrapper.wrap(paragraph) for line in lines: pw.writeLine(line) pw.writeLine("") pw.savePage() pw.close()
def app(environ, start_response): path = environ['PATH_INFO'] method = environ['REQUEST_METHOD'] print "path:", path print "method:", method #response = 'This is the page for "{}"'.format(path) lines = [ "Jack and Jill went up the hill", "Humpty Dumpty sat on a wall,", "'You are old, Father William,' the young man said,", "Master of all masters" ] pdf_filename = "Nursery-rhymes-and-stories.pdf" pw = PDFWriter(pdf_filename) pw.setFont("Courier", 12) pw.setHeader("Excerpts from nursery rhymes and stories") pw.setFooter("Generated by xtopdf and basic_wsgi_pdf_server") for line in lines: pw.writeLine(line) pw.writeLine(" ") pw.close() with open(pdf_filename, "rb") as fil: response = fil.read() #start_response('200 OK', [('Content-type', 'text/html')]) start_response('200 OK', [('Content-type', 'application/pdf')]) return [response]
def app(environ, start_response): path = environ['PATH_INFO'] method = environ['REQUEST_METHOD'] print("path:", path) print("method:", method) #response = 'This is the page for "{}"'.format(path) lines = [ "Jack and Jill went up the hill", "Humpty Dumpty sat on a wall,", "'You are old, Father William,' the young man said,", "Master of all masters" ] pdf_filename = "Nursery-rhymes-and-stories.pdf" pw = PDFWriter(pdf_filename) pw.setFont("Courier", 12) pw.setHeader("Excerpts from nursery rhymes and stories") pw.setFooter("Generated by xtopdf and basic_wsgi_pdf_server") for line in lines: pw.writeLine(line) pw.writeLine(" ") pw.close() with open(pdf_filename, "rb") as fil: response = fil.read() #start_response('200 OK', [('Content-type', 'text/html')]) start_response('200 OK', [('Content-type', 'application/pdf')]) return [response]
def text_to_pdf(txt_filename): pw = PDFWriter(txt_filename + '.pdf') pw.setFont('Courier', 12) pw.setHeader('{} converted to PDF'.format(txt_filename)) pw.setFooter('PDF conversion by xtopdf: https://google.com/search?q=xtopdf') with open(txt_filename) as txt_fil: for line in txt_fil: pw.writeLine(line.strip('\n')) pw.savePage()
def text_to_pdf(txt_filename): pw = PDFWriter(txt_filename + '.pdf') pw.setFont('Courier', 12) pw.setHeader('{} converted to PDF'.format(txt_filename)) pw.setFooter( 'PDF conversion by xtopdf: https://google.com/search?q=xtopdf') with open(txt_filename) as txt_fil: for line in txt_fil: pw.writeLine(line.strip('\n')) pw.savePage()
def get_pdf(): pw = PDFWriter('hello-from-netius.pdf') pw.setFont('Courier', 10) pw.setHeader('PDF generated by xtopdf, a PDF library for Python') pw.setFooter('Using netius Python network library, at {}'.format(time.ctime())) pw.writeLine('Hello world! This is a test PDF served by Netius, ') pw.writeLine('a Python networking library; PDF created with the help ') pw.writeLine('of xtopdf, a Python library for PDF creation.') pw.close() pdf_fil = open('hello-from-netius.pdf', 'rb') pdf_str = pdf_fil.read() pdf_len = len(pdf_str) pdf_fil.close() return pdf_len, pdf_str
def pdf_book(): if request.method == 'GET': # Display the PDF book creation form. return ''' <form action="/pdf_book" method="post"> PDF file name: <input type="text" name="pdf_file_name" /> Header: <input type="text" name="header" /> Footer: <input type="text" name="footer" /> Content: <textarea name="content" rows="15" cols="50"></textarea> <input type="submit" value="Submit" /> </form> ''' else: # Create the PDF book from the posted form content. try: # Get the needed fields from the form. pdf_file_name = request.form['pdf_file_name'] header = request.form['header'] footer = request.form['footer'] content = request.form['content'] # Create a PDFWriter instance and set some of its fields. pw = PDFWriter(pdf_file_name) pw.setFont("Courier", 12) pw.setHeader(header) pw.setFooter(footer) # Get the content field. # Split it into paragraphs delimited by newlines. # Convert each paragraph into a list of lines of # maximum width 70 characters. # Print each line to the PDF file. paragraphs = content.split('\n') wrapper = TextWrapper(width=70, drop_whitespace=False) for paragraph in paragraphs: lines = wrapper.wrap(paragraph) for line in lines: pw.writeLine(line) pw.savePage() pw.close() return "OK. PDF book created in file " + pdf_file_name + ".\n" except Exception, e: traceback.print_stack() return "Error: PDF book not created.\n" + repr(e) + ".\n"
def pdf_book(): if request.method == 'GET': # Display the PDF book creation form. return ''' <form action="/pdf_book" method="post"> PDF file name: <input type="text" name="pdf_file_name" /> Header: <input type="text" name="header" /> Footer: <input type="text" name="footer" /> Content: <textarea name="content" rows="15" cols="50"></textarea> <input type="submit" value="Submit" /> </form> ''' else: # Create the PDF book from the posted form content. try: # Get the needed fields from the form. pdf_file_name = request.form['pdf_file_name'] header = request.form['header'] footer = request.form['footer'] content = request.form['content'] # Create a PDFWriter instance and set some of its fields. pw = PDFWriter(pdf_file_name) pw.setFont("Courier", 12) pw.setHeader(header) pw.setFooter(footer) # Get the content field. # Split it into paragraphs delimited by newlines. # Convert each paragraph into a list of lines of # maximum width 70 characters. # Print each line to the PDF file. paragraphs = content.split('\n') wrapper = TextWrapper(width=70, drop_whitespace=False) for paragraph in paragraphs: lines = wrapper.wrap(paragraph) for line in lines: pw.writeLine(line) pw.savePage() pw.close() return "OK. PDF book created in file " + pdf_file_name + ".\n" except Exception, e: traceback.print_stack() return "Error: PDF book not created.\n" + repr(e) + ".\n"
def main(): if len(sys.argv) < 3: usage(sys.argv[0]) sys.exit(0) try: pw = PDFWriter(sys.argv[1]) pw.setFont('Courier', 12) pw.setFooter('xtopdf: https://google.com/search?q=xtopdf') for line in fileinput.input(sys.argv[2:]): if fileinput.filelineno() == 1: pw.setHeader(fileinput.filename()) if fileinput.lineno() != 1: pw.savePage() pw.writeLine(line.strip('\n')) pw.savePage() pw.close() except Exception as e: print("Caught Exception: type: {}, message: {}".format(\ e.__class__, str(e)))
def main(): # Create some HTML for testing conversion of its text to PDF. html_doc = """ <html> <head> <title> Test file for HTMLTextToPDF </title> </head> <body> This is text within the body element but outside any paragraph. <p> This is a paragraph of text. Hey there, how do you do? The quick red fox jumped over the slow blue cow. </p> <p> This is another paragraph of text. Don't mind what it contains. What is mind? Not matter. What is matter? Never mind. </p> This is also text within the body element but not within any paragraph. </body> </html> """ pw = PDFWriter("HTMLTextTo.pdf") pw.setFont("Courier", 10) pw.setHeader("Conversion of HTML text to PDF") pw.setFooter("Generated by xtopdf: http://slid.es/vasudevram/xtopdf") # Use method chaining this time. for line in BeautifulSoup(html_doc).get_text().split("\n"): pw.writeLine(line) pw.savePage() pw.close()
def main(): # Create some HTML for testing conversion of its text to PDF. html_doc = """ <html> <head> <title> Test file for HTMLTextToPDF </title> </head> <body> This is text within the body element but outside any paragraph. <p> This is a paragraph of text. Hey there, how do you do? The quick red fox jumped over the slow blue cow. </p> <p> This is another paragraph of text. Don't mind what it contains. What is mind? Not matter. What is matter? Never mind. </p> This is also text within the body element but not within any paragraph. </body> </html> """ pw = PDFWriter("HTMLTextTo.pdf") pw.setFont("Courier", 10) pw.setHeader("Conversion of HTML text to PDF") pw.setFooter("Generated by xtopdf: http://slid.es/vasudevram/xtopdf") # Use method chaining this time. for line in BeautifulSoup(html_doc).get_text().split("\n"): pw.writeLine(line) pw.savePage() pw.close()
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()
# xlsxtopdf.py # program to conver xlsx file to pdf from openpyxl import load_workbook from PDFWriter import PDFWriter workbook = load_workbook('test.xlsx', guess_types=True, data_only=True) worksheet = workbook.active pw = PDFWriter('test.pdf') pw.setFont('Courier', 12) pw.setHeader('xlsxtopdf.py - convert xlsx file to pdf') pw.setFooter('generated using openpyxl and xtopdf') ws_range = worksheet.iter_rows('A1:H13') for row in ws_range: s = '' for cell in row: if cell.value is None: s += ' ' * 11 else: s += str(cell.value).rjust(10) + ' ' pw.writeLine(s) pw.savePage() pw.close()
by the PrettyTable library, to PDF, using the xtopdf toolkit for PDF creation from other formats. Author: Vasudev Ram - http://www.dancingbison.com xtopdf is at: http://slides.com/vasudevram/xtopdf 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'): pw.writeLine(line) pw.close()
# Insert a few rows of data into the stocks table. curs.execute("INSERT INTO stocks VALUES ('2006-01-05', 'BUY', 'RHAT', 100, 25.1)") curs.execute("INSERT INTO stocks VALUES ('2007-02-06', 'SELL', 'ORCL', 200, 35.2)") curs.execute("INSERT INTO stocks VALUES ('2008-03-07', 'HOLD', 'IBM', 300, 45.3)") conn.commit() # Create a namedtuple to represent stock rows. StockRecord = namedtuple('StockRecord', 'date, trans, symbol, qty, price') # Run the query to get the stocks data. curs.execute("SELECT date, trans, symbol, qty, price FROM stocks") # Create a PDFWriter and set some of its fields. pw = PDFWriter("stocks.pdf") pw.setFont("Courier", 12) pw.setHeader("SQLite data to PDF with named tuples") pw.setFooter("Generated by xtopdf - https://bitbucket.org/vasudevram/xtopdf") # Write header info. hdr_flds = [ str(hdr_fld).rjust(10) + " " for hdr_fld in StockRecord._fields ] hdr_fld_str = ''.join(hdr_flds) print_and_write(pw, '=' * len(hdr_fld_str)) print_and_write(pw, hdr_fld_str) print_and_write(pw, '-' * len(hdr_fld_str)) # Now loop over the fetched data and write it to PDF. # Map the StockRecord namedtuple's _make class method # (that creates a new instance) to all the rows fetched. for stock in map(StockRecord._make, curs.fetchall()): row = [ str(col).rjust(10) + " " for col in (stock.date, \ stock.trans, stock.symbol, stock.qty, stock.price) ]
# This examiner doesn't give anyone 100 marks :) marks = random.randint(40, 99) # Compute grade from marks. grade = grade_letters[(marks - 40) / 10] result = results[grade] columns = [id, name, marks, grade, result] # str.center returns a centered string of the given width. The default padding character is the space, # but it can be set by the user row = [ str(col).center(widths[idx]) for idx, col in enumerate(columns) ] data.append(row) # Set up the PDFWriter. pw = PDFWriter('student_grades.pdf') pw.setFont('Courier', 10) pw.setHeader('Student Grades Report - generated by xtopdf') pw.setFooter('xtopdf: http://slides.com/vasudevram/xtopdf') # Generate header and data rows as strings; output them to screen and PDF. separator = '-' * sum(widths) print_and_write(pw, separator) # Output headers header_strs = [ header.center(widths[idx]) for idx, header in enumerate(data.headers) ] print_and_write(pw, ''.join(header_strs)) print_and_write(pw, separator) # Output data for row in data: print_and_write(pw, ''.join(row))
# Extract the text from the DOCX file object infile and write it to # a PDF file. try: infil = opendocx(infilename) except Exception, e: print "Error opening infilename" print "Exception: " + repr(e) + "\n" sys.exit(1) paragraphs = getdocumenttext(infil) pw = PDFWriter(outfilename) pw.setFont("Courier", 12) pw.setHeader("DOCXtoPDF - convert text in DOCX file to PDF") pw.setFooter("Generated by xtopdf and python-docx") wrapper = TextWrapper(width=70, drop_whitespace=False) # For Unicode handling. new_paragraphs = [] for paragraph in paragraphs: new_paragraphs.append(paragraph.encode("utf-8")) for paragraph in new_paragraphs: lines = wrapper.wrap(paragraph) for line in lines: pw.writeLine(line) pw.writeLine("") pw.savePage()
# FirebirdToPDF.py # Author: Vasudev Ram - http://jugad2.blogspot.com # Demo program to show how to convert Firebird RDBMS data to PDF. # Uses xtopdf, Reportlab, Firebird RDBMS and fdb Python driver for Firebird. import fdb from PDFWriter import PDFWriter con = fdb.connect(dsn='localhost:/temp/firebird/test.fdb', user='******', password='******') cur = con.cursor() select_stmt = 'select * from contacts order by name desc' cur.execute(select_stmt) pw = PDFWriter("contacts.pdf") pw.setFont("Courier", 12) pw.setHeader("Firebird RDBMS data (contacts.fdb) to PDF") pw.setFooter("Generated by xtopdf using fdb Firebird driver for Python") for (id, name, address) in cur: print id, name, address pw.writeLine(str(id) + " " + name + " " + address) pw.close() # EOF
# define the query query = db.furniture # the above line shows an interesting property of PyDAL; it seems to # have some flexibility in how queries can be defined; in this case, # just saying db.table_name tells it to fetch all the rows # from table_name; there are other variations possible; I have not # checked out all the options, but the ones I have seem somewhat # intuitive. # run the query rows = db(query).select() # setup the PDFWriter pw = PDFWriter('furniture.pdf') pw.setFont('Courier', 10) pw.setHeader(' House Depot Stock Report - Furniture Division '.center(60)) pw.setFooter('Generated by xtopdf: http://google.com/search?q=xtopdf') pw.writeLine('=' * SEP) field_widths = (5, 10, 10, 12, 10) # print the header row pw.writeLine(''.join(header_field.center(field_widths[idx]) for idx, header_field in enumerate(('#', 'Name', 'Quantity', 'Unit price', 'Price')))) pw.writeLine('-' * SEP) # print the data rows for row in rows: # methinks the writeLine argument gets a little long here ... # the first version of the program was taller but thinner :)
curs.execute( "INSERT INTO stocks VALUES ('2007-02-06', 'SELL', 'ORCL', 200, 35.2)") curs.execute( "INSERT INTO stocks VALUES ('2008-03-07', 'HOLD', 'IBM', 300, 45.3)") conn.commit() # Create a namedtuple to represent stock rows. StockRecord = namedtuple('StockRecord', 'date, trans, symbol, qty, price') # Run the query to get the stocks data. curs.execute("SELECT date, trans, symbol, qty, price FROM stocks") # Create a PDFWriter and set some of its fields. pw = PDFWriter("stocks.pdf") pw.setFont("Courier", 12) pw.setHeader("SQLite data to PDF with named tuples") pw.setFooter( "Generated by xtopdf - https://bitbucket.org/vasudevram/xtopdf") # Write header info. hdr_flds = [ str(hdr_fld).rjust(10) + " " for hdr_fld in StockRecord._fields ] hdr_fld_str = ''.join(hdr_flds) print_and_write(pw, '=' * len(hdr_fld_str)) print_and_write(pw, hdr_fld_str) print_and_write(pw, '-' * len(hdr_fld_str)) # Now loop over the fetched data and write it to PDF. # Map the StockRecord namedtuple's _make class method # (that creates a new instance) to all the rows fetched.
""" CalendarToPDF.py Author: Vasudev Ram - www.dancingbison.com Copyright 2014 Vasudev Ram This is a demo program to generate PDF calendars. """ import sys import traceback from debug1 import debug1 import calendar from PDFWriter import PDFWriter try: cal = calendar.TextCalendar(calendar.SUNDAY) cal_str = cal.formatmonth(2014, 02, 4, 2) cal_lines = cal_str.split("\n") pw = PDFWriter("Calendar-February-2014.pdf") pw.setFont("Courier", 10) pw.setHeader("Calendar for February 2014") pw.setFooter("Generated by xtopdf: http://bit.ly/xtopdf") for line in cal_lines: if line != "": pw.writeLine(line) pw.close() print "Calendar generated." except Exception as e: traceback.print_exc() sys.exit(1)
25 031 19 00011001 EM End of Medium 26 032 1A 00011010 SUB Substitute 27 033 1B 00011011 ESC Escape 28 034 1C 00011100 FS File Separator 29 035 1D 00011101 GS Group Separator 30 036 1E 00011110 RS Record Separator 31 037 1F 00011111 US Unit Separator """ # Create and set some of the fiels of a PDF witer p = PDFWriter("ASCII-Table.pdf") p.setFont("Courier", 12) p.setHeader("ASCII Characters - 0 to 31") p.setFooter("Generated by xtopdf: http://slid.es/vasudevram/xtopdf") #write the column headings to output column_headings = [str(val).ljust(column_sizes[idx])\ for idx, val in enumerate(column_names)] p.writeLine(' '.join(column_headings)) #Split the string into lines for line in ascii_chars.split('\n')[1:-1]: #space-delimited fields l = line.split() l2 = l[0:5] + [' '.join(l[6:])] l3 = [str(val).ljust(column_sizes[idx]) \ for idx, val in enumerate(l2)]
by the PrettyTable library, to PDF, using the xtopdf toolkit for PDF creation from other formats. Author: Vasudev Ram - http://www.dancingbison.com xtopdf is at: http://slides.com/vasudevram/xtopdf 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'): pw.writeLine(line) pw.close()
25 031 19 00011001 EM End of Medium 26 032 1A 00011010 SUB Substitute 27 033 1B 00011011 ESC Escape 28 034 1C 00011100 FS File Separator 29 035 1D 00011101 GS Group Separator 30 036 1E 00011110 RS Record Separator 31 037 1F 00011111 US Unit Separator """ # Create and set some of the fiels of a PDF witer p = PDFWriter("ASCII-Table.pdf") p.setFont("Courier", 12) p.setHeader("ASCII Characters - 0 to 31") p.setFooter("Generated by xtopdf: http://slid.es/vasudevram/xtopdf") #write the column headings to output column_headings = [str(val).ljust(column_sizes[idx])\ for idx, val in enumerate(column_names)] p.writeLine(' '.join(column_headings)) #Split the string into lines for line in ascii_chars.split('\n')[1:-1]: #space-delimited fields l = line.split() l2 = l[0:5] + [' '.join(l[6:])] l3 = [str(val).ljust(column_sizes[idx]) \ for idx, val in enumerate(l2)]
def XMLtoPDFBook(): debug("Entered XMLtoPDFBook()") global sysargv # Get command-line arguments. xml_filename = get_xml_filename(sysargv) debug("xml_filename: " + xml_filename) pdf_filename = get_pdf_filename(sysargv) debug("pdf_filename: " + pdf_filename) # Parse the XML file. try: tree = ET.ElementTree(file=xml_filename) debug("tree = " + repr(tree)) except Exception: sys.stderr.write("Error: caught exception in ET.ElementTree(file)") sys.exit(1) # Get the tree root. root = tree.getroot() debug("root.tag = " + root.tag) if root.tag != "book": debug("Error: Root tag is not 'book'") sys.exit(1) # Initialize the table of contents list. toc = [] # Initialize the chapters list. chapters = [] # Traverse the tree, extracting needed data into variables. debug("-" * 60) for root_child in root: if root_child.tag != "chapter": debug("Error: root_child tag is not 'chapter'") sys.exit(1) chapter = root_child #debug(chapter.text) chapters.append(chapter.text) try: chapter_name = chapter.attrib['name'] except KeyError: chapter_name = "" toc.append(chapter_name) debug("-" * 60) # Create and set some fields of a PDFWriter. pw = PDFWriter(pdf_filename) pw.setFont("Courier", 12) pw.setFooter("Generated by XMLtoPDFBook. Copyright 2013 Vasudev Ram") # Write the TOC. pw.setHeader("Table of Contents") chapter_num = 0 debug("Chapter names") for chapter_name in toc: debug(chapter_name) chapter_num += 1 pw.writeLine(str(chapter_num) + ": " + chapter_name) pw.savePage() # Write the chapters. chapter_num = 0 for chapter in chapters: chapter_num += 1 pw.setHeader("Chapter " + str(chapter_num) + ": " + toc[chapter_num - 1]) lines = chapter.split("\n") for line in lines: pw.writeLine(line) pw.savePage() pw.close() debug("Exiting XMLtoPDFBook()")
25 031 19 00011001 EM End of Medium 26 032 1A 00011010 SUB Substitute 27 033 1B 00011011 ESC Escape 28 034 1C 00011100 FS File Separator 29 035 1D 00011101 GS Group Separator 30 036 1E 00011110 RS Record Separator 31 037 1F 00011111 US Unit Separator """ # Create and set some of the fields of a PDFWriter instance. pw = PDFWriter("ASCII-Table.pdf") pw.setFont("Courier", 12) pw.setHeader("ASCII Control Characters - 0 to 31") pw.setFooter("Generated by xtopdf: http://slid.es/vasudevram/xtopdf") # Write the column headings to the output. column_headings = [ str(val).ljust(column_widths[idx]) \ for idx, val in enumerate(column_names) ] pw.writeLine(' '.join(column_headings)) # Split the string into lines, omitting the first and last empty lines. for line in ascii_control_characters.split('\n')[1:-1]: # Split the line into space-delimited fields. lis = line.split() # Join the words of the Description back into one field, # since it was split due to having internal spaces.
22 026 16 00010110 SYN Synchronous Idle 23 027 17 00010111 ETB End of Transmit Block 24 030 18 00011000 CAN Cancel 25 031 19 00011001 EM End of Medium 26 032 1A 00011010 SUB Substitute 27 033 1B 00011011 ESC Escape 28 034 1C 00011100 FS File Separator 29 035 1D 00011101 GS Group Separator 30 036 1E 00011110 RS Record Separator 31 037 1F 00011111 US Unit Separator """ # Create and set some of the fields of a PDFWriter instance. pw = PDFWriter("ASCII-Table.pdf") pw.setFont("Courier", 12) pw.setHeader("ASCII Control Characters - 0 to 31") pw.setFooter("Generated by xtopdf: http://slid.es/vasudevram/xtopdf") # Write the column headings to the output. column_headings = [ str(val).ljust(column_widths[idx]) \ for idx, val in enumerate(column_names) ] pw.writeLine(' '.join(column_headings)) # Split the string into lines, omitting the first and last empty lines. for line in ascii_control_characters.split('\n')[1:-1]: # Split the line into space-delimited fields. lis = line.split() # Join the words of the Description back into one field, # since it was split due to having internal spaces.
id = str(i).zfill(2) name = 'Student-' + id # Let's grade them on the curve [1]. # This examiner doesn't give anyone 100 marks :) marks = random.randint(40, 99) # Compute grade from marks. grade = grade_letters[(marks - 40) / 10] result = results[grade] columns = [id, name, marks, grade, result] row = [str(col).center(widths[idx]) for idx, col in enumerate(columns)] data.append(row) # Set up the PDFWriter. pw = PDFWriter('student_grades.pdf') pw.setFont('Courier', 10) pw.setHeader('Student Grades Report - generated by xtopdf') pw.setFooter('xtopdf: http://slides.com/vasudevram/xtopdf') # Generate header and data rows as strings; output them to screen and PDF. separator = '-' * sum(widths) print_and_write(pw, separator) # Output headers header_strs = [ header.center(widths[idx]) for idx, header in enumerate(data.headers) ] print_and_write(pw, ''.join(header_strs)) print_and_write(pw, separator) # Output data
# FirebirdToPDF.py # Author: Vasudev Ram - http://jugad2.blogspot.com # Demo program to show how to convert Firebird RDBMS data to PDF. # Uses xtopdf, Reportlab, Firebird RDBMS and fdb Python driver for Firebird. import fdb from PDFWriter import PDFWriter con = fdb.connect(dsn='localhost:/temp/firebird/test.fdb', user='******', password='******') cur = con.cursor() select_stmt = 'select * from contacts order by name desc' cur.execute(select_stmt) pw = PDFWriter("contacts.pdf") pw.setFont("Courier", 12) pw.setHeader("Firebird RDBMS data (contacts.fdb) to PDF") pw.setFooter("Generated by xtopdf using fdb Firebird driver for Python") for (id, name, address) in cur: print id, name, address pw.writeLine(str(id) + " " + name + " " + address) pw.close() # EOF
# XLSXtoPDF.py # Program to convert the data from an XLSX file to PDF. # Uses the openpyxl library and xtopdf. # Author: Vasudev Ram - http://jugad2.blogspot.com # Copyright 2015 Vasudev Ram. from openpyxl import load_workbook from PDFWriter import PDFWriter workbook = load_workbook('fruits2.xlsx', guess_types=True, data_only=True) worksheet = workbook.active pw = PDFWriter('fruits2.pdf') pw.setFont('Courier', 12) pw.setHeader('XLSXtoPDF.py - convert XLSX data to PDF') pw.setFooter('Generated using openpyxl and xtopdf') ws_range = worksheet.iter_rows('A1:H13') for row in ws_range: s = '' for cell in row: if cell.value is None: s += ' ' * 11 else: s += str(cell.value).rjust(10) + ' ' pw.writeLine(s) pw.savePage() pw.close()
[ ['North', 'Desktop #1', 1000], ['South', 'Desktop #3', 1100], ['North', 'Laptop #7', 1200], ['South', 'Keyboard #4', 200], ['North', 'Mouse #2', 50], ['East', 'Tablet #5', 200], ['West', 'Hard disk #8', 500], ['West', 'CD-ROM #6', 150], ['South', 'DVD Drive', 150], ['East', 'Offline UPS', 250], ] pw = PDFWriter('SalesReport.pdf') pw.setFont('Courier', 12) pw.setHeader('Sales by Region') pw.setFooter('Using itertools.groupby and xtopdf') # Convenience function to both print to screen and write to PDF. def print_and_write(s, pw): print(s) pw.writeLine(s) # Set column headers. headers = ['Region', 'Item', 'Sale Value'] # Set column widths. widths = [ 10, 15, 10 ] # Build header string for report. header_str = ''.join([hdr.center(widths[ind]) \ for ind, hdr in enumerate(headers)]) print_and_write(header_str, pw)
# define the query query = db.furniture # the above line shows an interesting property of PyDAL; it seems to # have some flexibility in how queries can be defined; in this case, # just saying db.table_name tells it to fetch all the rows # from table_name; there are other variations possible; I have not # checked out all the options, but the ones I have seem somewhat # intuitive. # run the query rows = db(query).select() # setup the PDFWriter pw = PDFWriter('furniture.pdf') pw.setFont('Courier', 10) pw.setHeader( ' House Depot Stock Report - Furniture Division '.center(60)) pw.setFooter('Generated by xtopdf: http://google.com/search?q=xtopdf') pw.writeLine('=' * SEP) field_widths = (5, 10, 10, 12, 10) # print the header row pw.writeLine(''.join( header_field.center(field_widths[idx]) for idx, header_field in enumerate(('#', 'Name', 'Quantity', 'Unit price', 'Price')))) pw.writeLine('-' * SEP) # print the data rows
import sys from xlwings import Workbook, Sheet, Range, Chart from PDFWriter import PDFWriter # Create a connection with a new workbook. wb = Workbook() # Create the Excel data. # Column 1. Range('A1').value = 'Foo 1' Range('A2').value = 'Foo 2' Range('A3').value = 'Foo 3' # Column 2. Range('B1').value = 'Bar 1' Range('B2').value = 'Bar 2' Range('B3').value = 'Bar 3' pw = PDFWriter("xlwingsTo.pdf") pw.setFont("Courier", 10) pw.setHeader("Testing Excel conversion to PDF with xlwings and xtopdf") pw.setFooter( "xlwings: http://xlwings.org --- xtopdf: http://slid.es/vasudevram/xtopdf") for row in Range('A1..B3').value: s = '' for col in row: s += col + ' | ' pw.writeLine(s) pw.close()
def main(): '''Main program to test DBFReader class. ''' # check for right num. of args if (len(sys.argv) != 3): usage() sys.exit(1) # extract dbf and pdf filenames from args dbf_fn = sys.argv[1] pdf_fn = sys.argv[2] # create and open the DBFReader instance dr = DBFReader(dbf_fn) dr.open() # create the PDFWriter instance pw = PDFWriter(pdf_fn) # and set some of its fields # set the font pw.setFont("Courier", 10) # set the page header gen_datetime = time.asctime() pw.setHeader("Generated by DBFtoPDF: Input: " + dbf_fn + \ " At: " + gen_datetime) # set the page footer pw.setFooter("Generated by DBFtoPDF: Input: " + dbf_fn + \ " At: " + gen_datetime) # create the separator for logical grouping of output sep = "=" * 60 # get the DBF file header file_header = dr.read_dbf_file_header() # print a separator line pw.writeLine(sep) # print title for the overall output pw.writeLine("Information for DBF file: %s" % (dbf_fn)) # print a separator line pw.writeLine(sep) # print the file header section title pw.writeLine("") pw.writeLine("File Header Information:") # print a separator line pw.writeLine(sep) # setup labels for file header output lbl_dbf_ver = \ "DBF version (signature) : " lbl_last_update = \ "Date of last update (YY/MM/DD): " lbl_num_recs = \ "Number of data records : " lbl_hdr_len = \ "DBF header length in bytes : " lbl_rec_len = \ "DBF record length in bytes : " lbl_num_flds = \ "Number of fields in DBF file : " # print the file header metadata with labels pw.writeLine(lbl_dbf_ver + str(file_header['ver'])) pw.writeLine(lbl_last_update + file_header['last_update']) pw.writeLine(lbl_num_recs + str(file_header['num_recs'])) pw.writeLine(lbl_hdr_len + str(file_header['hdr_len'])) pw.writeLine(lbl_rec_len + str(file_header['rec_len'])) pw.writeLine(lbl_num_flds + str(file_header['num_flds'])) # print a separator line pw.writeLine(sep) # save current page pw.savePage() # print the field headers section title pw.writeLine("Field Header Information:") # print a separator line pw.writeLine(sep) # print labels for field headers output pw.writeLine("%3s%13s%7s%8s%10s" % \ ("#", "Field name", "Type", "Length", "Decimals")) # print a separator line pw.writeLine(sep) # get num. of fields from file header num_flds = file_header["num_flds"] # get the field headers field_headers = dr.read_dbf_field_headers() # extract individual lists from the field headers list of lists fld_nam, fld_typ, fld_len, fld_dec = ( field_headers[0], field_headers[1], field_headers[2], field_headers[3] ) fld_num = 0 # print the field headers metadata while (fld_num < num_flds): s1 = "%3s" % (fld_num + 1) s2 = "%13s" % (fld_nam[fld_num]) #s3 = "%4s" % (string.replace(fld_typ[fld_num], '\0', ' ')) , s3 = "%4s" % (fld_typ[fld_num]) s4 = "%5s" % (fld_len[fld_num]) s5 = "%7s" % (fld_dec[fld_num]) s = s1 + " " + s2 + " " + s3 + " " + s4 + " " + s5 pw.writeLine(s) fld_num = fld_num + 1 # print a separator line pw.writeLine(sep) # save current page pw.savePage() # position the DBFReader instance to start reading data records dr.reset() # print the data records section title pw.writeLine("DBF Data Records:") # print a separator line pw.writeLine(sep) # print the data records rec_num = 0 while (dr.has_next_record()): rec_num = rec_num + 1 # get next data record from the DBFReader r = dr.next_record() # convert it from a list to a human-friendly string fr = dbf_record_to_string(r) # the serial num. of the record s1 = "%7d:" % (rec_num) # the record itself s2 = "%s" % (fr) # serial num. + record s = s1 + " " + s2 # print the record pw.writeLine(s) # print a separator line pw.writeLine(sep) # save current page pw.savePage() # close the DBFReader dr.close() # close the PDFWriter pw.close()
def main(): '''Main program to test DBFReader class. ''' # check for right num. of args if (len(sys.argv) != 3): usage() sys.exit(1) # extract dbf and pdf filenames from args dbf_fn = sys.argv[1] pdf_fn = sys.argv[2] # create and open the DBFReader instance dr = DBFReader(dbf_fn) dr.open() # create the PDFWriter instance pw = PDFWriter(pdf_fn) # and set some of its fields # set the font pw.setFont("Courier", 10) # set the page header gen_datetime = time.asctime() pw.setHeader("Generated by DBFtoPDF: Input: " + dbf_fn + \ " At: " + gen_datetime) # set the page footer pw.setFooter("Generated by DBFtoPDF: Input: " + dbf_fn + \ " At: " + gen_datetime) # create the separator for logical grouping of output sep = "=" * 60 # get the DBF file header file_header = dr.read_dbf_file_header() # print a separator line pw.writeLine(sep) # print title for the overall output pw.writeLine("Information for DBF file: %s" % (dbf_fn)) # print a separator line pw.writeLine(sep) # print the file header section title pw.writeLine("") pw.writeLine("File Header Information:") # print a separator line pw.writeLine(sep) # setup labels for file header output lbl_dbf_ver = \ "DBF version (signature) : " lbl_last_update = \ "Date of last update (YY/MM/DD): " lbl_num_recs = \ "Number of data records : " lbl_hdr_len = \ "DBF header length in bytes : " lbl_rec_len = \ "DBF record length in bytes : " lbl_num_flds = \ "Number of fields in DBF file : " # print the file header metadata with labels pw.writeLine(lbl_dbf_ver + str(file_header['ver'])) pw.writeLine(lbl_last_update + file_header['last_update']) pw.writeLine(lbl_num_recs + str(file_header['num_recs'])) pw.writeLine(lbl_hdr_len + str(file_header['hdr_len'])) pw.writeLine(lbl_rec_len + str(file_header['rec_len'])) pw.writeLine(lbl_num_flds + str(file_header['num_flds'])) # print a separator line pw.writeLine(sep) # save current page pw.savePage() # print the field headers section title pw.writeLine("Field Header Information:") # print a separator line pw.writeLine(sep) # print labels for field headers output pw.writeLine("%3s%13s%7s%8s%10s" % \ ("#", "Field name", "Type", "Length", "Decimals")) # print a separator line pw.writeLine(sep) # get num. of fields from file header num_flds = file_header["num_flds"] # get the field headers field_headers = dr.read_dbf_field_headers() # extract individual lists from the field headers list of lists fld_nam, fld_typ, fld_len, fld_dec = (field_headers[0], field_headers[1], field_headers[2], field_headers[3]) fld_num = 0 # print the field headers metadata while (fld_num < num_flds): s1 = "%3s" % (fld_num + 1) s2 = "%13s" % (fld_nam[fld_num]) #s3 = "%4s" % (string.replace(fld_typ[fld_num], '\0', ' ')) , s3 = "%4s" % (fld_typ[fld_num]) s4 = "%5s" % (fld_len[fld_num]) s5 = "%7s" % (fld_dec[fld_num]) s = s1 + " " + s2 + " " + s3 + " " + s4 + " " + s5 pw.writeLine(s) fld_num = fld_num + 1 # print a separator line pw.writeLine(sep) # save current page pw.savePage() # position the DBFReader instance to start reading data records dr.reset() # print the data records section title pw.writeLine("DBF Data Records:") # print a separator line pw.writeLine(sep) # print the data records rec_num = 0 while (dr.has_next_record()): rec_num = rec_num + 1 # get next data record from the DBFReader r = dr.next_record() # convert it from a list to a human-friendly string fr = dbf_record_to_string(r) # the serial num. of the record s1 = "%7d:" % (rec_num) # the record itself s2 = "%s" % (fr) # serial num. + record s = s1 + " " + s2 # print the record pw.writeLine(s) # print a separator line pw.writeLine(sep) # save current page pw.savePage() # close the DBFReader dr.close() # close the PDFWriter pw.close()