Extract text from pdfs that contain searchable pdf text. The module is wrapper that calls the pdftotext
command to perform the actual extraction
npm install --save pdf-text-extract
You will need the pdftotext
binary available on your path. There are packages available for many different operating systems
See https://github.com/nisaacson/pdf-extract#osx for how to install the pdftotext
command
extract(filePath, [options], [pdftotextcommand], callback)
Options and pdftotextcommand are not required.
var path = require('path')
var filePath = path.join(__dirname, 'test/data/multipage.pdf')
var extract = require('pdf-text-extract')
extract(filePath, function (err, pages) {
if (err) {
console.dir(err)
return
}
console.dir(pages)
})
The output will be an array of where each entry is a page of text. If you want just a string of all pages you can set the option to splitPages: false
.
var filePath = path.join(__dirname, 'test/data/multipage.pdf')
var extract = require('pdf-text-extract')
extract(filePath, { splitPages: false }, function (err, text) {
if (err) {
console.dir(err)
return
}
console.dir(text)
})
You can set the following options:
firstPage
: First page to extractlastPage
: Last page to extractresolution
: in dpi, as is specified by pdftotext -rcrop
: Should be an object { x:x, y:y, w:w, h:h }layout
: Should be eitherlayout
,raw
orhtmlmeta
. Default:layout
encoding
: Should be eitherUCS-2
,ASCII7
,Latin1
,UTF-8
,ZapfDingbats
orSymbol
. Default:UTF-8
eol
: End of line convention. One of either:unix
,dos
ormac
ownerPassword
: Owner password (for encrypted files)userPassword
: User password (for encrypted files)splitPages
: If true, the result will be an array of pages. Default: true.
If needed you can pass optional arguments to the extract function. These will be passed to the child_process.spawn
call.
var filePath = path.join(__dirname, 'test/data/multipage.pdf')
var extract = require('pdf-text-extract')
var options = {
cwd: "./"
}
extract(filePath, options, function (err, pages) {
if (err) {
console.dir(err)
return
}
console.dir('extracted pages', pages)
})
You can also override the command for pdftotext
if it is installed in a location that is not available in the PATH
environment variable
var filePath = path.join(__dirname, 'test/data/multipage.pdf')
var pdfToTextCommand = '/opt/bin/pdftotext'
var extract = require('pdf-text-extract')
var options = {
cwd: "./"
}
extract(filePath, options, pdfToTextCommand, function (err, pages) {
if (err) {
console.dir(err)
return
}
console.dir('extracted pages', pages)
})
ES6 promises are supported. You can now call .then(onFulfilled[, onRejected]):
var filePath = path.join(__dirname, 'test/data/multipage.pdf')
var Extract = require('../index.js')
var extract = new Extract(filePath)
extract.then(function (pages) {
console.dir('extracted pages', pages)
}).catch(function (err) {
console.error('error:', err)
})
npm install -g pdf-text-extract
Execute with the filePath as an argument. Output will be json-formatted array of pages
pdf-text-extract ./test/data/multipage.pdf
# outputs
# ['<page 1 content...>', '<page 2 content...>']
# install dev dependencies
npm install
# run tests
npm test