If you have ever tried to extract a table from a PDF invoice, you know the frustration. You select the rows, paste into Excel, and the result is a single column of concatenated text. Cell boundaries vanish. Numbers merge with labels. Multi-page tables split at random page breaks. Subtotals and tax lines end up scattered across the wrong rows.

Traditional approaches fall into two camps: OCR-based services that re-read the document as an image (slow, often inaccurate, and require uploading your files to a third-party server), or manual copy-paste followed by 30 minutes of cleanup in Excel. Neither is acceptable when you are processing invoices on a deadline.

PDFTable Extractor takes a different approach entirely. It parses the native text layer of your PDF directly in the browser using pdf.js, identifies table boundaries through column alignment analysis, separates distinct table structures, and lets you review every row before export. No OCR engine. No server-side processing. No account required.

In this walkthrough, we will process a real two-page supplier invoice containing three distinct table structures: a line-item table spanning both pages, a date/reference table, and an invoice summary with subtotals, GST, QST, and a signature row. The entire workflow takes under 30 seconds.

Si vous avez déjà essayé d'extraire un tableau d'une facture PDF, vous connaissez la frustration. Vous sélectionnez les lignes, collez dans Excel, et le résultat est une seule colonne de texte concaténé. Les limites de cellules disparaissent. Les chiffres fusionnent avec les étiquettes. Les tableaux multi-pages se coupent aux sauts de page aléatoires. Les sous-totaux et lignes de taxes se retrouvent éparpillés sur les mauvaises lignes.

Les approches traditionnelles se divisent en deux camps : les services basés sur l'OCR qui relisent le document comme une image (lents, souvent imprécis, et nécessitant le téléchargement de vos fichiers vers un serveur tiers), ou le copier-coller manuel suivi de 30 minutes de nettoyage dans Excel. Aucune de ces options n'est acceptable quand vous traitez des factures sous pression.

PDFTable Extractor adopte une approche complètement différente. Il analyse la couche de texte native de votre PDF directement dans le navigateur via pdf.js, identifie les limites des tableaux par analyse d'alignement de colonnes, sépare les structures de tableaux distinctes, et vous permet de revoir chaque ligne avant l'export. Pas de moteur OCR. Pas de traitement côté serveur. Pas de compte requis.

Dans ce guide, nous allons traiter une vraie facture fournisseur de deux pages contenant trois structures de tableaux distinctes : un tableau de postes couvrant les deux pages, un tableau de dates/références, et un récapitulatif de facture avec sous-totaux, TPS, TVQ et une ligne de signature. Le processus complet prend moins de 30 secondes.

The Source: A Real Multi-Page Invoice

Le document source : une vraie facture multi-pages

Our test document is a two-page supplier invoice. Page one contains the header block (vendor name, address, invoice number) followed by the beginning of a line-item table. Page two continues that same table and adds a totals block with subtotal, GST (5%), QST (9.975%), grand total, and a signature field. There is also a secondary table with date and reference columns that uses a completely different column structure.

Notre document de test est une facture fournisseur de deux pages. La première page contient le bloc d'en-tête (nom du fournisseur, adresse, numéro de facture) suivi du début d'un tableau de postes. La deuxième page continue ce même tableau et ajoute un bloc de totaux avec sous-total, TPS (5 %), TVQ (9,975 %), grand total et un champ de signature. Il y a aussi un tableau secondaire avec des colonnes de date et de référence utilisant une structure de colonnes complètement différente.

This is the kind of document that breaks every generic PDF-to-Excel converter: mixed table structures on the same page, continuation across page boundaries, and metadata rows (tax lines, signatures) interleaved with data rows.

C'est le type de document qui casse tous les convertisseurs génériques PDF vers Excel : des structures de tableaux mixtes sur la même page, une continuation à travers les limites de pages, et des lignes de métadonnées (lignes de taxes, signatures) entrelacées avec les lignes de données.

Original multi-page PDF invoice with mixed table structures
The source PDF. Two pages, three distinct table structures, tax calculations, and a signature block. A typical accounts payable document. Le PDF source. Deux pages, trois structures de tableaux distinctes, calculs de taxes et un bloc de signature. Un document typique de comptes fournisseurs.

Step 1: Upload and Automatic Table Detection

Étape 1 : Téléchargement et détection automatique des tableaux

Drop your PDF into PDFTable Extractor (or click to browse). The tool reads the file entirely in your browser using Mozilla's pdf.js library. No bytes leave your machine.

Déposez votre PDF dans PDFTable Extractor (ou cliquez pour parcourir). L'outil lit le fichier entièrement dans votre navigateur en utilisant la bibliothèque pdf.js de Mozilla. Aucun octet ne quitte votre machine.

