Dynamic Columns Detection based on known table label

by Jimmy Chandra

HTML

<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min.js"></script>
<div id="result1">
    <canvas id="result1canvas"></canvas>
</div>
<div id="result2">
    <canvas id="result2canvas"></canvas>
</div>

JavaScript

var pdfViewModel = {
    dynamicColumnExtraction : true,
    dynamicColumns : [
        { columnText: 'Description', canonical: 'LineItem-Description' },
        { columnText: 'Qty', canonical: 'LineItem-SuppliedQuantity' },
        { columnText: 'Net Price', canonical: 'LineItem-TotalExcludingTax-Amount' },
        { columnText: 'Line Total', canonical: 'LineItem-TotalIncludingTax-Amount' }
    ],
    topAnchor: { text: 'Net Price', page: 1 },        
    bottomAnchor: { text: 'Subtotal', page: 1 },
    lineItemColumns : [],
    data: [
        /* Line Item labels */
        { page:  1, x1:  31, y1: 366, x2:  77, y2: 375, data: 'Description' },
        { page:  1, x1: 367, y1: 366, x2: 382, y2: 375, data: 'Qty' },
        { page:  1, x1: 401, y1: 366, x2: 440, y2: 375, data: 'Net Price' },
        { page:  1, x1: 483, y1: 366, x2: 523, y2: 375, data: 'Line Total' },
        
        /* Line Item data - Line 1 */
        { page:  1, x1:  31, y1: 380, x2:  86, y2: 390, data: 'Appointment' },
        { page:  1, x1:  86, y1: 380, x2:  89, y2: 390, data: '-' },
        { page:  1, x1:  91, y1: 380, x2: 196, y2: 390, data: 'Physiotherapy Treatment' },
        { page:  1, x1: 380, y1: 380, x2: 385, y2: 390, data: '5' },
        { page:  1, x1: 449, y1: 380, x2: 457, y2: 390, data: '£' },
        { page:  1, x1: 457, y1: 380, x2: 480, y2: 390, data: '55.00' },
        { page:  1, x1: 528, y1: 380, x2: 536, y2: 390, data: '£' },
        { page:  1, x1: 536, y1: 380, x2: 564, y2: 390, data: '55.00' },
        
        /* Line Item data - Line 2 */
        { page:  1, x1:  31, y1: 395, x2:  81, y2: 405, data: 'Assessment' },
        { page:  1, x1:  81, y1: 395, x2:  84, y2: 405, data: '-' },
        { page:  1, x1:  86, y1: 395, x2: 191, y2: 405, data: 'Physiotherapy Treatment' },
        { page:  1, x1: 380, y1: 395, x2: 385, y2: 405, data: '1' },
        { page:  1, x1: 444, y1: 395, x2: 452, y2: 405, data: '£' },
        { page:  1, x1: 452, y1: 395, x2: 480, y2: 405,...