hummus-recipe-th
Version:
A powerful PDF tool for NodeJS based on HummusJS
220 lines (185 loc) • 5.55 kB
Markdown
# Hummus Recipe
[](https://badge.fury.io/js/hummus-recipe)
[](https://travis-ci.org/chunyenHuang/hummusRecipe)
This is an easy recipe for [HummusJS](https://github.com/galkahana/HummusJS) with a high level class.
I hope this repo will bring more attentions from the community to help [HummusJS](https://github.com/galkahana/HummusJS) to grow faster.
Feel free to open issues to help us!
## Features
* Javascript with C++ library.
* High performance creation, modification and parsing of PDF files and streams.
* Easy to create and modify PDF files.
* Reusable components.
* Support Basic HTML elements to text
## Documentation
* [Hummus Recipe Documentation](https://chunyenhuang.github.io/hummusRecipe/Recipe.html)
## Instructions
* [GetStarted](#getstarted)
* [Coordinate System](#coordinate-system)
* [Create a new PDF](#create-a-new-pdf)
* [Modify an existing PDF](#modify-an-existing-pdf)
* [Append PDF](#append-pdf)
* [Insert PDF](#insert-pdf)
* [Overlay PDF](#overlay-pdf)
* [Split PDF](#split-pdf)
* [Encryption](#encryption)
## GetStarted
```bash
npm i hummus-recipe --save
```
## Coordinate System
In order to make things easier, I use `Left-Top` as center `[0,0]` instead of `Left-Bottom`.
You may write and edit the pdf like you write things on papers from the left top corner.
It is similar to the [Html Canvas](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/drawImage)
```javascript
pdfDoc
.text('start from here', 0, 0)
.text('next line', 0, 20)
.text('some other texts', 100, 100)
...
```
## Create a new PDF
```javascript
const HummusRecipe = require('hummus-recipe');
const pdfDoc = new HummusRecipe('new', '/output.pdf',{
version: 1.6,
author: 'John Doe',
title: 'Hummus Recipe',
subject: 'A brand new PDF'
});
pdfDoc
.createPage('letter-size')
.endPage()
.endPDF();
```
```javascript
const HummusRecipe = require('hummus-recipe');
const pdfDoc = new HummusRecipe('new', 'output.pdf');
pdfDoc
// 1st Page
.createPage('letter-size')
.circle('center', 100, 30, { stroke: '#3b7721', fill: '#eee000' })
.polygon([ [50, 250], [100, 200], [512, 200], [562, 250], [512, 300], [100, 300], [50, 250] ], {
color: [153, 143, 32],
stroke: [0, 0, 140],
fill: [153, 143, 32],
lineWidth: 5
})
.rectangle(240, 400, 50, 50, {
stroke: '#3b7721',
fill: '#eee000',
lineWidth: 6,
opacity: 0.3
})
.moveTo(200, 600)
.lineTo('center', 650)
.lineTo(412, 600)
.text('Welcome to Hummus-Recipe', 'center', 250, {
color: '066099',
fontSize: 30,
bold: true,
font: 'Helvatica',
align: 'center center'
})
.text('some text box', 450, 400, {
color: '066099',
fontSize: 20,
font: 'Courier New',
strikeOut: true,
highlight: {
color: [255, 0, 0]
},
textBox: {
width: 150,
lineHeight: 16,
padding: [5, 15],
style: {
lineWidth: 1,
stroke: '#00ff00',
fill: '#ff0000',
dash: [20, 20],
opacity: 0.1
}
}
})
.comment('Feel free to open issues to help us!', 'center', 100)
.endPage()
// 2nd page
.createPage('A4', 90)
.circle(150, 150, 300)
.endPage()
// end and save
.endPDF(()=>{ /* done! */ });
```
## Modify an existing PDF
```javascript
const HummusRecipe = require('hummus-recipe');
const pdfDoc = new HummusRecipe('input.pdf', 'output.pdf');
pdfDoc
// edit 1st page
.editPage(1)
.text('Add some texts to an existing pdf file', 150, 300)
.rectangle(20, 20, 40, 100)
.comment('Add 1st comment annotaion', 200, 300)
.image('/path/to/image.jpg', {width: 300, keepAspectRatio: true})
.endPage()
// edit 2nd page
.editPage(2)
.comment('Add 2nd comment annotaion', 200, 100)
.endPage()
// end and save
.endPDF();
```
## Append PDF
```javascript
const HummusRecipe = require('hummus-recipe');
const pdfDoc = new HummusRecipe('input.pdf', 'output.pdf');
const longPDF = '/longPDF.pdf';
pdfDoc
// just page 10
.appendPage(longPDF, 10)
// page 4 and page 6
.appendPage(longPDF, [4, 6])
// page 1-3 and 6-20
.appendPage(longPDF, [[1, 3], [6, 20]])
// all pages
.appendPage(longPDF)
.endPDF();
```
## Insert PDF
```javascript
const HummusRecipe = require('hummus-recipe');
const pdfDoc = new HummusRecipe('input.pdf', 'output.pdf');
pdfDoc
// insert page3 from longPDF to current page 2
.insertPage(2, '/longPDF.pdf', 3)
.endPDF();
```
## Overlay PDF
```javascript
const HummusRecipe = require('hummus-recipe');
const pdfDoc = new HummusRecipe('input.pdf', 'output.pdf');
pdfDoc
.overlay('/overlayPDF.pdf')
.endPDF();
```
## Split PDF
```javascript
const HummusRecipe = require('hummus-recipe');
const pdfDoc = new HummusRecipe('input.pdf');
const outputDir = path.join(__dirname, 'output');
pdfDoc
.split(outputDir, 'prefix')
.endPDF();
```
## Encryption
```javascript
const HummusRecipe = require('hummus-recipe');
const pdfDoc = new HummusRecipe('input.pdf', 'output.pdf');
pdfDoc
.encrypt({
userPassword: '123',
ownerPassword: '123',
userProtectionFlag: 4
})
.endPDF();
```