Within seconds, the extraction engine performs several operations:

En quelques secondes, le moteur d'extraction effectue plusieurs opérations :

For our two-page invoice, the engine detected three separate tables with different column structures. Each is presented in its own tab, ready for individual review and export.

Pour notre facture de deux pages, le moteur a détecté trois tableaux distincts avec des structures de colonnes différentes. Chacun est présenté dans son propre onglet, prêt pour revue individuelle et export.

PDFTable detected three separate table structures from a single PDF
Three tables detected. The tab bar shows each table as a separate entity. Column counts differ between tables, confirming correct boundary detection. Trois tableaux détectés. La barre d'onglets montre chaque tableau comme une entité séparée. Le nombre de colonnes diffère entre les tableaux, confirmant une détection correcte des limites.
How boundary detection works under the hood Comment la détection des limites fonctionne en coulisses

PDFTable does not rely on visible gridlines or cell borders (many invoices have none). Instead, it analyzes the horizontal alignment of text elements across rows. When a group of consecutive rows share the same set of column positions, they belong to the same table. When the column pattern changes significantly (different number of columns, different x-offsets), the engine inserts a table break. This is what allows it to separate a 5-column line-item table from a 2-column date table on the same page.

PDFTable ne se fie pas aux lignes de quadrillage visibles ou aux bordures de cellules (beaucoup de factures n'en ont pas). Il analyse plutôt l'alignement horizontal des éléments de texte à travers les lignes. Quand un groupe de lignes consécutives partagent le même ensemble de positions de colonnes, elles appartiennent au même tableau. Quand le motif de colonnes change significativement (nombre de colonnes différent, décalages x différents), le moteur insère une rupture de tableau. C'est ce qui lui permet de séparer un tableau de postes à 5 colonnes d'un tableau de dates à 2 colonnes sur la même page.

Step 2: Row Classification and Manual Override

Étape 2 : Classification des lignes et contrôle manuel

Once the tables are extracted, PDFTable classifies each row into one of two categories:

Une fois les tableaux extraits, PDFTable classifie chaque ligne dans l'une des deux catégories :

This classification is performed automatically using pattern matching: the engine scans each row's cell values for keywords like "total", "subtotal", "tax", "GST", "QST", "signature", and numeric patterns consistent with percentage calculations. However, automatic classification is not always perfect. Some rows are ambiguous - a row labeled "Adjustment" might be a legitimate line item or a summary correction.

Cette classification est effectuée automatiquement par correspondance de motifs : le moteur scanne les valeurs de cellules de chaque ligne pour des mots-clés comme « total », « sous-total », « taxe », « TPS », « TVQ », « signature », et des motifs numériques cohérents avec des calculs de pourcentage. Cependant, la classification automatique n'est pas toujours parfaite. Certaines lignes sont ambiguës - une ligne étiquetée « Ajustement » peut être un poste légitime ou une correction de récapitulatif.

This is where the manual override comes in. Every row has a one-click toggle button. If the engine classified a data row as a summary row (or vice versa), you click the button and it switches instantly. The table preview updates in real time, so you can see exactly what your export will contain before downloading.

C'est là qu'intervient le contrôle manuel. Chaque ligne dispose d'un bouton de basculement en un clic. Si le moteur a classifié une ligne de données comme ligne de récapitulatif (ou inversement), vous cliquez sur le bouton et elle bascule instantanément. L'aperçu du tableau se met à jour en temps réel, pour que vous puissiez voir exactement ce que votre export contiendra avant le téléchargement.

PDFTable row classification with include/exclude controls on each row
Table 1: the main line-item table. Each row has a toggle button to move it between data and summary. Tax lines and subtotals have been automatically classified as summary rows. Tableau 1 : le tableau principal des postes. Chaque ligne a un bouton de basculement pour la déplacer entre données et récapitulatif. Les lignes de taxes et sous-totaux ont été automatiquement classifiés comme lignes de récapitulatif.

This level of control matters in practice. In our invoice, the engine correctly identified the subtotal, GST (5%), QST (9.975%), and grand total rows as summary lines - they should not appear as regular line items in an accounting import. But if your workflow requires those rows in the export (for example, to reconcile tax amounts), you can include them with a single click.

Ce niveau de contrôle a son importance en pratique. Dans notre facture, le moteur a correctement identifié les lignes de sous-total, TPS (5 %), TVQ (9,975 %) et grand total comme lignes de récapitulatif - elles ne devraient pas apparaître comme postes réguliers dans un import comptable. Mais si votre flux de travail nécessite ces lignes dans l'export (par exemple, pour rapprocher les montants de taxes), vous pouvez les inclure d'un seul clic.

Step 3: Multiple Table Structures, Cleanly Separated

Étape 3 : Structures de tableaux multiples, séparées proprement

One of the most common failures in PDF extraction is table merging. When a PDF contains two tables with different column counts on the same page, most extractors either merge them into one broken table (with misaligned cells) or miss the second table entirely.

L'un des échecs les plus courants dans l'extraction PDF est la fusion de tableaux. Quand un PDF contient deux tableaux avec des nombres de colonnes différents sur la même page, la plupart des extracteurs les fusionnent en un seul tableau cassé (avec des cellules désalignées) ou manquent entièrement le deuxième tableau.

PDFTable handles this correctly. Our invoice has a main line-item table with 5 columns and a secondary date/reference table with 2 columns. The engine detects the column structure shift and creates separate table entities. Each table gets its own tab, its own header row detection, and its own export.

PDFTable gère cela correctement. Notre facture a un tableau principal de postes avec 5 colonnes et un tableau secondaire de dates/références avec 2 colonnes. Le moteur détecte le changement de structure de colonnes et crée des entités de tableaux séparées. Chaque tableau obtient son propre onglet, sa propre détection d'en-tête et son propre export.

Second table extracted separately with different column structure
Table 2: a completely different column structure, detected and separated automatically. No column misalignment or data corruption. Tableau 2 : une structure de colonnes complètement différente, détectée et séparée automatiquement. Aucun désalignement de colonnes ni corruption de données.

The Invoice Summary Table: Totals, Taxes, and Signatures

Le tableau récapitulatif : totaux, taxes et signatures

The third table detected is the invoice summary block. This typically sits at the bottom of the last page and contains the subtotal, applicable taxes, grand total, and often a signature or approval field. These rows have a distinctive pattern: two columns (a label and an amount), with the label being a keyword like "Subtotal", "GST", "QST", or "Total Due".

Le troisième tableau détecté est le bloc récapitulatif de la facture. Il se situe généralement en bas de la dernière page et contient le sous-total, les taxes applicables, le grand total, et souvent un champ de signature ou d'approbation. Ces lignes ont un motif distinctif : deux colonnes (une étiquette et un montant), avec l'étiquette étant un mot-clé comme « Sous-total », « TPS », « TVQ », ou « Total dû ».

PDFTable recognizes this as a separate table entity and preserves its structure. The subtotal, tax lines, and total row are classified as summary rows by default, but the signature row is also captured. Nothing is lost or discarded - you control what gets included in the final export.

PDFTable reconnaît ceci comme une entité de tableau séparée et préserve sa structure. Le sous-total, les lignes de taxes et la ligne de total sont classifiés comme lignes de récapitulatif par défaut, mais la ligne de signature est aussi capturée. Rien n'est perdu ni rejeté - vous contrôlez ce qui est inclus dans l'export final.

Invoice summary table with subtotal, GST, QST, total, and signature row
Table 3: the invoice summary. Subtotal, GST (5%), QST (9.975%), grand total, and signature field - all extracted as structured cells. Tableau 3 : le récapitulatif de facture. Sous-total, TPS (5 %), TVQ (9,975 %), grand total et champ de signature - le tout extrait en cellules structurées.

Step 4: Export to Professionally Formatted Excel

Étape 4 : Export vers Excel avec formatage professionnel

Once you have reviewed and adjusted the row classifications, click the Export to Excel button. PDFTable generates a .xlsx file using the xlsx-js-style library (a fork of SheetJS with styling support). The export is not a raw data dump. It produces a properly formatted Excel table with:

Une fois que vous avez revu et ajusté les classifications de lignes, cliquez sur le bouton Exporter vers Excel. PDFTable génère un fichier .xlsx en utilisant la bibliothèque xlsx-js-style (un fork de SheetJS avec support du style). L'export n'est pas un vidage de données brut. Il produit un tableau Excel correctement formaté avec :

Professionally formatted Excel export with autofilter, banded rows, and styled headers
Excel export of Table 1. AutoFilter enabled, banded rows, styled headers, auto-sized columns. Ready for sharing or archiving. Export Excel du Tableau 1. Filtre automatique activé, lignes alternées, en-têtes stylisés, colonnes auto-dimensionnées. Prêt pour partage ou archivage.

Each table exports independently. You do not get a single sheet with all tables concatenated together. Table 1 exports as its own file, Table 2 as its own file, and so on. This means your line-item table, date table, and summary table each produce a clean, self-contained .xlsx file.

Chaque tableau s'exporte indépendamment. Vous n'obtenez pas une seule feuille avec tous les tableaux concaténés ensemble. Le Tableau 1 s'exporte dans son propre fichier, le Tableau 2 dans le sien, et ainsi de suite. Cela signifie que votre tableau de postes, votre tableau de dates et votre tableau récapitulatif produisent chacun un fichier .xlsx propre et autonome.

Second table exported to Excel independently with its own column structure
Excel export of Table 2. The date/reference table exported separately with its own column structure and formatting. Export Excel du Tableau 2. Le tableau de dates/références exporté séparément avec sa propre structure de colonnes et son propre formatage.

Under the Hood: How PDFTable Differs from OCR-Based Extractors

Sous le capot : comment PDFTable se distingue des extracteurs basés sur l'OCR

Most PDF table extraction tools follow one of two architectures:

La plupart des outils d'extraction de tableaux PDF suivent l'une de deux architectures :

ApproachHow it worksLimitations
OCR-based (Tabula, Camelot, cloud APIs)Renders the PDF as an image, then uses optical character recognition to detect text positionsSlow, error-prone on complex layouts, requires server-side processing or Python runtime
Text-layer parsing (PDFTable)Reads the native text objects embedded in the PDF with their exact coordinatesOnly works on PDFs with embedded text (not scanned images). Faster and more accurate for digital-native documents.
ApprocheFonctionnementLimitations
Basée sur l'OCR (Tabula, Camelot, API cloud)Rend le PDF comme une image, puis utilise la reconnaissance optique de caractères pour détecter les positions du texteLent, sujet aux erreurs sur les mises en page complexes, nécessite un traitement côté serveur ou un environnement Python
Analyse de la couche texte (PDFTable)Lit les objets texte natifs intégrés dans le PDF avec leurs coordonnées exactesFonctionne uniquement sur les PDF avec texte intégré (pas les images scannées). Plus rapide et plus précis pour les documents natifs numériques.

Because PDFTable works with the native text layer, it has access to exact character positions (to the sub-pixel level), font sizes, and font weights. This means column detection is based on precise coordinate clustering rather than visual approximation, which is why it can separate two tables with different column counts on the same page without merging them.

Puisque PDFTable travaille avec la couche texte native, il a accès aux positions exactes des caractères (au niveau du sous-pixel), aux tailles de police et aux graisses de police. Cela signifie que la détection des colonnes est basée sur un regroupement précis de coordonnées plutôt qu'une approximation visuelle, ce qui explique pourquoi il peut séparer deux tableaux avec des nombres de colonnes différents sur la même page sans les fusionner.

100% client-side processing. Your invoices never leave your browser. Traitement 100 % côté client. Vos factures ne quittent jamais votre navigateur.

PDFTable runs entirely in JavaScript using Mozilla's pdf.js for PDF parsing and SheetJS for Excel generation. There is no backend server, no API call, no analytics tracking on your file content. Your financial documents stay on your machine at all times. This makes PDFTable compliant with data residency requirements by default - there is nothing to configure because there is nowhere for data to go.

PDFTable fonctionne entièrement en JavaScript en utilisant pdf.js de Mozilla pour l'analyse PDF et SheetJS pour la génération Excel. Il n'y a pas de serveur backend, pas d'appel API, pas de suivi analytique sur le contenu de vos fichiers. Vos documents financiers restent sur votre machine en permanence. Cela rend PDFTable conforme aux exigences de résidence des données par défaut - il n'y a rien à configurer car il n'y a nulle part où les données pourraient aller.

Common Use Cases for PDF Table Extraction

Cas d'utilisation courants pour l'extraction de tableaux PDF

While this walkthrough focused on an accounts payable invoice, PDFTable handles a wide range of tabular PDF documents:

Bien que ce guide se soit concentré sur une facture fournisseur, PDFTable gère une large gamme de documents PDF tabulaires :

Summary: What We Extracted in Under 30 Seconds

Résumé : ce que nous avons extrait en moins de 30 secondes

Starting from a two-page supplier invoice, PDFTable Extractor performed the following in a single upload:

À partir d'une facture fournisseur de deux pages, PDFTable Extractor a effectué les opérations suivantes en un seul téléchargement :

Try PDFTable Extractor for Free

Upload any PDF with tables. Extract, review, and export to Excel in seconds. No sign-up, no cloud upload, 100% private.

Essayez PDFTable Extractor gratuitement

Téléchargez n'importe quel PDF contenant des tableaux. Extrayez, révisez et exportez vers Excel en quelques secondes. Pas d'inscription, pas de téléchargement cloud, 100 % privé.