项目作者: mantoni

项目描述 :
Convert images to PDF, extract PDF text and execute commands depending on the content
高级语言: JavaScript
项目地址: git://github.com/mantoni/pdfmatch.js.git
创建时间: 2017-02-22T20:38:20Z
项目社区:https://github.com/mantoni/pdfmatch.js

开源协议:MIT License

下载


PDF Match

Convert images to PDFs with Tesseract, extract PDF text with
pdftotext and execute commands depending on the content. The purpose is to
scan paperwork, generate a PDF with text overlay and apply a set of rules to
rename and move the PDF.

Usage

The pdfmatch command is used like this:

  1. pdfmatch [options] source.{pdf,jpeg,tif,...} [target.pdf]
  2. Options:
  3. --config Use the given config file
  4. --delete Remove source file if match was found and command executed
  5. --debug Don't create the PDF or execute commands, but print the text
  6. -l Use the given language(s), overrides the configured "lang"

If no config file is specified, pdfmatch will look for a file named
pdfmatch.json in the current directory.

If the source file is a PDF, the text is extracted with pdftotext and the
configured rules are applied.

If the source file is not a PDF, it is expected to be an image and is converted
to a PDF with searchable text using tesseract. If no target file is given,
the base name of the image is used for the PDF. In a second step, the text is
extracted with pdftotext and the configured rules are applied.

The configuration file can specify the language(s) to use with tesseract and
a set of rules to apply. After the first match, the associated command is
executed and processing is stopped. If no match was found the no-match
command is executed.

Here is an example:

  1. {
  2. "rules": [{
  3. "matches": [{
  4. "invoiceDate": "Invoive Date: ${DATE}"
  5. }, {
  6. "invoiceDate": "Ausstellungsdatum: ${DATE}"
  7. }],
  8. "command": "mv ${file} ${invoiceDate.format('YYYY-MM-DD')}\\ invoice.pdf"
  9. }],
  10. "no-match": "mv ${file} ${now.format('YYYY-MM-DD_HHmmss')}.pdf"
  11. }

The configuration properties are:

  • lang: The language(s) to pass to Tesseract
  • rules: An array of rules to run, where each rule is an object with these
    properties:
    • match: A single match object or an array of match objects, passed to
      text-match
    • command: The command to execute, after substituting any JavaScript
      expressions
  • no-match: A default command to execute if no matching rule was found

The command can contain variables in the form ${...} where ... is a
JavaScript expression with access to the matched properties. After successful
substitution, the command is written to the console and executed using
child_process.execSync(command).

These special properties can be accessed in commands:

  • file: The PDF file
  • now: The current date as a moment object

Install

Installing Tesseract with brew:

  1. $ brew install tesseract --with-all-languages

Installing pdftotext (or download from
http://www.foolabs.com/xpdf/download.html):

  1. $ brew install Caskroom/cask/pdftotext

Installing this tool:

  1. $ npm install pdfmatch -g

Example setup

My working setup is a ~/Documents/Scans folder containing only my
pdfmatch.json configuration. The commands in the rules move the matched files
one level up:

  1. {
  2. "lang": "deu+eng",
  3. "rules": [{
  4. "match": {
  5. "company": "npm, Inc",
  6. "invoiceDate": "${DATE}"
  7. },
  8. "command": "mv ${file} ../${invoiceDate.format('YYYY-MM-DD')}\\ npm.pdf"
  9. }],
  10. "no-match": "mv ${file} ../${now.format('YYYY-MM-DD_HHmmss')}.pdf"
  11. }

AppleScript folder action

If you’re following the above example setup, there is an AppleScript folder
action in ./scripts which allows you to save or drop files in a special
folder and have pdfmatch invoked automatically. Follow the instructions in
the header comments on how to use it.

API

This module exposes an API if required as a node module:

  • processText(pdf_file, config, callback): Extract text from a PDF file and
    applies rules from the given configuration (see above).
  • processImage(image_file, pdf_file, config, callback): Converts an image to
    a PDF file and then calls processText with the result.

License

MIT