New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

pdf2tree

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

pdf2tree

Parse PDF and group elements based on enclosing lines.

latest
Source
npmnpm
Version
0.1.0
Version published
Maintainers
1
Created
Source

pdf2tree

Parse PDF and group elements based on enclosing lines. A node.js module that promisifies the pdf2json parser and structures the data in a way that is suitable for tables with merged cells.

How to use

After installing node.js you can use npm to add pdf2tree in your project folder.

npm install pdf2tree

When you create a new parser object as shown below, parameters are passed to the pdf2json parser.

import PDF2Tree from 'pdf2tree'
let pdf2tree = new PDF2Tree()

Then you can set the following pdf2tree specific parameters.

pdf2tree.maxStrokeWidth = 1
pdf2tree.maxGapWidth = 0.1

Finally, parsing can start either with a filepath or a buffer.

pdf2tree.loadPDF(PDFpath)
pdf2tree.parseBuffer(PDFbuffer)

The promise returns a JSON object as documented in pdf2json, but adds an additional Tree property. To simplify readability <str> represents an object like the ones pdf2json provides for every Page but each object only contains all elements within the lines, i.e. { ..., Texts: [ { x, y, ..., R: [ { T: 'str', ... } ] } ], ... }.

{
  ...
  Tree: [
    [
      <Page 1>,
      [
        [ <A>, <B>, <C>, <D> ],
        [ <X>, <1>, <2>, <3> ],
        [ 
          <Y>,
          [
            [ <5>, <6>, <7> ],
            [ <8>, <9> ],
          ]
        ]
      ]
    ],
    [
      <Page 2>,
      [
        [ <TITLE> ],
        [
          <Z>, 
          [
            [
              <F>,
              <G>,
              [
                [ <H> ],
                [ <I> ],
              ],
            ],
            [ <J>],
            [ <K>]
          ],
          <?>
        ]
      ]
    ]
  ]
}

For content structured like this:

Page 1

+---+---+---+---+
| A | B | C | D |
+---+---+---+---+
| X | 1 | 2 | 3 |
+---+---+---+---+
|   | 5 | 6 | 7 |
| Y +---+---+---+
|   | 8 |   9   |
+---+---+-------+

Page 2

+---+---+---+---+
|     TITLE     |
+---+---+---+---+
|   |   |   | H |
|   | F | G +---+
|   |   |   | I |
| Z +---+---+---+
|   | J |       |
|   +---+   ?   |
|   | K |       |
+---+---+-------+

If a cell is not rectangular or merges rows that the cell to the left did not also merge are not supported. This would require a data structure that allows traversing the neighborhood with .right or .below and can include loops for non-rectangular areas. It should be easier to fix those special cases after the parsing.

Keywords

pdf

FAQs

Package last updated on 13 May 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts