Global MuPDF methods#

print(...)#

Print arguments to stdout, separated by spaces and followed by a newline.

Arguments
  • ... – Arguments to print.

Example

var document = new Document("my_pdf.pdf");
print(document); // [object pdf_document]
write(...)#

Print arguments to stdout, separated by spaces.

Arguments
  • ... – Arguments to print.

repr(object)#

Format the object into a string with JavaScript syntax.

Example

var document = new Document("my_pdf.pdf");
repr(document); // "[userdata pdf_document]"
gc(report)#

Run the garbage collector to free up memory. Optionally report statistics on the garbage collection.

Arguments
  • reportBoolean If true then the results will be printed to stdout.

load(fileName)#

Load and execute script in fileName.

Arguments
  • fileNameString JavaScript file to load.

read(fileName)#

Read the contents of a file and return them as a UTF-8 decoded string.

Arguments
  • fileNameString.

readline()#

Read one line of input from stdin and return it as a string.

Returns

String.

require(module)#

Load a JavaScript module.

setUserCSS(userStyleSheet, usePublisherStyles)#

Set user styles and whether to use publisher styles when laying out reflowable documents.

Arguments
  • userStyleSheet – Link to CSS stylesheet file.

  • usePublisherStylesBoolean.

quit()#

Exit the shell.

Matrices and Rectangles#

These are not classes as such but array definitions. All dimensions are in points unless otherwise specified.

Matrices#

Matrices are simply 6-element arrays representing a 3-by-3 transformation matrix as:

/ a b 0 \
| c d 0 |
\ e f 1 /

This matrix is represented in JavaScript as [a,b,c,d,e,f].

Properties

Identity

The identity matrix, short hand for [1,0,0,1,0,0].

Methods

Scale(sx, sy)#

Returns a scaling matrix, short hand for [sx,0,0,sy,0,0].

Returns

[a,b,c,d,e,f].

Translate(tx, ty)#

Return a translation matrix, short hand for [1,0,0,1,tx,ty].

Returns

[a,b,c,d,e,f].

Rotate(theta)#

Return a rotation matrix, short hand for [cos(theta),sin(theta),-sin(theta),cos(theta),0,0].

Returns

[a,b,c,d,e,f].

Concat(a, b)#

Concatenate matrices a and b. Bear in mind that matrix multiplication is not commutative.

Returns

[a,b,c,d,e,f].

Rectangles#

Rectangles are 4-element arrays, specifying the minimum and maximum corners (typically upper left and lower right, in a coordinate space with the origin at the top left with descending y): [ulx,uly,lrx,lry].

If the minimum x coordinate is bigger than the maximum x coordinate, MuPDF treats the rectangle as infinite in size.

Colors#

Colors are specified as arrays with the appropriate number of components for the color space. Each number is a floating point between 0 and 1 for the color value.

Therefore colors are represented as an array of up to 4 component values.

For example:

  • In the DeviceCMYK color space a color would be [Cyan,Magenta,Yellow,Black]. A full magenta color would therefore be [0,1,0,0].

  • In the DeviceRGB color space a color would be [Red,Green,Blue]. A full green color would therefore be [0,1,0].

  • In the DeviceGray color space a color would be [Black]. A full black color would therefore be [1].

Color parameters#

This object is a dictionary with keys for:

renderingIntent

Either of “Perceptual”, “RelativeColorimetric”, “Saturation” or “AbsoluteColorimetric”.

blackPointCompensation

True if black point compensation is activated.

overPrinting

True if overprint is activated.

overPrintMode

The overprint mode. Can be either 0 or 1.

Alpha#

Alpha values are floats between 0 and 1, whereby 0 denotes full transparency & 1 denotes full opacity.


Object Protocols#

The following objects are standard JavaScript objects with assumed properties (i.e. they follow their outlined protocol). They are used throughout the mutool API to support object types for various methods.

File Specification Object#

This object is used to represent a file.

In order to retrieve information from this object see methods described within Embedded files in PDFs.

Embedded File Object#

This Object contains metadata about an embedded file, it has properties for:

filename

The name of the embedded file.

mimetype

The MIME type of the embedded file, or undefined if none exists.

size

The size in bytes of the embedded file contents.

creationDate

The creation date of the embedded file.

modificationDate

The modification date of the embedded file.

PDF Journal Object#

This Object contains a numbered array of operations and a reference into this list indicating the current position.

position

The current position in the journal.

steps

An array containing the name of each step in the journal.

Stroking State Object#

The stroking state is a dictionary with keys for:

  • startCap, dashCap, endCap

    “Butt”, “Round”, “Square”, or “Triangle”.

  • lineCap

    Set startCap, dashCap, and endCap all at once.

  • lineJoin

    “Miter”, “Round”, “Bevel”, or “MiterXPS”.

  • lineWidth

    Thickness of the line.

  • miterLimit

    Maximum ratio of the miter length to line width, before beveling the join instead.

  • dashPhase

    Starting offset for dash pattern.

  • dashes

    Array of on/off dash lengths.

EXAMPLE

{dashes:[5,10], lineWidth:3, lineCap:'Round'}

Outline Iterator Object#

This Object has properties for:

title

The title of the item.

uri

A URI pointing to the destination. Likely to be a document internal link that can be resolved by Document.resolveLink(), otherwise a link to a web page.

open

True if the item should be opened when shown in a tree view.

Text Layout Object#

A description of layouted text value from a text widget with keys:

matrix

Normal transform matrix for the layouted text.

invMatrix

Inverted transform matrix for the layouted text.

lines

An array of text lines belonging to the layouted text, a lines object contains:

  • x The X coordinate for the text line.

  • y The Y coordinate for the text line.

  • fontSize The text size used for the layouted text line.

  • index The index of the beginning of the line in the text string.

  • rect The bounding rectangle for the text line.

  • chars An array of characters in the text line.

    A chars object contains:

    • x The position of the character.

    • advance The advance of the character.

    • index The index of the character in the text string.

    • rect The bounding Rectangle for the character.

Signature Configuration Object#

A signature configuration object has properties with Boolean values as follows:

showLabels

Whether to include both labels and values or just values on the right hand side.

showDN

Whether to include the distinguished name on the right hand side.

showTextName

Whether to include the name of the signatory on the right hand side.

showDate

Whether to include the date of signing on the right hand side.

showGraphicName

Whether to include the signatory name on the left hand side.

showLogo

Whether to include the MuPDF logo in the background.

Placement Result Object#

filled

The rectangle of the actual area that was used.

more

True if more content remains to be placed, otherwise false if all content fits in the Story.

Default Appearance Text Object#

font

String representing the font.

size

Integer representing the size of the font.

color

Array representing the color value.


Buffer#

Buffer objects are used for working with binary data. They can be used much like arrays, but are much more efficient since they only store bytes.

new Buffer()#

Constructor method.

Create a new empty buffer.

Returns

Buffer.

EXAMPLE

var buffer = new mupdf.Buffer();
new Buffer(original)#

Constructor method.

Create a new buffer with a copy of the data from the original buffer.

Arguments
  • originalBuffer.

Returns

Buffer.

EXAMPLE

var buffer = new mupdf.Buffer(buffer);
readFile(fileName)#

mutool only

Constructor method.

Create a new buffer with the contents of a file.

Arguments
  • fileName – The path to the file to read.

Returns

Buffer.

EXAMPLE

var buffer = mupdf.readFile("my_file.pdf");

Instance properties

length

mutool only

The number of bytes in the buffer. Read-only.

[n]

mutool only

Read/write the byte at index ‘n’. Will throw exceptions on out of bounds accesses.

EXAMPLE

var byte = buffer[0];

Instance methods

getLength()#

wasm only

Returns the number of bytes in the buffer. Read-only.

Returns

Integer.

EXAMPLE

var length = buffer.getLength();
writeByte(b)#

Append a single byte to the end of the buffer.

Arguments
  • b – The byte value. Only the least significant 8 bits of the value are appended to the buffer.

EXAMPLE

buffer.writeByte(0x2a);
readByte(at)#

wasm only

Read the byte at the supplied index.

Arguments
  • atInteger.

EXAMPLE

buffer.readByte(0);
writeRune(c)#

mutool only

Encode a unicode character as UTF-8 and append to the end of the buffer.

Arguments
  • c – The character unicode codepoint.

EXAMPLE

buffer.writeRune(0x4f60); // To append U+4f60
buffer.writeRune(0x597d); // To append U+597d
buffer.writeRune(0xff01); // To append U+ff01
writeLine(...)#

Append arguments to the end of the buffer, separated by spaces, ending with a newline.

Arguments
  • ... – List of arguments.

EXAMPLE

buffer.writeLine("a line");
write(...)#

Append arguments to the end of the buffer, separated by spaces.

Arguments
  • ... – List of arguments.

EXAMPLE

buffer.write("hello", "world");
writeBuffer(data)#

Append the contents of the data buffer to the end of the buffer.

Arguments
  • data – Data buffer.

EXAMPLE

buffer.writeBuffer(anotherBuffer);
slice(start end)#

mutool only

Create a new buffer containing a (subset of) the data in this buffer. Start and end are offsets from the beginning of this buffer, and if negative from the end of this buffer.

Arguments
  • start – Start index.

  • end – End index.

Returns

Buffer.

EXAMPLE

var buffer = new Buffer();
buffer.write("hello", "world"); // buffer contains "hello world"
var newBuffer = buffer.slice(1, -1); // newBuffer contains "ello worl"
save(fileName)#

mutool only

Write the contents of the buffer to a file.

Arguments
  • fileName – Filename to save to.

EXAMPLE

buffer.save("my_buffer_filename");
asUint8Array()#

wasm only

Returns the buffer as a Uint8Array.

Returns

Uint8Array.

EXAMPLE

var arr = buffer.asUint8Array();
asString()#

wasm only

Returns the buffer as a String.

Returns

String.

EXAMPLE

var str = buffer.asString();

Document#

MuPDF can open many document types (PDF, XPS, CBZ, EPUB, FB2 and a handful of image formats).

new Document.openDocument(fileName, fileType)#

Constructor method.

Open the named document.

Arguments
  • fileName – File name to open.

  • fileType – File type.

Returns

Document.

EXAMPLE

var document = new mupdf.Document.openDocument("my_pdf.pdf", "application/pdf");

Instance methods

needsPassword()#

Returns true if a password is required to open a password protected PDF.

Returns

Boolean.

EXAMPLE

var needsPassword = document.needsPassword();
authenticatePassword(password)#

Returns a bitfield value against the password authentication result.

Arguments
  • password – The password to attempt authentication with.

Returns

Integer.

Bitfield value

Description

0

Failed

1

No password needed

2

Is User password and is okay

4

Is Owner password and is okay

6

Is both User & Owner password and is okay

EXAMPLE

var auth = document.authenticatePassword("abracadabra");
hasPermission(permission)#

Returns true if the document has permission for the supplied permission String parameter.

Arguments
  • permissionString The permission to seek for, e.g. “edit”.

Returns

Boolean.

String

Description

print

Can print

edit

Can edit

copy

Can copy

annotate

Can annotate

form

Can fill out forms

accessibility

Can copy for accessibility

assemble

Can manage document pages

print-hq

Can print high-quality

EXAMPLE

var canEdit = document.hasPermission("edit");
getMetaData(key)#

Return various meta data information. The common keys are: format, encryption, info:ModDate, and info:Title.

Arguments
  • keyString.

Returns

String.

EXAMPLE

var format = document.getMetaData("format");
var modificationDate = doc.getMetaData("info:ModDate");
var author = doc.getMetaData("info:Author");
setMetaData(key, value)#

Set document meta data information field to a new value.

Arguments
  • keyString.

  • valueString.

EXAMPLE

document.setMetaData("info:Author", "My Name");
isReflowable()#

Returns true if the document is reflowable, such as EPUB, FB2 or XHTML.

Returns

Boolean.

EXAMPLE

var isReflowable = document.isReflowable();

Note

This will always return false in the WASM context as there is no HTML/EPUB support in WASM.

layout(pageWidth, pageHeight, fontSize)#

Layout a reflowable document (EPUB, FB2, or XHTML) to fit the specified page and font size.

Arguments
  • pageWidthInt.

  • pageHeightInt.

  • fontSizeInt.

EXAMPLE

document.layout(300,300,16);
countPages()#

Count the number of pages in the document. This may change if you call the layout function with different parameters.

Returns

Int.

EXAMPLE

var numPages = document.countPages();
loadPage(number)#

Returns a Page (or PDFPage) object for the given page number. Page number zero (0) is the first page in the document.

Returns

Page or PDFPage.

EXAMPLE

var page = document.loadPage(0); // loads the 1st page of the document
loadOutline()#

Returns an array with the outline (also known as “table of contents” or “bookmarks”). In the array is an object for each heading with the property ‘title’, and a property ‘page’ containing the page number. If the object has a ‘down’ property, it contains an array with all the sub-headings for that entry.

Returns

[...].

EXAMPLE

var outline = document.loadOutline();
outlineIterator()#

mutool only

Returns an OutlineIterator for the document outline.

Returns

OutlineIterator.

EXAMPLE

var obj = document.outlineIterator();

Resolve a document internal link URI to a link destination.

Arguments
  • uriString.

Returns

Link destination.

EXAMPLE

var linkDestination = document.resolveLink(my_link);
isPDF()#

Returns true if the document is a PDF document.

Returns

Boolean.

EXAMPLE

var isPDF = document.isPDF();
formatLinkURI(linkDestination)#

Format a document internal link destination object to a URI string suitable for createLink().

Arguments
Returns

String.

EXAMPLE

var uri = document.formatLinkURI({chapter:0, page:42,
        type:"FitV", x:0, y:0, width:100, height:50, zoom:1});
document.createLink([0,0,100,100], uri);

Page#

The base class for a PDF Page.

Instance methods

getBounds()#

Returns a rectangle containing the page dimensions.

Returns

[ulx,uly,lrx,lry].

EXAMPLE

var rect = page.getBounds();
run(device, matrix)#

Calls device functions for all the contents on the page, using the specified transform matrix. The device can be one of the built-in devices or a JavaScript object with methods for the device calls. The matrix maps from user space points to device space pixels.

Arguments
  • device – The device object.

  • matrix[a,b,c,d,e,f]. The transform matrix.

EXAMPLE

page.run(obj, mupdf.Matrix.identity);
runPageContents(device, matrix)#

This is the same as the run method above but it only considers the page itself and omits annotations and widgets.

Arguments
  • device – The device object.

  • matrix[a,b,c,d,e,f]. The transform matrix.

EXAMPLE

page.runPageContents(obj, mupdf.Matrix.identity);
runPageAnnots(device, matrix)#

This is the same as the run method above but it only considers the page annotations.

Arguments
  • device – The device object.

  • matrix[a,b,c,d,e,f]. The transform matrix.

EXAMPLE

page.runPageAnnots(obj, mupdf.Matrix.identity);
runPageWidgets(device, matrix)#

This is the same as the run method above but it only considers the page widgets.

Arguments
  • device – The device object.

  • matrix[a,b,c,d,e,f]. The transform matrix.

EXAMPLE

page.runPageWidgets(obj, mupdf.Matrix.identity);
toPixmap(matrix, colorspace, alpha, showExtras)#

Render the page into a Pixmap, using the specified transform matrix and colorspace. If alpha is true, the page will be drawn on a transparent background, otherwise white. If showExtras is true then the operation will include any page annotations and/or widgets.

Arguments
  • matrix[a,b,c,d,e,f]. The transform matrix.

  • colorspaceColorSpace.

  • alphaBoolean.

  • showExtrasBoolean.

Returns

Pixmap.

Note

In MuPDF WASM alpha & showExtras default to true unless otherwise specified. In mutool run alpha defaults to false and showExtras defaults to true unless otherwise specified.

EXAMPLE

var pixmap = page.toPixmap(mupdf.Matrix.identity, mupdf.ColorSpace.DeviceRGB, true, true);
toDisplayList(showExtras)#

Record the contents on the page into a DisplayList. If showExtras is true then the operation will include any page annotations and/or widgets.

Arguments
  • showExtrasBoolean.

Returns

DisplayList.

Note

In both MuPDF WASM and mutool run showExtras defaults to true unless otherwise specified.

EXAMPLE

var displayList = page.toDisplayList(true);
toStructuredText(options)#

Extract the text on the page into a StructuredText object. The options argument is a comma separated list of flags: “preserve-ligatures”, “preserve-whitespace”, “preserve-spans”, and “preserve-images”.

Arguments
  • optionsString.

Returns

StructuredText.

EXAMPLE

var sText = page.toStructuredText("preserve-whitespace");

Search the page text for all instances of the needle value, and return an array of search hits. Each search hit is an array of rectangles corresponding to all characters in the search hit.

Arguments
  • needleString.

  • max_hitsInteger Defaults to 500 unless otherwise specified.

Returns

[...].

EXAMPLE

var results = page.search("my search phrase");

Note

The numbers are [ulx, uly, urx, ury, llx, lly, lrx, lry] for each rectangle against each result. These type of rectangles are know as “Quads” or “QuadPoints” in the PDF specification.

Return an array of all the links on the page. Each link is an object with a ‘bounds’ property, and either a ‘page’ or ‘uri’ property, depending on whether it’s an internal or external link. See: Link.

Returns

[...].

var links = page.getLinks();
var link = links[0];
var linkDestination = doc.resolveLink(link)

Note

If there are no links then an empty array is returned.

Create a new link within the rectangle on the page, linking to the destination URI string.

Arguments
  • rectRectangle for the link.

  • destinationUriString containing URI.

Returns

Link.

EXAMPLE

var link = page.createLink([0,0,100,100], "https://example.com");

Delete the link from the page.

Arguments

EXAMPLE

page.deleteLink(link_obj);
getLabel()#

Returns the page number as a string using the numbering scheme of the document.

Returns

String.

EXAMPLE

var label = page.getLabel();
isPDF()#

Returns true if the page is from a PDF document.

Returns

Boolean.

EXAMPLE

var isPDF = page.isPDF();

Note

As PDFPage extends Page this method will return false. It is only if we actually have an instance of a PDFPage when this method is overridden to return true.


StructuredText#

StructuredText objects hold text from a page that has been analyzed and grouped into blocks, lines and spans. To obtain a StructuredText instance use Page toStructuredText().

Instance methods

search(needle)#

Search the text for all instances of needle, and return an array with all matches found on the page.

Each match in the result is an array containing one or more QuadPoints that cover the matching text.

Arguments
  • needleString.

Returns

[...].

EXAMPLE

var result = sText.search("Hello World!");
highlight(p, q)#

Return an array with rectangles needed to highlight a selection defined by the start and end points.

Arguments
  • p – Start point in format [x,y].

  • q – End point in format [x,y].

Returns

[...].

EXAMPLE

var result = sText.highlight([100,100], [200,100]);
copy(p, q)#

Return the text from the selection defined by the start and end points.

Arguments
  • p – Start point in format [x,y].

  • q – End point in format [x,y].

Returns

String.

EXAMPLE

var result = sText.copy([100,100], [200,100]);
walk(walker)#

wasm only

Walk through the blocks (images or text blocks) of the structured text. For each text block walk over its lines of text, and for each line each of its characters. For each block, line or character the walker will have a method called.

EXAMPLE

var stext = pdfPage.toStructuredText();
stext.walk({
    beginLine: function (bbox, wmode, direction) {
        console.log("beginLine", bbox, wmode, direction);
    },
    beginTextBlock: function (bbox) {
        console.log("beginTextBlock", bbox);
    },
    endLine: function () {
        console.log("endLine");
    },
    endTextBlock: function () {
        console.log("endTextBlock");
    },
    onChar: function (utf, origin, font, size, quad, color) {
        console.log("onChar", utf, origin, font, size, quad, color);
    },
    onImageBlock: function (bbox, transform, image) {
        console.log("onImageBlock", bbox, transform, image);
    },
});

Note

On beginLine the direction parameter is a vector (e.g. [0, 1]) and can you can calculate the rotation as an angle with some trigonometry on the vector.

asJSON()#

wasm only

Returns the instance in JSON format.

Returns

String.

EXAMPLE

var json = sText.asJSON();

ColorSpace#

Properties

DeviceGray

The default grayscale colorspace.

DeviceRGB

The default RGB colorspace.

DeviceBGR

The default RGB colorspace, but with components in reverse order.

DeviceCMYK

The default CMYK colorspace.

DeviceLab

The default Lab colorspace.

Methods

new ColorSpace(from, name)#

wasm only

Constructor method.

Create a new ColorSpace.

Arguments
  • from – A buffer containing an ICC profile.

  • name – A user descriptive name.

Returns

ColorSpace.

EXAMPLE

var icc_colorspace = new mupdf.ColorSpace(fs.readFileSync("SWOP.icc"), "SWOP");
getNumberOfComponents()#

A grayscale colorspace has one component, RGB has 3, CMYK has 4, and DeviceN may have any number of components.

EXAMPLE

var cs = mupdf.ColorSpace.DeviceRGB;
var num = cs.getNumberOfComponents(); // 3
toString()#

Return name of ColorSpace.

Returns

String.

var cs = mupdf.ColorSpace.DeviceRGB;
var num = cs.toString(); // "DeviceRGB"
isGray()#

Returns true if the object is a gray color space.

Returns

Boolean.

var bool = colorSpace.isGray();
isRGB()#

Returns true if the object is an RGB color space.

Returns

Boolean.

var bool = colorSpace.isRGB();
isCMYK()#

Returns true if the object is a CMYK color space.

Returns

Boolean.

var bool = colorSpace.isCMYK();
isIndexed()#

Returns true if the object is an Indexed color space.

Returns

Boolean.

var bool = colorSpace.isIndexed();
isLab()#

Returns true if the object is a Lab color space.

Returns

Boolean.

var bool = colorSpace.isLab();
isDeviceN()#

Returns true if the object is a Device N color space.

Returns

Boolean.

var bool = colorSpace.isDeviceN();
isSubtractive()#

Returns true if the object is a subtractive color space.

Returns

Boolean.

var bool = colorSpace.isSubtractive();
getType()#

Returns a string indicating the type.

Returns

String One of “None”, “Gray”, “RGB”, “BGR”, “CMYK”, “Lab”, “Indexed”, “Separation”.

DefaultColorSpaces#

DefaultColorSpaces is an object with keys for:

getDefaultGray()#

Get the default gray colorspace.

Returns

ColorSpace.

getDefaultRGB()#

Get the default RGB colorspace.

Returns

ColorSpace.

getDefaultCMYK()#

Get the default CMYK colorspace.

Returns

ColorSpace.

getOutputIntent()#

Get the output intent.

Returns

ColorSpace.

setDefaultGray(colorspace)#
Arguments
  • colorspaceColorSpace.

setDefaultRGB(colorspace)#
Arguments
  • colorspaceColorSpace.

setDefaultCMYK(colorspace)#
Arguments
  • colorspaceColorSpace.

setOutputIntent(colorspace)#
Arguments
  • colorspaceColorSpace.


Pixmap#

A Pixmap object contains a color raster image (short for pixel map). The components in a pixel in the Pixmap are all byte values, with the transparency as the last component. A Pixmap also has a location (x, y) in addition to its size; so that they can easily be used to represent tiles of a page.

new Pixmap(colorspace, bounds, alpha)#

Constructor method.

Create a new pixmap. The pixel data is not initialized; and will contain garbage.

Arguments
  • colorspaceColorSpace.

  • bounds[ulx,uly,lrx,lry] Rectangle.

  • alphaBoolean.

Returns

Pixmap.

EXAMPLE

var pixmap = new mupdf.Pixmap(mupdf.ColorSpace.DeviceRGB, [0,0,100,100], true);

Instance methods

clear(value)#

Clear the pixels to the specified value. Pass 255 for white, or omit for transparent.

Arguments
  • value – Pixel value.

EXAMPLE

pixmap.clear(255);
pixmap.clear();
getBounds()#

Return the pixmap bounds.

Returns

[ulx,uly,lrx,lry] Rectangle.

EXAMPLE

var rect = pixmap.getBounds();
getWidth()#
Returns

Int The width value.

EXAMPLE

var w = pixmap.getWidth();
getHeight()#
Returns

Int The height value.

EXAMPLE

var h = pixmap.getHeight();
getNumberOfComponents()#

Number of colors; plus one if an alpha channel is present.

Returns

Int Number of color components.

EXAMPLE

var num = pixmap.getNumberOfComponents();
getAlpha()#

True if alpha channel is present.

Returns

Boolean.

EXAMPLE

var alpha = pixmap.getAlpha();
getStride()#

Number of bytes per row.

Returns

Int.

EXAMPLE

var stride = pixmap.getStride();
getColorSpace()#

Returns the ColorSpace for the Pixmap.

Returns

ColorSpace.

EXAMPLE

var cs = pixmap.getColorSpace();
setResolution(xRes, yRes)#

Set x & y resolution.

Arguments
  • xResInt X resolution in dots per inch.

  • yResInt Y resolution in dots per inch.

EXAMPLE

pixmap.setResolution(300, 300);
getXResolution()#

Returns the x resolution for the Pixmap.

Returns

Int Resolution in dots per inch.

EXAMPLE

var xRes = pixmap.getXResolution();
getYResolution()#

Returns the y resolution for the Pixmap.

Returns

Int Resolution in dots per inch.

EXAMPLE

var yRes = pixmap.getYResolution();
getSample(x, y, index)#

mutool only

Get the value of component index at position x, y (relative to the image origin: 0, 0 is the top left pixel).

Arguments
  • x – X co-ordinate.

  • y – Y co-ordinate.

  • index – Component index. i.e. For CMYK ColorSpaces 0 = Cyan, for RGB 0 = Red etc.

Returns

Int.

EXAMPLE

var sample = pixmap.getSample(0,0,0);
saveAsPNG(fileName)#

mutool only

Save the Pixmap as a PNG. Only works for Gray and RGB images.

Arguments
  • fileNameString.

EXAMPLE

pixmap.saveAsPNG("fileName.png");
saveAsJPEG(fileName, quality)#

mutool only

Save the Pixmap as a JPEG. Only works for Gray, RGB and CMYK images.

Arguments
  • fileNameString.

  • qualityInt.

EXAMPLE

pixmap.saveAsJPEG("fileName.jpg", 80);
saveAsPAM(fileName)#

mutool only

Save the Pixmap as a PAM.

Arguments
  • fileNameString.

EXAMPLE

pixmap.saveAsPAM("fileName.pam");
saveAsPNM(fileName)#

mutool only

Save the Pixmap as a PNM. Only works for Gray and RGB images without alpha.

Arguments
  • fileNameString.

EXAMPLE

pixmap.saveAsPNM("fileName.pnm");
saveAsPBM(fileName)#

mutool only

Save the Pixmap as a PBM. Only works for Gray and RGB images without alpha.

Arguments
  • fileNameString.

EXAMPLE

pixmap.saveAsPBM("fileName.pbm");
saveAsPKM(fileName)#

mutool only

Save the Pixmap as a PKM. Only works for Gray and RGB images without alpha.

Arguments
  • fileNameString.

EXAMPLE

pixmap.saveAsPKM("fileName.pkm");
invert()#

Invert all pixels. All components are processed, except alpha which is unchanged.

EXAMPLE

pixmap.invert();
invertLuminance()#

Transform all pixels so that luminance of each pixel is inverted, and the chrominance remains as unchanged as possible. All components are processed, except alpha which is unchanged.

EXAMPLE

pixmap.invertLuminance();
gamma(gamma)#

Apply gamma correction to Pixmap. All components are processed, except alpha which is unchanged.

Values >= 0.1 & < 1 = darken, > 1 & < 10 = lighten.

Arguments
  • gammaFloat.

EXAMPLE

pixmap.gamma(3);
tint(black, white)#

Tint all pixels in a RGB, BGR or Gray Pixmap. Map black and white respectively to the given hex RGB values.

Arguments
  • blackInteger.

  • whiteInteger.

EXAMPLE

pixmap.tint(0xffff00, 0xffff00);
warp(points, width, height)#

mutool only

Return a warped subsection of the Pixmap, where the result has the requested dimensions.

Arguments
  • points[x0, y0, x1, y1, x2, y2, x3, y3, x4, y4] Points give the corner points of a convex quadrilateral within the Pixmap to be warped.

  • widthInt.

  • heightInt.

Returns

Pixmap.

EXAMPLE

var warpedPixmap = pixmap.warp([0,0,100,0,0,100,100,100],200,200);
convertToColorSpace(colorspace, proof, defaultColorSpaces, colorParams, keepAlpha)#

mutool only

Convert pixmap into a new pixmap of a desired colorspace. A proofing colorspace, a set of default colorspaces and color parameters used during conversion may be specified. Finally a boolean indicates if alpha should be preserved (default is to not preserve alpha).

Arguments
  • colorspaceColorspace.

  • proofColorspace.

  • defaultColorSpacesDefaultColorSpaces.

  • colorParams[].

  • keepAlphaBoolean.

Returns

Pixmap.

getPixels()#

wasm only

Returns an array of pixels for the Pixmap.

Returns

[...].

EXAMPLE

var pixels = pixmap.getPixels();
asPNG()#

wasm only

Returns a buffer of the Pixmap as a PNG.

Returns

Buffer.

EXAMPLE

var buffer = pixmap.asPNG();
asPSD()#

wasm only

Returns a buffer of the Pixmap as a PSD.

Returns

Buffer.

EXAMPLE

var buffer = pixmap.asPSD();
asPAM()#

wasm only

Returns a buffer of the Pixmap as a PAM.

Returns

Buffer.

EXAMPLE

var buffer = pixmap.asPAM();
asJPEG(quality)#

wasm only

Returns a buffer of the Pixmap as a JPEG. Note, if the Pixmap has an alpha channel then an exception will be thrown.

Returns

Buffer.

EXAMPLE

var buffer = pixmap.asJPEG(80);

DrawDevice#

The DrawDevice can be used to render to a Pixmap; either by running a Page with it or by calling its methods directly.

new DrawDevice(transform, pixmap)#

Constructor method.

Create a device for drawing into a Pixmap. The Pixmap bounds used should match the transformed page bounds, or you can adjust them to only draw a part of the page.

Arguments
  • transform[a,b,c,d,e,f]. The transform matrix.

  • pixmapPixmap.

Returns

DrawDevice.

EXAMPLE

var drawDevice = new mupdf.DrawDevice(mupdf.Matrix.identity, pixmap);

DisplayList#

A display list records all the device calls for playback later. If you want to run a page through several devices, or run it multiple times for any other reason, recording the page to a display list and replaying the display list may be a performance gain since then you can avoid reinterpreting the page each time. Be aware though, that a display list will keep all the graphics required in memory, so will increase the amount of memory required.

new DisplayList(mediabox)#

Constructor method.

Create an empty display list. The mediabox rectangle should be the bounds of the page.

Arguments
Returns

DisplayList.

EXAMPLE

var displayList = new mupdf.DisplayList([0,0,100,100]);

Instance methods

run(device, transform)#

Play back the recorded device calls onto the device.

Arguments
  • deviceDevice.

  • transform[a,b,c,d,e,f]. The transform matrix.

EXAMPLE

displayList.run(device, mupdf.Matrix.identity);
getBounds()#

Returns a rectangle containing the dimensions of the display list contents.

Returns

[ulx,uly,lrx,lry] Rectangle.

EXAMPLE

var bounds = displayList.getBounds();
toPixmap(transform, colorspace, alpha)#

Render display list to a Pixmap.

Arguments
  • transform[a,b,c,d,e,f]. The transform matrix.

  • colorspaceColorSpace.

  • alphaBoolean. If alpha is true, a transparent background, otherwise white.

Returns

Pixmap.

EXAMPLE

var pixmap = displayList.toPixmap(mupdf.Matrix.identity, mupdf.ColorSpace.DeviceRGB, false);
toStructuredText(options)#

Extract the text on the page into a StructuredText object. The options argument is a comma separated list of flags: “preserve-ligatures”, “preserve-whitespace”, “preserve-spans”, and “preserve-images”.

Arguments
  • optionsString.

Returns

StructuredText.

EXAMPLE

var sText = displayList.toStructuredText("preserve-whitespace");
search(needle)#

Search the display list text for all instances of the needle value, and return an array of search hits. Each search hit is an array of rectangles corresponding to all characters in the search hit.

Arguments
  • needleString.

Returns

[ [ Quad, Quad, ... ], [ Quad, Quad, ...], ... ].

mutool only

EXAMPLE

var results = displayList.search("my search phrase");

DisplayListDevice#

new DisplayListDevice(displayList)#

Constructor method.

Create a device for recording onto a display list.

Arguments
  • displayListDisplayList.

Returns

DisplayListDevice.

EXAMPLE

var my_display_list = new mupdf.DisplayList([0,0,100,100]);
console.log("my_display_list="+my_display_list);
var displayListDevice = new mupdf.DisplayListDevice(my_display_list);

Device#

All built-in devices have the methods listed below. Any function that accepts a device will also accept a JavaScript object with the same methods. Any missing methods are simply ignored, so you only need to create methods for the device calls you care about.

Many of the methods take graphics objects as arguments: Path, Text, Image and Shade.

Colors are specified as arrays with the appropriate number of components for the color space.

The methods that clip graphics must be balanced with a corresponding popClip.

Instance methods

fillPath(path, evenOdd, transform, colorspace, color, alpha, colorParams)#

Fill a path.

Arguments

EXAMPLE

device.fillPath(path, false, mupdf.Matrix.identity, mupdf.ColorSpace.DeviceRGB, [1,0,0], true);
strokePath(path, stroke, transform, colorspace, color, alpha, colorParams)#

Stroke a path.

Arguments

EXAMPLE

device.strokePath(path,
                  {dashes:[5,10], lineWidth:3, lineCap:'Round'},
                  mupdf.Matrix.identity,
                  mupdf.ColorSpace.DeviceRGB,
                  [0,1,0],
                  0.5);
clipPath(path, evenOdd, transform)#

Clip a path.

Arguments
  • pathPath object.

  • evenOdd – The even odd rule to use.

  • transform[a,b,c,d,e,f]. The transform matrix.

EXAMPLE

device.clipPath(path, true, mupdf.Matrix.identity);
clipStrokePath(path, stroke, transform)#

Clip & stroke a path.

Arguments

EXAMPLE

device.clipStrokePath(path, true, mupdf.Matrix.identity);
fillText(text, transform, colorspace, color, alpha, colorParams)#

Fill a text object.

Arguments

EXAMPLE

device.fillText(text, mupdf.Matrix.identity, mupdf.ColorSpace.DeviceRGB, [1,0,0], 1);
strokeText(text, stroke, transform, colorspace, color, alpha, colorParams)#

Stroke a text object.

Arguments

EXAMPLE

device.strokeText(text,
                  {dashes:[5,10], lineWidth:3, lineCap:'Round'},
                  mupdf.Matrix.identity, mupdf.ColorSpace.DeviceRGB,
                  [1,0,0],
                  1);
clipText(text, transform)#

Clip a text object.

Arguments
  • textText object.

  • transform[a,b,c,d,e,f]. The transform matrix.

EXAMPLE

device.clipText(text, mupdf.Matrix.identity);
clipStrokeText(text, stroke, transform)#

Clip & stroke a text object.

Arguments

EXAMPLE

device.clipStrokeText(text, {dashes:[5,10], lineWidth:3, lineCap:'Round'},  mupdf.Matrix.identity);
ignoreText(text, transform)#

Invisible text that can be searched but should not be visible, such as for overlaying a scanned OCR image.

Arguments
  • textText object.

  • transform[a,b,c,d,e,f]. The transform matrix.

EXAMPLE

device.ignoreText(text, mupdf.Matrix.identity);
fillShade(shade, transform, alpha, colorParams)#

Fill a shade (a.k.a. gradient).

Note

The details of gradient fills are not exposed to JavaScript yet.

Arguments

EXAMPLE

device.fillShade(shade, mupdf.Matrix.identity, true, {overPrinting:true});
fillImage(image, transform, alpha, colorParams)#

Draw an image. An image always fills a unit rectangle [0,0,1,1], so must be transformed to be placed and drawn at the appropriate size.

Arguments

EXAMPLE

device.fillImage(image, mupdf.Matrix.identity, false, {overPrinting:true});
fillImageMask(image, transform, colorspace, color, alpha, colorParams)#

An image mask is an image without color. Fill with the color where the image is opaque.

Arguments

EXAMPLE

device.fillImageMask(image, mupdf.Matrix.identity, mupdf.ColorSpace.DeviceRGB, 0xff00ff, true, {});
clipImageMask(image, transform)#

Clip graphics using the image to mask the areas to be drawn.

Arguments
  • imageImage object.

  • transform[a,b,c,d,e,f]. The transform matrix.

EXAMPLE

device.clipImageMask(image, mupdf.Matrix.identity);
popClip()#

Pop the clip mask installed by the last clipping operation.

EXAMPLE

device.popClip();
beginMask(area, luminosity, backdropColorspace, backdropColor, backdropAlpha, colorParams)#

Create a soft mask. Any drawing commands between beginMask and endMask are grouped and used as a clip mask.

Arguments
  • areaPath Mask area.

  • luminosityBoolean If luminosity is true, the mask is derived from the luminosity (grayscale value) of the graphics drawn; otherwise the color is ignored completely and the mask is derived from the alpha of the group.

  • backdropColorspace – The ColorSpace.

  • backdropColor – The color value.

  • backdropAlpha – The alpha value.

  • colorParams – The color parameters object.

EXAMPLE

device.beginMask(path, true, mupdf.ColorSpace.DeviceRGB, 0xff00ff, false, {});
endMask()#

Ends the mask.

EXAMPLE

device.endMask();
beginGroup(area, colorspace, isolated, knockout, blendmode, alpha)#

Push/pop a transparency blending group. See the PDF reference for details on isolated and knockout.

Arguments
  • area[ulx,uly,lrx,lry] Rectangle. The blend area.

  • colorspaceColorSpace.

  • isolatedBoolean.

  • knockoutBoolean.

  • blendmode – Blendmode is one of the standard PDF blend modes: “Normal”, “Multiply”, “Screen”, etc.

  • alpha – The alpha value.

_images/isolated-and-knockout.png

EXAMPLE

device.beginGroup([0,0,100,100], mupdf.ColorSpace.DeviceRGB, true, true, "Multiply", 0.5);
endGroup()#

Ends the blending group.

EXAMPLE

device.endGroup();
beginTile(areaRect, viewRect, xStep, yStep, transform, id)#

Draw a tiling pattern. Any drawing commands between beginTile and endTile are grouped and then repeated across the whole page. Apply a clip mask to restrict the pattern to the desired shape.

Arguments
  • areaRect[ulx,uly,lrx,lry] Rectangle.

  • viewRect[ulx,uly,lrx,lry] Rectangle.

  • xStepInteger representing x step.

  • yStepInteger representing y step.

  • transform[a,b,c,d,e,f]. The transform matrix.

  • idInteger The purpose of id is to allow for efficient caching of rendered tiles. If id is 0, then no caching is performed. If it is non-zero, then it assumed to uniquely identify this tile.

EXAMPLE

device.beginTile([0,0,100,100], [100,100,200,200], 10, 10, mupdf.Matrix.identity, 0);
endTile()#

Ends the tiling pattern.

EXAMPLE

device.endTile();
beginLayer(tag)#

Begin a marked-content layer with the given tag.

Arguments
  • tagString.

EXAMPLE

device.beginLayer("my tag");
endLayer()#

End a marked-content layer.

EXAMPLE

device.endLayer();
renderFlags(set, clear)#

mutool only

Set/clear device rendering flags. Both set and clear are arrays where each element is a flag name:

"mask", "color", "uncacheable", "fillcolor-undefined", "strokecolor-undefined", "startcap-undefined", "dashcap-undefined", "endcap-undefined", "linejoin-undefined", "miterlimit-undefined", "linewidth-undefined", "bbox-defined", or "gridfit-as-tiled".

Arguments
  • set[].

  • clear[].

EXAMPLE

device.renderFlags(["mask","startcap-undefined"], []);
setDefaultColorSpaces(defaults)#

Change the set of default colorspaces for the device. See the DefaultColorSpaces object.

Arguments
  • defaultsObject.

EXAMPLE


beginStructure(standard, raw, uid)#

mutool only

Begin a standard structure element, the raw tag name and a unique identifier.

Arguments
  • standardString. One of the standard PDF structure names: “Document”, “Part”, “BlockQuote”, etc.

  • rawString. The tag name.

  • uidInteger. A unique identifier.

EXAMPLE

device.beginStructure("Document", "my_tag_name", 123);
endStructure()#

mutool only

End a standard structure element.

EXAMPLE

device.endStructure();
beginMetatext(type, text)#

mutool only

Begin meta text information.

Arguments
  • typeString. The type (either of "ActualText", "Alt", "Abbreviation", or "Title")

  • textString. The text value.

EXAMPLE

device.beginMetatext("Title", "My title");
endMetatext()#

mutool only

End meta text information.

EXAMPLE

device.endMetatext();
close()#

Tell the device that we are done, and flush any pending output. Ensure that no items are left on the stack before closing.

EXAMPLE

device.close();

Path#

A Path object represents vector graphics as drawn by a pen. A path can be either stroked or filled, or used as a clip mask.

new Path()#

Constructor method.

Create a new empty path.

Returns

Path.

EXAMPLE

var path = new mupdf.Path();

Instance methods

getBounds(stroke, transform)#

Return a bounding rectangle for the path.

Arguments
  • strokeFloat The stroke for the path.

  • transform[a,b,c,d,e,f]. The transform matrix for the path.

Returns

[ulx,uly,lrx,lry] Rectangle.

EXAMPLE

var rect = path.getBounds(1.0, mupdf.Matrix.identity);
moveTo(x, y)#

Lift and move the pen to the coordinate.

Arguments
  • x – X coordinate.

  • y – Y coordinate.

EXAMPLE

path.moveTo(10, 10);
lineTo(x, y)#

Draw a line to the coordinate.

Arguments
  • x – X coordinate.

  • y – Y coordinate.

EXAMPLE

path.lineTo(20,20);
curveTo(x1, y1, x2, y2, x3, y3)#

Draw a cubic bezier curve to (x3, y3) using (x1, y1) and (x2, y2) as control points.

Arguments
  • x1 – X1 coordinate.

  • y1 – Y1 coordinate.

  • x2 – X2 coordinate.

  • y2 – Y2 coordinate.

  • x3 – X3 coordinate.

  • y3 – Y3 coordinate.

EXAMPLE

path.curveTo(0, 0, 10, 10, 100, 100);
curveToV(cx, cy, ex, ey)#

Draw a cubic bezier curve to (ex, ey) using the start point and (cx, cy) as control points.

Arguments
  • cx – CX coordinate.

  • cy – CY coordinate.

  • ex – EX coordinate.

  • ey – EY coordinate.

EXAMPLE

path.curveToV(0, 0, 100, 100);
curveToY(cx, cy, ex, ey)#

Draw a cubic bezier curve to (ex, ey) using the (cx, cy) and (ex, ey) as control points.

Arguments
  • cx – CX coordinate.

  • cy – CY coordinate.

  • ex – EX coordinate.

  • ey – EY coordinate.

EXAMPLE

path.curveToY(0, 0, 100, 100);
closePath()#

Close the path by drawing a line to the last moveTo.

EXAMPLE

path.closePath();
rect(x1, y1, x2, y2)#

Shorthand for moveTo, lineTo, lineTo, lineTo, closePath to draw a rectangle.

Arguments
  • x1 – X1 coordinate.

  • y1 – Y1 coordinate.

  • x2 – X2 coordinate.

  • y2 – Y2 coordinate.

EXAMPLE

path.rect(0,0,100,100);
walk(pathWalker)#

mutool only

Call moveTo, lineTo, curveTo and closePath methods on the pathWalker object to replay the path.

Arguments
  • pathWalker – The path walker object. A user definable JavaScript object which can be used to trigger your own functions on the path methods.

Note

A path walker object has callback methods that are called when walk() walks over moveTo, lineTo, curveTo and closePath operators in a Path.

EXAMPLE

var myPathWalker = {
    moveTo: function (x, y) {
        //... do whatever ...
    },
    lineTo: function (x, y) {
        //... do whatever ...
    },
}
transform(transform)#

Transform path by the given transform matrix.

Arguments
  • transform[a,b,c,d,e,f]. The transform matrix for the path.

EXAMPLE

path.transform(mupdf.Matrix.scale(2,2));

Text#

A Text object contains text.

new Text()#

Constructor method.

Create a new empty text object.

Returns

Text.

EXAMPLE

var text = new mupdf.Text();

Instance methods

showGlyph(font, transform, glyph, unicode, wmode)#

Add a glyph to the text object.

Transform is the text matrix, specifying font size and glyph location. For example: [size,0,0,-size,x,y].

Glyph and unicode may be -1 for n-to-m cluster mappings. For example, the “fi” ligature would be added in two steps: first the glyph for the ‘fi’ ligature and the unicode value for ‘f’; then glyph -1 and the unicode value for ‘i’.

Arguments
  • fontFont object.

  • transform[a,b,c,d,e,f]. The transform matrix.

  • glyphInteger.

  • unicodeInteger.

  • wmode0 for horizontal writing, and 1 for vertical writing.

EXAMPLE

text.showGlyph(new mupdf.Font("Times-Roman"), mupdf.Matrix.identity, 21, 0x66, 0);
text.showGlyph(new mupdf.Font("Times-Roman"), mupdf.Matrix.identity, -1, 0x69, 0);
showString(font, transform, string)#

Add a simple string to the Text object. Will do font substitution if the font does not have all the unicode characters required.

Arguments
  • fontFont object.

  • transform[a,b,c,d,e,f]. The transform matrix.

  • string – String content for Text object.

EXAMPLE

text.showString(new mupdf.Font("Times-Roman"), mupdf.Matrix.identity, "Hello");
walk(textWalker)#

Call the showGlyph method on the textWalker object for each glyph in the text object.

Arguments
  • textWalker – The text walker object. A user definable JavaScript object which can be used to trigger your own functions on the text methods.

EXAMPLE

text.walk({
    beginSpan: function (font, transform, wmode, bidilevel, markupdirection, language) {
        // ... do whatever ...
    },
    showGlyph: function (font, transform, glyph, unicode, wmode, bidilevel) {
        // ... do whatever ...
    },
    endSpan: function () {
        // ... do whatever ...
    },
});

Font#

Font objects can be created from TrueType, OpenType, Type1 or CFF fonts. In PDF there are also special Type3 fonts.

new Font(ref)#

Constructor method.

Create a new font, either using a built-in font name or a file name.

The built-in standard PDF fonts are:

  • Times-Roman.

  • Times-Italic.

  • Times-Bold.

  • Times-BoldItalic.

  • Helvetica.

  • Helvetica-Oblique.

  • Helvetica-Bold.

  • Helvetica-BoldOblique.

  • Courier.

  • Courier-Oblique.

  • Courier-Bold.

  • Courier-BoldOblique.

  • Symbol.

  • ZapfDingbats.

The built-in CJK fonts are referenced by language code: zh-Hant, zh-Hans, ja, ko.

Arguments
  • ref – Font name or file name.

Returns

Font.

EXAMPLE

var font = new mupdf.Font("Times-Roman");

Instance methods

getName()#

Get the font name.

Returns

String.

EXAMPLE

var name = font.getName();
encodeCharacter(unicode)#

Get the glyph index for a unicode character. Glyph zero (.notdef) is returned if the font does not have a glyph for the character.

Arguments
  • unicode – The unicode character.

Returns

Glyph index.

EXAMPLE

var index = font.encodeCharacter(0x42);
advanceGlyph(glyph, wmode)#

Return advance width for a glyph in either horizontal or vertical writing mode.

Arguments
  • glyph – The glyph as unicode character.

  • wmode0 for horizontal writing, and 1 for vertical writing.

Returns

Width for the glyph.

EXAMPLE

var width = font.advanceGlyph(0x42, 0);
isBold()#

Returns true if font is bold.

Returns

Boolean.

EXAMPLE

var isBold = font.isBold();
isItalic()#

Returns true if font is italic.

Returns

Boolean.

EXAMPLE

var isItalic = font.isItalic();
isMono()#

Returns true if font is monospaced.

Returns

Boolean.

EXAMPLE

var isMono = font.isMono();
isSerif()#

Returns true if font is serif.

Returns

Boolean.

EXAMPLE

var isSerif = font.isSerif();

Image#

Image objects are similar to Pixmaps, but can contain compressed data.

new Image(ref)#

Constructor method.

Create a new image from a Pixmap data, or load an image file data.

Returns

Image.

EXAMPLE

var imageFromPixmap = new mupdf.Image(pixmap);
var imageFromBuffer = new mupdf.Image(buffer);

Instance methods

getWidth()#

Get the image width in pixels.

Returns

The width value.

EXAMPLE

var width = image.getWidth();
getHeight()#

Get the image height in pixels.

Returns

The height value.

EXAMPLE

var height = image.getHeight();
getXResolution()#

Returns the x resolution for the Image.

Returns

Int Image resolution in dots per inch.

EXAMPLE

var xRes = image.getXResolution();
getYResolution()#

Returns the y resolution for the Image.

Returns

Int Image resolution in dots per inch.

EXAMPLE

var yRes = image.getYResolution();
getColorSpace()#

Returns the ColorSpace for the Image.

Returns

ColorSpace.

EXAMPLE

var cs = image.getColorSpace();
getNumberOfComponents()#

Number of colors; plus one if an alpha channel is present.

Returns

Integer.

EXAMPLE

var num = image.getNumberOfComponents();
getBitsPerComponent()#

Returns the number of bits per component.

Returns

Integer.

EXAMPLE

var bits = image.getBitsPerComponent();
getInterpolate()#

Returns true if interpolated was used during decoding.

Returns

Boolean.

EXAMPLE

var interpolate = image.getInterpolate();
getColorKey()#

Returns an array with 2 * N integers for an N component image with color key masking, or null if masking is not used. Each pair of integers define an interval, and component values within that interval are not painted.

Returns

[...] or null.

EXAMPLE

var result = image.getColorKey();
getDecode()#

Returns an array with 2 * N numbers for an N component image with color mapping, or null if mapping is not used. Each pair of numbers define the lower and upper values to which the component values are mapped linearly.

Returns

[...] or null.

EXAMPLE

var arr = image.getDecode();
getOrientation()#

Returns the orientation of the image.

Returns

Integer.

EXAMPLE

var orientation = image.getOrientation();
setOrientation(orientation)#

Set the image orientation to the given orientation.

Arguments
  • orientationInteger Orientation value from the table below:

0

Undefined

1

0 degree ccw rotation. (Exif = 1)

2

90 degree ccw rotation. (Exif = 8)

3

180 degree ccw rotation. (Exif = 3)

4

270 degree ccw rotation. (Exif = 6)

5

flip on X. (Exif = 2)

6

flip on X, then rotate ccw by 90 degrees. (Exif = 5)

7

flip on X, then rotate ccw by 180 degrees. (Exif = 4)

8

flip on X, then rotate ccw by 270 degrees. (Exif = 7)

EXAMPLE

var orientation = image.setOrientation(4);
getImageMask()#

Returns true if this image is an image mask.

Returns

Boolean.

EXAMPLE

var mask = image.getImageMask();
getMask()#

Get another Image used as a mask for this one.

Returns

Image (or null).

EXAMPLE

var img = image.getMask();
toPixmap(scaledWidth, scaledHeight)#

Create a Pixmap from the image. The scaledWidth and scaledHeight arguments are optional, but may be used to decode a down-scaled Pixmap.

Arguments
  • scaledWidthFloat.

  • scaledHeightFloat.

Returns

Pixmap.

EXAMPLE

var pixmap = image.toPixmap();
var scaledPixmap = image.toPixmap(100, 100);

DocumentWriter#

DocumentWriter objects are used to create new documents in several formats.

new DocumentWriter(filename, format, options)#

mutool only

Constructor method.

Create a new document writer to create a document with the specified format and output options. If format is null it is inferred from the filename extension. The options argument is a comma separated list of flags and key-value pairs.

The output format & options are the same as in the mutool convert command.

Arguments
  • filename – The file name to output to.

  • format – The file format.

  • options – The options as key-value pairs.

Returns

DocumentWriter.

EXAMPLE

var writer = new mupdf.DocumentWriter("out.pdf", "PDF", "");
new DocumentWriter(buffer, format, options)#

wasm only

Constructor method.

Create a new document writer to create a document with the specified format and output options. The options argument is a comma separated list of flags and key-value pairs.

The output format & options are the same as in the mutool convert command.

Arguments
  • buffer – The buffer to output to.

  • format – The file format.

  • options – The options as key-value pairs.

Returns

DocumentWriter.

EXAMPLE

var writer = new mupdf.DocumentWriter(buffer, "PDF", "");

Instance methods

beginPage(mediabox)#

Begin rendering a new page. Returns a Device that can be used to render the page graphics.

Arguments
Returns

Device.

EXAMPLE

var device = writer.beginPage([0,0,100,100]);
endPage(device)#

Finish the page rendering. The argument must be the same Device object that was returned by the beginPage method.

Arguments
  • deviceDevice.

EXAMPLE

writer.endPage(device);
close()#

Finish the document and flush any pending output.

EXAMPLE

writer.close();

PDFDocument#

With MuPDF it is also possible to create, edit and manipulate PDF documents using low level access to the objects and streams contained in a PDF file. A PDFDocument object is also a Document object. You can test a Document object to see if it is safe to use as a PDFDocument by calling document.isPDF().

new PDFDocument()#

Constructor method.

Create a new empty PDF document.

Returns

PDFDocument.

EXAMPLE

var pdfDocument = new mupdf.PDFDocument();
new PDFDocument(fileName)#

mutool only

Constructor method.

Load a PDF document from file.

Returns

PDFDocument.

EXAMPLE

var pdfDocument = new mupdf.PDFDocument("my-file.pdf");

Instance methods

getVersion()#

Returns the PDF document version as an integer multiplied by 10, so e.g. a PDF-1.4 document would return 14.

Returns

Integer.

EXAMPLE

var version = pdfDocument.getVersion();
setLanguage(lang)#

wasm only

Sets the language for the document.

Arguments
  • langString.

EXAMPLE

pdfDocument.setLanguage("en");
getLanguage()#

wasm only

Gets the language for the document.

Returns

String.

EXAMPLE

var lang = pdfDocument.getLanguage();
rearrangePages(pages)#

mutool only

Rearrange (re-order and/or delete) pages in the PDFDocument.

The pages in the document will be rearranged according to the input list. Any pages not listed will be removed, and pages may be duplicated by listing them multiple times.

The PDF objects describing removed pages will remain in the file and take up space (and can be recovered by forensic tools) unless you save with the garbage option.

N.B. the PDFDocument should not be used for anything except saving after rearranging the pages (FIXME).

Arguments
  • pages – An array of page numbers (0-based).

EXAMPLE

var document = new Document.openDocument("my_pdf.pdf");
pdfDocument.rearrangePages([3,2]);
pdfDocument.save("fewer_pages.pdf", "garbage");
save(fileName, options)#

mutool only

Write the PDFDocument to file. The options are a string of comma separated options (see the mutool convert options).

Arguments
  • fileName – The name of the file to save to.

  • options – The options.

EXAMPLE

pdfDocument.save("my_fileName.pdf", "compress,compress-images,garbage=compact");
saveToBuffer(options)#

wasm only

Saves the document to a buffer. The options are a string of comma separated options (see the mutool convert options).

Arguments
  • options – The options.

Returns

Buffer.

EXAMPLE

var buffer = pdfDocument.saveToBuffer({"compress-images":true});
canBeSavedIncrementally()#

Returns true if the document can be saved incrementally, e.g. repaired documents or applying redactions prevents incremental saves.

Returns

Boolean.

EXAMPLE

var canBeSavedIncrementally = pdfDocument.canBeSavedIncrementally();
countVersions()#

Returns the number of versions of the document in a PDF file, typically 1 + the number of updates.

Returns

Integer.

EXAMPLE

var versionNum = pdfDocument.countVersions();
countUnsavedVersions()#

Returns the number of unsaved updates to the document.

Returns

Integer.

EXAMPLE

var unsavedVersionNum = pdfDocument.countUnsavedVersions();
validateChangeHistory()#

Check the history of the document, return the last version that checks out OK. Returns 0 if the entire history is OK, 1 if the next to last version is OK, but the last version has issues, etc.

Returns

Integer.

EXAMPLE

var changeHistory = pdfDocument.validateChangeHistory();
hasUnsavedChanges()#

Returns true if the document has been saved since it was last opened or saved.

Returns

Boolean.

EXAMPLE

var hasUnsavedChanges = pdfDocument.hasUnsavedChanges();
wasPureXFA()#

mutool only

Returns true if the document was an XFA form without AcroForm fields.

Returns

Boolean.

EXAMPLE

var wasPureXFA = pdfDocument.wasPureXFA();
wasRepaired()#

Returns true if the document was repaired when opened.

Returns

Boolean.

EXAMPLE

var wasRepaired = pdfDocument.wasRepaired();
setPageLabels(index, style, prefix, start)#

Sets the page label numbering for the page and all pages following it, until the next page with an attached label.

Arguments
  • indexInteger.

  • styleString Can be one of the following strings: "" (none), "D" (decimal), "R" (roman numerals upper-case), "r" (roman numerals lower-case), "A" (alpha upper-case), or "a" (alpha lower-case).

  • prefixString.

  • startInteger The ordinal with which to start numbering.

EXAMPLE

pdfDocument.setPageLabels(0, "D", "Prefix", 1);
deletePageLabels(index)#

Removes any associated page label from the page.

Arguments
  • indexInteger.

EXAMPLE

pdfDocument.deletePageLabels(0);
getTrailer()#

The trailer dictionary. This contains indirect references to the “Root” and “Info” dictionaries. See: PDF object access.

Returns

PDFObject The trailer dictionary.

EXAMPLE

var dict = pdfDocument.getTrailer();
countObjects()#

Return the number of objects in the PDF. Object number 0 is reserved, and may not be used for anything. See: PDF object access.

Returns

Integer Object count.

EXAMPLE

var num = pdfDocument.countObjects();
createObject()#

Allocate a new numbered object in the PDF, and return an indirect reference to it. The object itself is uninitialized.

Returns

The new object.

EXAMPLE

var obj = pdfDocument.createObject();
deleteObject(obj)#

Delete the object referred to by an indirect reference or its object number.

Arguments
  • obj – The object to delete.

EXAMPLE

pdfDocument.deleteObject(obj);
formatURIWithPathAndDest(path, destination)#

Format a link URI given a system independent path (see table 3.40 in the 1.7 specification) to a remote document and a destination object or a destination string suitable for createLink().

Arguments
  • pathString An absolute or relative path to a remote document file.

  • destinationLink destiation or String referring to a destination using either a destination object or a destination name in the remote document.

appendDestToURI(uri, destination)#

Append a fragment representing a document destination to a an existing URI that points to a remote document. The resulting string is suitable for createLink().

Arguments
  • uriString An URI to a remote document file.

  • destinationLink destiation or String referring to a destination using either a destination object or a destination name in the remote document.


PDF JavaScript actions#

enableJS()#

Enable interpretation of document JavaScript actions.

EXAMPLE

pdfDocument.enableJS();
disableJS()#

Disable interpretation of document JavaScript actions.

EXAMPLE

pdfDocument.disableJS();
isJSSupported()#

Returns true if interpretation of document JavaScript actions is supported.

Returns

Boolean.

EXAMPLE

var jsIsSupported = pdfDocument.isJSSupported();
setJSEventListener(listener)#

mutool only

Calls the listener whenever a document JavaScript action triggers an event.

Arguments
  • listener{} The JavaScript listener function.

Note

At present this listener will only trigger when a document JavaScript action triggers an alert.

EXAMPLE

pdfDocument.setJSEventListener({
        onAlert: function(message) {
                print(message);
        }
});
bake(bakeAnnots, bakeWidgets)#

Baking a document changes all the annotations and/or form fields (otherwise known as widgets) in the document into static content. It “bakes” the appearance of the annotations and fields onto the page, before removing the interactive objects so they can no longer be changed.

Effectively this removes the “annotation or “widget” type of these objects, but keeps the appearance of the objects.

Arguments
  • bakeAnnotsBoolean Whether to bake annotations or not. Defaults to true.

  • bakeWidgetsBoolean Whether to bake widgets or not. Defaults to true.


PDF Journalling#

enableJournal()#

Activate journalling for the document.

EXAMPLE

pdfDocument.enableJournal();
getJournal()#

Returns a PDF Journal Object.

Returns

Object PDF Journal Object.

EXAMPLE

var journal = pdfDocument.getJournal();
beginOperation(op)#

Begin a journal operation.

Arguments
  • lengthString The name of the operation.

EXAMPLE

pdfDocument.beginOperation("my_operation");
beginImplicitOperation()#

Begin an implicit journal operation. Implicit operations are operations that happen due to other operations, e.g. updating an annotation.

EXAMPLE

pdfDocument.beginImplicitOperation();
endOperation()#

End a previously started normal or implicit operation. After this it can be undone/redone using the methods below.

EXAMPLE

pdfDocument.beginImplicitOperation();
abandonOperation()#

Abandon an operation. Reverts to the state before that operation began.

EXAMPLE

pdfDocument.abandonOperation();
canUndo()#

Returns true if undo is possible in this state.

Returns

Boolean.

EXAMPLE

var canUndo = pdfDocument.canUndo();
canRedo()#

Returns true if redo is possible in this state.

Returns

Boolean.

EXAMPLE

var canRedo = pdfDocument.canRedo();
undo()#

Move backwards in the undo history. Changes to the document after this throws away all subsequent history.

EXAMPLE

pdfDocument.undo();
redo()#

Move forwards in the undo history.

EXAMPLE

pdfDocument.redo();

PDF Object Access#

A PDF document contains objects, similar to those in JavaScript: arrays, dictionaries, strings, booleans, and numbers. At the root of the PDF document is the trailer object; which contains pointers to the meta data dictionary and the catalog object which contains the pages and other information.

Pointers in PDF are also called indirect references, and are of the form “32 0 R” (where 32 is the object number, 0 is the generation, and R is magic syntax). All functions in MuPDF dereference indirect references automatically.

PDF has two types of strings: /Names and (Strings). All dictionary keys are names.

Some dictionaries in PDF also have attached binary data. These are called streams, and may be compressed.

Note

PDFObjects are always bound to the document that created them. Do NOT mix and match objects from one document with another document!


addObject(obj)#

Add obj to the PDF as a numbered object, and return an indirect reference to it.

Arguments
  • obj – Object to add.

Returns

Object.

EXAMPLE

var ref = pdfDocument.addObject(obj);
addStream(buffer, object)#

Create a stream object with the contents of buffer, add it to the PDF, and return an indirect reference to it. If object is defined, it will be used as the stream object dictionary.

Arguments
  • bufferBuffer object.

  • object – The object to add the stream to.

Returns

Object.

EXAMPLE

var stream = pdfDocument.addStream(buffer, object);
addRawStream(buffer, object)#

Create a stream object with the contents of buffer, add it to the PDF, and return an indirect reference to it. If object is defined, it will be used as the stream object dictionary. The buffer must contain already compressed data that matches “Filter” and “DecodeParms” set in the stream object dictionary.

Arguments
  • bufferBuffer object.

  • object – The object to add the stream to.

Returns

Object.

EXAMPLE

var stream = pdfDocument.addRawStream(buffer, object);
newNull()#

Create a new null object.

Returns

PDFObject.

EXAMPLE

var obj = pdfDocument.newNull();
newBoolean(boolean)#

Create a new boolean object.

Arguments
  • boolean – The boolean value.

Returns

PDFObject.

EXAMPLE

var obj = pdfDocument.newBoolean(true);
newInteger(number)#

Create a new integer object.

Arguments
  • number – The number value.

Returns

PDFObject.

EXAMPLE

var obj = pdfDocument.newInteger(1);
newReal(number)#

Create a new real number object.

Arguments
  • number – The number value.

Returns

PDFObject.

EXAMPLE

var obj = pdfDocument.newReal(7.3);
newString(string)#

Create a new string object.

Arguments
  • stringString.

Returns

PDFObject.

EXAMPLE

var obj = pdfDocument.newString("hello");
newByteString(byteString)#

mutool only

Create a new byte string object.

Arguments
  • byteStringString.

Returns

PDFObject.

EXAMPLE

var obj = pdfDocument.newByteString("hello");
newName(string)#

Create a new name object.

Arguments
  • string – The string value.

Returns

PDFObject.

EXAMPLE

var obj = pdfDocument.newName("hello");
newIndirect(objectNumber, generation)#

Create a new indirect object.

Arguments
  • objectNumberInteger.

  • generationInteger.

Returns

PDFObject.

EXAMPLE

var obj = pdfDocument.newIndirect(100, 0);
newArray(capacity)#

Create a new array object.

Arguments
  • capacityInteger Defaults to 8.

Returns

PDFObject.

EXAMPLE

var obj = pdfDocument.newArray();
newDictionary(capacity)#

Create a new dictionary object.

Arguments
  • capacityInteger Defaults to 8.

Returns

PDFObject.

EXAMPLE

var obj = pdfDocument.newDictionary();

PDF Page Access#

All page objects are structured into a page tree, which defines the order the pages appear in.

countPages()#

Number of pages in the document.

Returns

Integer Page number.

EXAMPLE

var pageCount = pdfDocument.countPages();
loadPage(number)#

Return the PDFPage for a page number.

Arguments
  • numberInteger The page number, the first page is number zero.

Returns

PDFPage.

EXAMPLE

var page = pdfDocument.loadPage(0);
findPage(number)#

Return the PDFObject for a page number.

Arguments
  • numberInteger The page number, the first page is number zero.

Returns

PDFObject.

EXAMPLE

var obj = pdfDocument.findPage(0);
findPageNumber(page)#

mutool only

Given a PDFPage instance, find the page number in the document.

Arguments
  • pagePDFPage instance.

Returns

Integer.

EXAMPLE

var pageNumber = pdfDocument.findPageNumber(page);
deletePage(number)#

Delete the numbered PDFPage.

Arguments
  • number – The page number, the first page is number zero.

EXAMPLE

pdfDocument.deletePage(0);
insertPage(at, page)#

Insert the PDFPage object in the page tree at the location. If at is -1, at the end of the document.

Pages consist of a content stream, and a resource dictionary containing all of the fonts and images used.

Arguments
  • at – The index to insert at.

  • page – The PDFPage to insert.

EXAMPLE

pdfDocument.insertPage(-1, page);
addPage(mediabox, rotate, resources, contents)#

Create a new PDFPage object. Note: this function does NOT add it to the page tree, use insertPage to do that.

Arguments
  • mediabox[ulx,uly,lrx,lry] Rectangle.

  • rotate – Rotation value.

  • resources – Resources object.

  • contents – Contents string. This represents the page content stream - see section 3.7.1 in the PDF 1.7 specification.

Returns

PDFObject.

EXAMPLE

var helvetica = pdfDocument.newDictionary();
helvetica.put("Type", pdfDocument.newName("Font"));
helvetica.put("Subtype", pdfDocument.newName("Type1"));
helvetica.put("Name", pdfDocument.newName("Helv"));
helvetica.put("BaseFont", pdfDocument.newName("Helvetica"));
helvetica.put("Encoding", pdfDocument.newName("WinAnsiEncoding"));
var fonts = pdfDocument.newDictionary();
fonts.put("Helv", helvetica);
var resources = pdfDocument.addObject(pdfDocument.newDictionary());
resources.put("Font", fonts);
var pageObject = pdfDocument.addPage([0,0,300,350], 0, resources, "BT /Helv 12 Tf 100 100 Td (MuPDF!)Tj ET");
pdfDocument.insertPage(-1, pageObject);

EXAMPLE

mutool only

docs/examples/pdf-create.js#
// Create a PDF from scratch using helper functions.

// This example creates a new PDF file from scratch, using helper
// functions to create resources and page objects.
// This assumes a basic working knowledge of the PDF file format.

// Create a new empty document with no pages.
var pdf = new PDFDocument()

// Load built-in font and create WinAnsi encoded simple font resource.
var font = pdf.addSimpleFont(new Font("Times-Roman"))

// Load PNG file and create image resource.
var image = pdf.addImage(new Image("example.png"))

// Create resource dictionary.
var resources = pdf.addObject({
	Font: { Tm: font },
	XObject: { Im0: image },
})

// Create content stream data.
var contents =
	"10 10 280 330 re s\n" +
	"q 200 0 0 200 50 100 cm /Im0 Do Q\n" +
	"BT /Tm 16 Tf 50 50 TD (Hello, world!) Tj ET\n"

// Create a new page object.
var page = pdf.addPage([0,0,300,350], 0, resources, contents)

// Insert page object at the end of the document.
pdf.insertPage(-1, page)

// Save the document to file.
pdf.save("out.pdf", "pretty,ascii,compress-images,compress-fonts")
addSimpleFont(font, encoding)#

Create a PDFObject from the Font object as a simple font.

Arguments
  • fontFont.

  • encoding – The encoding to use. Encoding is either “Latin” (CP-1252), “Greek” (ISO-8859-7), or “Cyrillic” (KOI-8U). The default is “Latin”.

Returns

PDFObject.

EXAMPLE

var obj = pdfDocument.addSimpleFont(new mupdf.Font("Times-Roman"), "Latin");
addCJKFont(font, language, wmode, style)#

Create a PDFObject from the Font object as a UTF-16 encoded CID font for the given language (“zh-Hant”, “zh-Hans”, “ko”, or “ja”), writing mode (“H” or “V”), and style (“serif” or “sans-serif”).

Arguments
  • fontFont.

  • languageString.

  • wmode0 for horizontal writing, and 1 for vertical writing.

  • styleString.

Returns

PDFObject.

EXAMPLE

var obj = pdfDocument.addCJKFont(new mupdf.Font("ja"), "ja", 0, "serif");
addFont(font)#

Create a PDFObject from the Font object as an Identity-H encoded CID font.

Arguments
  • fontFont.

Returns

PDFObject.

EXAMPLE

var obj = pdfDocument.addFont(new mupdf.Font("Times-Roman"));
addImage(image)#

Create a PDFObject from the Image object.

Arguments
  • imageImage.

Returns

PDFObject.

EXAMPLE

var obj = pdfDocument.addImage(new mupdf.Image(pixmap));
loadImage(obj)#

Load an Image from a PDFObject (typically an indirect reference to an image resource).

Arguments
  • objPDFObject.

Returns

Image.

EXAMPLE

var image = pdfDocument.loadImage(obj);

Copying objects across PDFs#

The following functions can be used to copy objects from one PDF document to another:

newGraftMap()#

Create a graft map on the destination document, so that objects that have already been copied can be found again. Each graft map should only be used with one source document. Make sure to create a new graft map for each source document used.

Returns

PDFGraftMap.

EXAMPLE

var graftMap = pdfDocument.newGraftMap();
graftObject(object)#

Deep copy an object into the destination document. This function will not remember previously copied objects. If you are copying several objects from the same source document using multiple calls, you should use a graft map instead.

Arguments
  • object – Object to graft.

EXAMPLE

pdfDocument.graftObject(obj);
graftPage(to, srcDoc, srcPageNumber)#

Graft a page and its resources at the given page number from the source document to the requested page number in the document.

Arguments
  • to – The page number to insert the page before. Page numbers start at 0 and -1 means at the end of the document.

  • srcDoc – Source document.

  • srcPageNumber – Source page number.

EXAMPLE

This would copy the first page of the source document (0) to the last page (-1) of the current PDF document.

pdfDocument.graftPage(-1, srcDoc, 0);

Embedded files in PDFs#

addEmbeddedFile(filename, mimetype, contents, creationDate, modificationDate, addChecksum)#

Embedded a file into the document. If a checksum is added then the file contents can be verified later. An indirect reference to a File Specification Object is returned.

Arguments
  • filenameString.

  • mimetypeString See: Mimetype.

  • contentsBuffer.

  • creationDateDate.

  • modificationDateDate.

  • addChecksumBoolean.

Returns

Object File Specification Object.

Note

After embedding a file into a PDF, it can be connected to an annotation using PDFAnnotation.setFilespec().

EXAMPLE

var fileSpecObject = pdfDocument.addEmbeddedFile("my_file.jpg",
                                                 "image/jpeg",
                                                 buffer,
                                                 new Date(),
                                                 new Date(),
                                                 false);
getEmbeddedFiles()#

Returns the embedded files or null for the document.

Returns

Object File Specification Object.

getEmbeddedFileParams(fileSpecObject)#

Return an object describing the file referenced by the fileSpecObject.

Arguments
Returns

Object Embedded File Object.

EXAMPLE

var obj = pdfDocument.getEmbeddedFileParams(fileSpecObject);
getEmbeddedFileContents(fileSpecObject)#

Returns a Buffer with the contents of the embedded file referenced by the fileSpecObject.

Arguments
Returns

Buffer.

EXAMPLE

var buffer = pdfDocument.getEmbeddedFileContents(fileSpecObject);
verifyEmbeddedFileChecksum(fileSpecObject)#

Verify the MD5 checksum of the embedded file contents.

Arguments
Returns

Boolean.

EXAMPLE

var fileChecksumValid = pdfDocument.verifyEmbeddedFileChecksum(fileSpecObject);

PDFGraftMap#

Instance methods

graftObject(object)#

Use the graft map to copy objects, with the ability to remember previously copied objects.

Arguments
  • object – Object to graft.

EXAMPLE

var map = document.newGraftMap();
map.graftObject(obj);
graftPage(map, dstPageNumber, srcDoc, srcPageNumber)#

Graft a page and its resources at the given page number from the source document to the requested page number in the destination document connected to the map.

Arguments
  • dstPageNumber – The page number where the source page will be inserted. Page numbers start at 0, and -1 means at the end of the document.

  • srcDoc – Source document.

  • srcPageNumber – Source page number.

EXAMPLE

var map = dstdoc.newGraftMap();
map.graftObject(-1, srcdoc, 0);

PDFObject#

All functions that take PDFObjects, do automatic translation between JavaScript objects and PDFObjects using a few basic rules:

  • Null, booleans, and numbers are translated directly.

  • JavaScript strings are translated to PDF names, unless they are surrounded by parentheses: “Foo” becomes the PDF name /Foo and “(Foo)” becomes the PDF string (Foo).

  • Arrays and dictionaries are recursively translated to PDF arrays and dictionaries. Be aware of cycles though! The translation does NOT cope with cyclic references!

  • The translation goes both ways: PDF dictionaries and arrays can be accessed similarly to JavaScript objects and arrays by getting and setting their properties.

Instance properties

length

Length of the array.

Instance methods

get(ref)#

Access dictionaries and arrays in the PDFObject.

Arguments
  • ref – Key or index.

Returns

The value for the key or index.

EXAMPLE

var dict = pdfDocument.newDictionary();
var value = dict.get("my_key");
var arr = pdfDocument.newArray();
var value = arr.get(1);
put(ref, value)#

Put information into dictionaries and arrays in the PDFObject. Dictionaries and arrays can also be accessed using normal property syntax: obj.Foo = 42; delete obj.Foo; x = obj[5].

Arguments
  • ref – Key or index.

  • value – The value for the key or index.

EXAMPLE

var dict = pdfDocument.newDictionary();
dict.put("my_key", "my_value");
var arr = pdfDocument.newArray();
arr.put(0, 42);
delete(ref)#

Delete a reference from a PDFObject.

Arguments
  • ref – Key or index.

EXAMPLE

pdfObj.delete("my_key");
var dict = pdfDocument.newDictionary();
dict.put("my_key", "my_value");
dict.delete("my_key");
var arr = pdfDocument.newArray();
arr.put(1, 42);
arr.delete(1);
resolve()#

If the object is an indirect reference, return the object it points to; otherwise return the object itself.

Returns

Object.

EXAMPLE

var resolvedObj = pdfObj.resolve();
compare(other_obj)#

mutool only

Compare the object to another one. Returns 0 on match, non-zero on mismatch. Streams always mismatch.

Arguments
  • otherPDFObject.

Returns

Boolean.

EXAMPLE

var match = pdfObj.compare(other_obj);
isArray()#
Returns

Boolean.

EXAMPLE

var result = pdfObj.isArray();
isDictionary()#
Returns

Boolean.

EXAMPLE

var result = pdfObj.isDictionary();
forEach(fun)#

Iterate over all the entries in a dictionary or array and call a function for each key-value pair.

Arguments
  • fun – Function in the format function(key,value){...}.

EXAMPLE

pdfObj.forEach(function(key,value){console.log("key="+key+",value="+value)});
push(item)#

Append item to the end of an array.

Arguments
  • item – Item to add.

EXAMPLE

pdfObj.push("item");
toString()#

Returns the object as a pretty-printed string.

Returns

String.

EXAMPLE

var str = pdfObj.toString();
valueOf()#

mutool only

Convert primitive PDF objects to a corresponding primitive Null, Boolean, Number or String JavaScript objects. Indirect PDF objects get converted to the string “R” while PDF names are converted to plain strings. PDF arrays or dictionaries are returned unchanged.

Returns

Null | Boolean | Number | String.

EXAMPLE

var val = pdfObj.valueOf();
isIndirect()#

Is the object an indirect reference.

Returns

Boolean.

EXAMPLE

var val = pdfObj.isIndirect();
asIndirect()#

Return the object number the indirect reference points to.

Returns

Integer.

EXAMPLE

var val = pdfObj.asIndirect();

PDF streams#

The only way to access a stream is via an indirect object, since all streams are numbered objects.

isStream()#

True if the object is an indirect reference pointing to a stream.

Returns

Boolean.

EXAMPLE

var val = pdfObj.isStream();
readStream()#

Read the contents of the stream object into a Buffer.

Returns

Buffer.

EXAMPLE

var buffer = pdfObj.readStream();
readRawStream()#

Read the raw, uncompressed, contents of the stream object into a Buffer.

Returns

Buffer.

EXAMPLE

var buffer = pdfObj.readRawStream();
writeObject(obj)#

Update the object the indirect reference points to.

Arguments
  • obj – Object to update.

EXAMPLE

pdfObj.writeObject(obj);
writeStream(buffer)#

Update the contents of the stream the indirect reference points to. This will update the “Length”, “Filter” and “DecodeParms” automatically.

Arguments
  • bufferBuffer.

EXAMPLE

pdfObj.writeStream(buffer);
writeRawStream(buffer)#

Update the contents of the stream the indirect reference points to. The buffer must contain already compressed data that matches the “Filter” and “DecodeParms”. This will update the “Length” automatically, but leave the “Filter” and “DecodeParms” untouched.

Arguments
  • bufferBuffer.

EXAMPLE

pdfObj.writeRawStream(buffer);

Primitive Objects#

Primitive PDF objects such as booleans, names, and numbers can usually be treated like JavaScript values. When that is not sufficient use these functions:

isNull()#

Returns true if the object is a null object.

Returns

Boolean.

EXAMPLE

var val = pdfObj.isNull();
isBoolean()#

Returns true if the object is a Boolean object.

Returns

Boolean.

EXAMPLE

var val = pdfObj.isBoolean();
asBoolean()#

Get the boolean primitive value.

Returns

Boolean.

EXAMPLE

var val = pdfObj.asBoolean();
isNumber()#

Returns true if the object is a Number object.

Returns

Boolean.

EXAMPLE

var val = pdfObj.isNumber();
asNumber()#

Get the number primitive value.

Returns

Integer.

EXAMPLE

var val = pdfObj.asNumber();
isName()#

Returns true if the object is a Name object.

Returns

Boolean.

EXAMPLE

var val = pdfObj.isName();
asName()#

Get the name as a string.

Returns

String.

EXAMPLE

var val = pdfObj.asName();
isString()#

Returns true if the object is a String object.

Returns

Boolean.

EXAMPLE

var val = pdfObj.isString();
asString()#

Convert a “text string” to a JavaScript unicode string.

Returns

String.

EXAMPLE

var val = pdfObj.asString();
asByteString()#

Convert a string to an array of byte values.

Returns

[...].

EXAMPLE

var val = pdfObj.asByteString();

PDFPage#

Extends Page.

Instance methods

getAnnotations()#

Return array of all annotations on the page.

Returns

[...].

EXAMPLE

var annots = pdfPage.getAnnotations();
createAnnotation(type)#

Create a new blank annotation of a given type.

Arguments
Returns

PDFAnnotation.

EXAMPLE

var annot = pdfPage.createAnnotation("Text");

Annotation types

Note

Annotation types are also referred to as “subtypes”.

Name

Supported

Notes

Text

Yes

Link

Yes

Please use Page.createLink().

FreeText

Yes

Square

Yes

Circle

Yes

Line

Yes

Polygon

Yes

PolyLine

Yes

Highlight

Yes

Underline

Yes

Squiggly

Yes

StrikeOut

Yes

Redact

Yes

Stamp

Yes

Caret

Yes

Ink

Yes

Popup

No

FileAttachment

Yes

Sound

No

Movie

No

RichMedia

No

Widget

No

Screen

No

PrinterMark

No

TrapNet

No

Watermark

No

3D

No

Projection

No

deleteAnnotation(annot)#

Delete the annotation from the page.

Arguments
  • annotPDFAnnotation.

EXAMPLE

pdfPage.deleteAnnotation(annot);
getWidgets()#

Return array of all widgets on the page.

Returns

[...].

EXAMPLE

var widgets = pdfPage.getWidgets();
update()#

Loop through all annotations of the page and update them. Returns true if re-rendering is needed because at least one annotation was changed (due to either events or JavaScript actions or annotation editing).

EXAMPLE

pdfPage.update();
applyRedactions(blackBoxes, imageMethod)#

Applies redactions to the page.

Arguments
  • blackBoxesBoolean Whether to use black boxes at each redaction or not.

  • imageMethodInteger. 0 for no redactions, 1 to redact entire images, 2 for redacting just the covered pixels.

Note

Redactions are secure as they remove the affected content completely.

EXAMPLE

pdfPage.applyRedactions(true, 1);
process(processor)#

Run through the page contents stream and call methods on the supplied PDF processor.

Arguments
  • processor – User defined function.

EXAMPLE

pdfPage.process(processor);
toPixmap(transform, colorspace, alpha, renderExtra, usage, box)#

Render the page into a Pixmap using the given colorspace and alpha while applying the transform. Rendering of annotations/widgets can be disabled. A page can be rendered for e.g. “View” or “Print” usage.

Arguments
  • transform[a,b,c,d,e,f] The transform matrix.

  • colorspaceColorSpace.

  • alphaBoolean.

  • renderExtraBoolean Whether annotations and widgets should be rendered.

  • usageString “View” or “Print”.

  • boxString Default is “CropBox”.

Returns

Pixmap.

EXAMPLE

var pixmap = pdfPage.toPixmap(mupdf.Matrix.identity,
                              mupdf.ColorSpace.DeviceRGB,
                              false,
                              true,
                              "View",
                              "CropBox");

PDFAnnotation#

PDF Annotations belong to a specific PDFPage and may be created/changed/removed. Because annotation appearances may change (for several reasons) it is possible to scan through the annotations on a page and query them to see whether a re-render is necessary. Finally redaction annotations can be applied to a PDFPage, destructively removing content from the page.

To get the annotations on a page see: PDFPage getAnnotations(), to create an annotation see: PDFPage createAnnotation().

Instance methods

getBounds()#

Returns a rectangle containing the location and dimension of the annotation.

Returns

[ulx,uly,lrx,lry] Rectangle.

EXAMPLE

var bounds = annotation.getBounds();
run(device, transform)#

Calls the device functions to draw the annotation.

Arguments
  • deviceDevice.

  • transform[a,b,c,d,e,f]. The transform matrix.

EXAMPLE

annotation.run(device, mupdf.Matrix.identity);
toPixmap(transform, colorspace, alpha)#

Render the annotation into a Pixmap, using the transform and colorspace.

Arguments
  • transform[a,b,c,d,e,f]. The transform matrix.

  • colorspaceColorSpace.

  • alphaBoolean.

Returns

Pixmap.

EXAMPLE

var pixmap = annotation.toPixmap(mupdf.Matrix.identity, mupdf.ColorSpace.DeviceRGB, true);
toDisplayList()#

Record the contents of the annotation into a DisplayList.

Returns

DisplayList.

EXAMPLE

var displayList = annotation.toDisplayList();
getObject()#

Get the underlying PDFObject for an annotation.

Returns

PDFObject.

EXAMPLE

var obj = annotation.getObject();
process(processor)#

mutool only

Run through the annotation appearance stream and call methods on the supplied PDF processor.

Arguments
  • processor – User defined function.

EXAMPLE

annotation.process(processor);
setAppearance(appearance, state, transform, displayList)#

Set the annotation appearance stream for the given appearance. The desired appearance is given as a transform along with a display list.

Arguments
  • appearanceString Appearance stream (“N”, “R” or “D”).

  • stateString The annotation state to set the appearance for or null for the current state. Only widget annotations of pushbutton, check box, or radio button type have states, which are “Off” or “Yes”. For other types of annotations pass null.

  • transform[a,b,c,d,e,f]. The transform matrix.

  • displayListDisplayList.

EXAMPLE

annotation.setAppearance("N", null, mupdf.Matrix.identity, displayList);
setAppearance(appearance, state, transform, bbox, resources, contents)#

Set the annotation appearance stream for the given appearance. The desired appearance is given as a transform along with a bounding box, a PDF dictionary of resources and a content stream.

Arguments
  • appearanceString Appearance stream (“N”, “R” or “D”).

  • stateString The annotation state to set the appearance for or null for the current state. Only widget annotations of pushbutton, check box, or radio button type have states, which are “Off” or “Yes”. For other types of annotations pass null.

  • transform[a,b,c,d,e,f]. The transform matrix.

  • bbox[ulx,uly,lrx,lry] Rectangle.

  • resources – Resources object.

  • contents – Contents string.

EXAMPLE

annotation.setAppearance("N", null, mupdf.Matrix.identity, [0,0,100,100], resources, contents);

Appearance stream values

Value

Description

N

normal appearance

R

roll-over appearance

D

down (pressed) appearance

update()#

Update the appearance stream to account for changes in the annotation.

EXAMPLE

annotation.update();
getHot()#

mutool only

Get the annotation as being hot, i.e. that the pointer is hovering over the annotation.

Returns

Boolean.

EXAMPLE

annotation.getHot();
setHot(hot)#

mutool only

Set the annotation as being hot, i.e. that the pointer is hovering over the annotation.

Arguments
  • hotBoolean.

EXAMPLE

annotation.setHot(true);
getHiddenForEditing()#

mutool only

Get a special annotation hidden flag for editing. This flag prevents the annotation from being rendered.

Returns

Boolean.

EXAMPLE

var hidden = annotation.getHiddenForEditing();
setHiddenForEditing(hidden)#

mutool only

Set a special annotation hidden flag for editing. This flag prevents the annotation from being rendered.

Arguments
  • hiddenBoolean.

EXAMPLE

annotation.setHiddenForEditing(true);
getType()#

Return the annotation type.

Returns

String Annotation type.

EXAMPLE

var type = annotation.getType();
getFlags()#

Get the annotation flags.

Returns

Integer representaton of a bit-field of flags specified below.

EXAMPLE

var flags = annotation.getFlags();
setFlags(flags)#

Set the annotation flags.

Arguments
  • flagsInteger representaton of a bit-field of flags specified below.

EXAMPLE

annotation.setFlags(8); // Clears all other flags and sets NoZoom.

Annotation flags

Bit position

Name

1

Invisible

2

Hidden

3

Print

4

NoZoom

5

NoRotate

6

NoView

7

ReadOnly

8

Locked

9

ToggleNoView

10

LockedContents

getContents()#

Get the annotation contents.

Returns

String.

EXAMPLE

var contents = annotation.getContents();
setContents(text)#

Set the annotation contents.

Arguments
  • textString.

EXAMPLE

annotation.setContents("Hello World");
getBorder()#

mutool only

Get the annotation border line width in points.

Returns

Float.

EXAMPLE

var border = annotation.getBorder();
setBorder(width)#

mutool only

Set the annotation border line width in points. Use setBorderWidth() to avoid removing the border effect.

Arguments
  • widthFloat Border width.

EXAMPLE

annotation.setBorder(1.0);
getColor()#

Get the annotation color, represented as an array of 1, 3, or 4 component values.

Returns

The color value.

EXAMPLE

var color = annotation.getColor();
setColor(color)#

Set the annotation color, represented as an array of 1, 3, or 4 component values.

Arguments

EXAMPLE

annotation.setColor([0,1,0]);
getOpacity()#

Get the annotation opacity.

Returns

The opacity value.

EXAMPLE

var opacity = annotation.getOpacity();
setOpacity(opacity)#

Set the annotation opacity.

Arguments

EXAMPLE

annotation.setOpacity(0.5);
getCreationDate()#

Get the annotation creation date as a JavaScript Date object.

Returns

Date.

EXAMPLE

var date = annotation.getCreationDate();
setCreationDate(date)#

Set the creation date.

Arguments
  • dateDate.

EXAMPLE

annotation.setCreationDate(new Date());
getModificationDate()#

Get the annotation modification date as a JavaScript Date object.

Returns

Date.

EXAMPLE

var date = annotation.getModificationDate();
setModificationDate(date)#

Set the modification date.

Arguments
  • dateDate.

EXAMPLE

annotation.setModificationDate(new Date());
getQuadding()#

Get the annotation quadding (justification).

Returns

Quadding value, 0 for left-justified, 1 for centered, 2 for right-justified.

EXAMPLE

var quadding = annotation.getQuadding();
setQuadding(value)#

Set the annotation quadding (justification).

Arguments
  • value – Quadding value, 0 for left-justified, 1 for centered, 2 for right-justified.

EXAMPLE

annotation.setQuadding(1);
getLanguage()#

Get the annotation language (or get the inherited document language).

Returns

String.

EXAMPLE

var language = annotation.getLanguage();
setLanguage(language)#

Set the annotation language.

Arguments
  • languageString.

EXAMPLE

annotation.setLanguage("en");

These properties are only present for some annotation types, so support for them must be checked before use.

hasRect()#

Checks the support for annotation bounding box.

Returns

Boolean.

EXAMPLE

var hasRect = annotation.hasRect();
getRect()#

Get the annotation bounding box.

Returns

[ulx,uly,lrx,lry] Rectangle.

EXAMPLE

var rect = annotation.getRect();
setRect(rect)#

Set the annotation bounding box.

Arguments

EXAMPLE

annotation.setRect([0,0,100,100]);
getDefaultAppearance()#

Get the default text appearance used for free text annotations.

Returns

{font:String, size:Integer, color:[r,g,b]} Returns a default text appearance with the key/value pairs.

EXAMPLE

var appearance = annotation.getDefaultAppearance();
setDefaultAppearance(font, size, color)#

Set the default text appearance used for free text annotations.

Arguments
  • fontString (“Helv” = Helvetica, “TiRo” = Times New Roman, “Cour” = Courier).

  • sizeInteger.

  • color – The color value.

EXAMPLE

annotation.setDefaultAppearance("Helv", 16, [0,0,0]);
hasInteriorColor()#

Checks whether the annotation has support for an interior color.

Returns

Boolean.

EXAMPLE

var hasInteriorColor = annotation.hasInteriorColor();
getInteriorColor()#

Gets the annotation interior color.

Returns

The color value.

EXAMPLE

var interiorColor = annotation.getInteriorColor();
setInteriorColor(color)#

Sets the annotation interior color.

Arguments

EXAMPLE

annotation.setInteriorColor([0,1,1]);
hasAuthor()#

Checks whether the annotation has an author.

Returns

Boolean.

EXAMPLE

var hasAuthor = annotation.hasAuthor();
getAuthor()#

Gets the annotation author.

Returns

String.

EXAMPLE

var author = annotation.getAuthor();
setAuthor(author)#

Sets the annotation author.

Arguments
  • authorString.

EXAMPLE

annotation.setAuthor("Jane Doe");
hasLineEndingStyles()#

Checks the support for line ending styles.

Returns

Boolean.

EXAMPLE

var hasLineEndingStyles = annotation.hasLineEndingStyles();
getLineEndingStyles()#

Gets the line ending styles object.

Returns

{start:String, end:String} Returns an object with the key/value pairs.

EXAMPLE

var lineEndingStyles = annotation.getLineEndingStyles();
setLineEndingStyles(start, end)#

Sets the line ending styles object.

Arguments
  • startString.

  • endString.

EXAMPLE

annotation.setLineEndingStyles({start:"Square", end:"OpenArrow"});

Line ending names

“None”

“Square”

“Circle”

“Diamond”

“OpenArrow”

“ClosedArrow”

“Butt”

“ROpenArrow”

“RClosedArrow”

“Slash”

hasIcon()#

Checks the support for annotation icon.

Returns

Boolean.

EXAMPLE

var hasIcon = annotation.hasIcon();
getIcon()#

Gets the annotation icon name, either one of the standard icon names, or something custom.

Returns

String.

EXAMPLE

var icon = annotation.getIcon();
setIcon(name)#

Sets the annotation icon name, either one of the standard icon names, or something custom. Note that standard icon names can be used to resynthesize the annotation apperance, but custom names cannot.

Arguments
  • nameString.

EXAMPLE

annotation.setIcon("Note");

Icon type

Icon name

File attachment

“Graph”

“PaperClip”

“PushPin”

“Tag”

Sound

“Mic”

“Speaker”

Stamp

“Approved”

“AsIs”

“Confidential”

“Departmental”

“Draft”

“Experimental”

“Expired”

“Final”

“ForComment”

“ForPublicRelease”

“NotApproved”

“NotForPublicRelease”

“Sold”

“TopSecret”

Text

“Comment”

“Help”

“Insert”

“Key”

“NewParagraph”

“Note”

“Paragraph”

hasLine()#

mutool only

Checks the support for annotation line.

Returns

Boolean.

EXAMPLE

var hasLine = annotation.hasLine();
getLine()#

Get line end points, represented by an array of two points, each represented as an [x, y] array.

Returns

[[x,y],...].

EXAMPLE

var line = annotation.getLine();
setLine(endpoints)#

Set the two line end points, represented by an array of two points, each represented as an [x, y] array.

Arguments
  • endpoint1[x,y].

  • endpoint2[x,y].

EXAMPLE

annotation.setLine([100,100], [150, 175]);
hasOpen()#

Checks the support for annotation open state.

Returns

Boolean.

EXAMPLE

var hasOpen = annotation.hasOpen();
getIsOpen()#

Get annotation open state.

Returns

Boolean.

EXAMPLE

var isOpen = annotation.getIsOpen();
setIsOpen(state)#

Set annotation open state.

Arguments
  • stateBoolean.

EXAMPLE

annotation.setIsOpen(true);

Note

“Open” refers to whether the annotation is display in an open state when the page is loaded. A Text Note annotation is considered “Open” if the user has clicked on it to view its contents.

hasFilespec()#

Checks support for the annotation file specification.

Returns

Boolean.

EXAMPLE

var hasFileSpec = annotation.hasFilespec();
getFilespec()#

Gets the file specification object.

Returns

Object File Specification Object.

EXAMPLE

var fileSpec = annotation.getFilespec(true);
setFilespec(fileSpecObject)#

Sets the file specification object.

Arguments

EXAMPLE

annotation.setFilespec({filename:"my_file.pdf",
                        mimetype:"application/pdf",
                        size:1000,
                        creationDate:date,
                        modificationDate:date});

The border drawn around some annotations can be controlled by:

hasBorder()#

Check support for the annotation border style.

Returns

Boolean.

EXAMPLE

var hasBorder = annotation.hasBorder();
getBorderStyle()#

Get the annotation border style, either of “Solid” or “Dashed”.

Returns

String.

EXAMPLE

var borderStyle = annotation.getBorderStyle();
setBorderStyle(style)#

Set the annotation border style, either of “Solid” or “Dashed”.

Arg

String.

EXAMPLE

annotation.setBorderStyle("Dashed");
getBorderWidth()#

Get the border width in points.

Returns

Float.

EXAMPLE

var w = annotation.getBorderWidth();
setBorderWidth(width)#

Set the border width in points. Retain any existing border effects.

Arguments
  • widthFloat.

EXAMPLE

annotation.setBorderWidth(1.5);
getBorderDashCount()#

Returns the number of items in the border dash pattern.

Returns

Integer.

EXAMPLE

var dashCount = annotation.getBorderDashCount();
getBorderDashItem(i)#

Returns the length of dash pattern item i.

Arguments
  • iInteger Item index.

Returns

Float.

EXAMPLE

var length = annotation.getBorderDashItem(0);
setBorderDashPattern(dashPattern)#

Set the annotation border dash pattern to the given array of dash item lengths. The supplied array represents the respective line stroke and gap lengths, e.g. [1,1] sets a small dash and small gap, [2,1,4,1] would set a medium dash, a small gap, a longer dash and then another small gap.

Arguments
  • dashpattern – [Float, Float, ….].

EXAMPLE

annotation.setBorderDashPattern([2.0, 1.0, 4.0, 1.0]);
clearBorderDash()#

Clear the entire border dash pattern for an annotation.

EXAMPLE

annotation.clearBorderDash();
addBorderDashItem(length)#

Append an item (of the given length) to the end of the border dash pattern.

Arguments
  • lengthFloat.

EXAMPLE

annotation.addBorderDashItem(10.0);

Annotations that have a border effect allows the effect to be controlled by:

hasBorderEffect()#

Check support for annotation border effect.

Returns

Boolean.

EXAMPLE

var hasEffect = annotation.hasBorderEffect();
getBorderEffect()#

Get the annotation border effect, either of “None” or “Cloudy”.

Returns

String.

EXAMPLE

var effect = annotation.getBorderEffect();
setBorderEffect(effect)#

Set the annotation border effect, either of “None” or “Cloudy”.

Arg

String.

EXAMPLE

annotation.setBorderEffect("None");
getBorderEffectIntensity()#

Get the annotation border effect intensity.

Returns

Float.

EXAMPLE

var intensity = annotation.getBorderEffectIntensity();
setBorderEffectIntensity(intensity)#

Set the annotation border effect intensity. Recommended values are between 0 and 2 inclusive.

Arg

Float.

EXAMPLE

annotation.setBorderEffectIntensity(1.5);

Ink annotations consist of a number of strokes, each consisting of a sequence of vertices between which a smooth line will be drawn. These can be controlled by:

hasInkList()#

Check support for the annotation ink list.

Returns

Boolean.

EXAMPLE

var hasInkList = annotation.hasInkList();
getInkList()#

Get the annotation ink list, represented as an array of strokes, each an array of points each an array of its X/Y coordinates.

Returns

[...].

EXAMPLE

var inkList = annotation.getInkList();
setInkList(inkList)#

Set the annotation ink list, represented as an array of strokes, each an array of points each an array of its X/Y coordinates.

Arg

[...].

EXAMPLE

annotation.setInkList([
                          [
                              [0,0]
                          ],
                          [
                              [10,10], [20,20], [30,30]
                          ]
                      ]);
clearInkList()#

Clear the list of ink strokes for the annotation.

EXAMPLE

annotation.clearInkList();
addInkList(stroke)#

To the list of strokes, append a stroke, represented as an array of vertices each an array of its X/Y coordinates.

Arguments
  • stroke[].

EXAMPLE

annotation.addInkList(
                        [
                            [0,0]
                        ],
                        [
                            [10,10], [20,20], [30,30]
                        ]
                     );
addInkListStroke()#

Add a new empty stroke to the ink annotation.

EXAMPLE

annotation.addInkListStroke();
addInkListStrokeVertex(vertex)#

Append a vertex to end of the last stroke in the ink annotation. The vertex is an array of its X/Y coordinates.

Arguments
  • vertex[...].

EXAMPLE

annotation.addInkListStrokeVertex([0,0]);

Text markup and redaction annotations consist of a set of quadadrilaterals controlled by:

hasQuadPoints()#

Check support for the annotation quadpoints.

Returns

Boolean.

EXAMPLE

var hasQuadPoints = annotation.hasQuadPoints();
getQuadPoints()#

Get the annotation quadpoints, describing the areas affected by text markup annotations and link annotations.

Returns

[...].

EXAMPLE

var quadPoints = annotation.getQuadPoints();
setQuadPoints(quadPoints)#

Set the annotation quadpoints, describing the areas affected by text markup annotations and link annotations.

Arguments
  • quadPoints[...].

EXAMPLE

annotation.setQuadPoints([
                            [1,2,3,4,5,6,7,8],
                            [1,2,3,4,5,6,7,8],
                            [1,2,3,4,5,6,7,8]
                        ]);
clearQuadPoints()#

Clear the list of quad points for the annotation.

EXAMPLE

annotation.clearQuadPoints();
addQuadPoint(quadpoint)#

Append a single quad point as an array of 8 elements, where each pair are the X/Y coordinates of a corner of the quad.

Arguments
  • quadpoint[].

EXAMPLE

annotation.addQuadPoint([1,2,3,4,5,6,7,8]);

Polygon and polyline annotations consist of a sequence of vertices with a straight line between them. Those can be controlled by:

hasVertices()#

Check support for the annotation vertices.

Returns

Boolean.

EXAMPLE

var hasVertices = annotation.hasVertices();
getVertices()#

Get the annotation vertices, represented as an array of vertices each an array of its X/Y coordinates.

Returns

[...].

EXAMPLE

var vertices = annotation.getVertices();
setVertices(vertices)#

Set the annotation vertices, represented as an array of vertices each an array of its X/Y coordinates.

Arguments
  • vertices[...].

EXAMPLE

annotation.setVertices([
                        [0,0],
                        [10,10],
                        [20,20]
                      ]);
clearVertices()#

Clear the list of vertices for the annotation.

EXAMPLE

annotation.clearVertices();
addVertex(vertex)#

Append a single vertex as an array of its X/Y coordinates.

Arguments
  • vertex[...].

EXAMPLE

annotation.addVertex([0,0]);
applyRedaction(blackBoxes, imageMethod)#

Applies redaction to the annotation.

Arguments
  • blackBoxesBoolean Whether to use black boxes at each redaction or not.

  • imageMethodInteger. 0 for no redactions, 1 to redact entire images, 2 for redacting just the covered pixels.

Note

Redactions are secure as they remove the affected content completely.

EXAMPLE

annotation.applyRedaction(true, 1);

PDFWidget#

Widgets refer to components which make up form items such as buttons, text inputs and signature fields.

To get the widgets on a page see: PDFPage getWidgets().

Instance methods

getFieldType()#

mutool only

Return String indicating type of widget: “button”, “checkbox”, “combobox”, “listbox”, “radiobutton”, “signature” or “text”.

Returns

String.

EXAMPLE

var type = widget.getFieldType();
getFieldFlags()#

Return the field flags. Refer to the PDF specification for their meanings.

Returns

Integer which determines the bit-field value.

EXAMPLE

var flags = widget.getFieldFlags();
getRect()#

Get the widget bounding box.

Returns

[ulx,uly,lrx,lry] Rectangle.

EXAMPLE

var rect = widget.getRect();
setRect(rect)#

Set the widget bounding box.

Arguments

EXAMPLE

widget.setRect([0,0,100,100]);
getMaxLen()#

Get maximum allowed length of the string value.

Returns

Integer.

EXAMPLE

var length = widget.getMaxLen();
getValue()#

Get the widget value.

Returns

String.

EXAMPLE

var value = widget.getValue();
setTextValue(value)#

Set the widget string value.

Arguments
  • valueString.

EXAMPLE

widget.setTextValue("Hello World!");
setChoiceValue(value)#

Sets the value against the widget.

Arguments
  • valueString.

EXAMPLE

widget.setChoiceValue("Yes");
toggle()#

Toggle the state of the widget, returns 1 if the state changed.

Returns

Integer.

EXAMPLE

var state = widget.toggle();
getOptions()#

Returns an array of strings which represents the value for each corresponding radio button or checkbox field.

Returns

[...].

EXAMPLE

var options = widget.getOptions();
layoutTextWidget()#

mutool only

Layout the value of a text widget. Returns a Text Layout Object.

Returns

Object.

EXAMPLE

var layout = widget.layoutTextWidget();
isReadOnly()#

If the value is read only and the widget cannot be interacted with.

Returns

Boolean.

EXAMPLE

var isReadOnly = widget.isReadOnly();
getLabel()#

Get the field name as a string.

Returns

String.

EXAMPLE

var label = widget.getLabel();
getEditingState()#

mutool only

Gets whether the widget is in editing state.

Returns

Boolean.

EXAMPLE

var state = widget.getEditingState();
setEditingState(state)#

mutool only

Set whether the widget is in editing state.

Arguments
  • stateBoolean.

EXAMPLE

widget.getEditingState(false);

Note

When in editing state any changes to the widget value will not cause any side-effects such as changing other widgets or running JavaScript. This is intended for, e.g. when a text widget is interactively having characters typed into it. Once editing is finished the state should reverted back, before updating the widget value again.

update()#

Update the appearance stream to account for changes to the widget.

EXAMPLE

widget.update();

Signature Methods#

isSigned()#

mutool only

Returns true if the signature is signed.

Returns

Boolean.

EXAMPLE

var isSigned = widget.isSigned();
validateSignature()#

mutool only

Returns number of updates ago when signature became invalid. Returns 0 is signature is still valid, 1 if it became invalid during the last save, etc.

Returns

Integer.

EXAMPLE

var validNum = widget.validateSignature();
checkCertificate()#

mutool only

Returns “OK” if signature checked out OK, otherwise a text string containing an error message, e.g. “Self-signed certificate.” or “Signature invalidated by change to document.”, etc.

Returns

String.

EXAMPLE

var result = widget.checkCertificate();
getSignatory()#

mutool only

Returns a text string with the distinguished name from a signed signature, or a text string with an error message.

Returns

String.

EXAMPLE

var signatory = widget.getSignatory();
previewSignature(signer, signatureConfig, image, reason, location)#

mutool only

Return a Pixmap preview of what the signature would look like if signed with the given configuration. Reason and location may be undefined, in which case they are not shown.

Arguments
Returns

Pixmap.

EXAMPLE

var pixmap = widget.previewSignature(signer, {showLabels:true, showDate:true}, image, "", "");
sign(signer, signatureConfig, image, reason, location)#

mutool only

Sign the signature with the given configuration. Reason and location may be undefined, in which case they are not shown.

Arguments

EXAMPLE

widget.sign(signer, {showLabels:true, showDate:true}, image, "", "");
clearSignature()#

mutool only

Clear a signed signature, making it unsigned again.

EXAMPLE

widget.clearSignature();

Widget Events#

eventEnter()#

mutool only

Trigger the event when the pointing device enters a widget’s active area.

EXAMPLE

widget.eventEnter();
eventExit()#

mutool only

Trigger the event when the pointing device exits a widget’s active area.

EXAMPLE

widget.eventExit();
eventDown()#

mutool only

Trigger the event when the pointing device’s button is depressed within a widget’s active area.

EXAMPLE

widget.eventDown();
eventUp()#

mutool only

Trigger the event when the pointing device’s button is released within a widget’s active area.

EXAMPLE

widget.eventUp();
eventFocus()#

mutool only

Trigger the event when the a widget gains input focus.

EXAMPLE

widget.eventFocus();
eventBlur()#

mutool only

Trigger the event when the a widget loses input focus.

EXAMPLE

widget.eventBlur();

PDFPKCS7Signer#

Creating a Signer

To create a signer object an instance of PDFPKCS7Signer is required.

new(filename, password)#

mutool only

Read a certificate and private key from a pfx file and create a signer to hold this information. Used with PDFWidget.sign().

Arguments
  • filenameString.

  • passwordString.

Returns

PDFPKCS7Signer.

EXAMPLE

var signer = new PDFPKCS7Signer(<file_name>, <password>);

StrokeState#

A StrokeState object is used to define stroke styles.

new StrokeState()#

Constructor method.

Create a new empty stroke state object.

Returns

StrokeState.

EXAMPLE

var strokeState = new mupdf.StrokeState();

Instance methods

setLineCap(style)#
Arguments
  • styleString One of “Butt”, “Round” or “Square”.

EXAMPLE

strokeState.setLineCap("Butt");
getLineCap()#
Returns

String One of “Butt”, “Round” or “Square”.

EXAMPLE

var lineCap = strokeState.getLineCap();
setLineJoin(style)#
Arguments
  • styleString One of “Miter”, “Round” or “Bevel”.

EXAMPLE

strokeState.setLineJoin("Butt");
getLineJoin()#
Returns

String One of “Miter”, “Round” or “Bevel”.

EXAMPLE

var lineJoin = strokeState.getLineJoin();
setLineWidth(width)#
Arguments
  • widthInteger.

EXAMPLE

strokeState.setLineWidth(2);
getLineWidth()#
Returns

Integer.

EXAMPLE

var width = strokeState.getLineWidth();
setMiterLimit(width)#
Arguments
  • widthInteger.

EXAMPLE

strokeState.setMiterLimit(2);
getMiterLimit()#
Returns

Integer.

EXAMPLE

var limit = strokeState.getMiterLimit();

OutlineIterator#

An outline iterator can be used to walk over all the items in an Outline and query their properties. To be able to insert items at the end of a list of sibling items, it can also walk one item past the end of the list. To get an instance of OutlineIterator use Document outlineIterator.

Note

In the context of a PDF file, the document’s Outline is also known as Table of Contents or Bookmarks.

Instance methods

item()#

Return an Outline Iterator Object or undefined if out of range.

Returns

Object.

EXAMPLE

var obj = outlineIterator.item();
next()#

Move the iterator position to “next”.

Returns

Int which is negative if this movement is not possible, 0 if the new position has a valid item, or 1 if the new position has no item but one can be inserted here.

EXAMPLE

var result = outlineIterator.next();
prev()#

Move the iterator position to “previous”.

Returns

Int which is negative if this movement is not possible, 0 if the new position has a valid item, or 1 if the new position has no item but one can be inserted here.

EXAMPLE

var result = outlineIterator.prev();
up()#

Move the iterator position “up”.

Returns

Int which is negative if this movement is not possible, 0 if the new position has a valid item, or 1 if the new position has no item but one can be inserted here.

EXAMPLE

var result = outlineIterator.up();
down()#

Move the iterator position “down”.

Returns

Int which is negative if this movement is not possible, 0 if the new position has a valid item, or 1 if the new position has no item but one can be inserted here.

EXAMPLE

var result = outlineIterator.down();
insert(item)#

Insert item before the current item. The position does not change.

Arguments
Returns

Int which is 0 if the current position has a valid item, or 1 if the position has no valid item.

EXAMPLE

var valid = outlineIterator.insert(item);
delete()#

Delete the current item. This implicitly moves to the next item.

Returns

Int which is 0 if the new position has a valid item, or 1 if the position contains no valid item, but one may be inserted at this position.

EXAMPLE

outlineIterator.delete();
update(item)#

Updates the current item properties with values from the supplied item’s properties.

Arguments

EXAMPLE

outlineIterator.update(item);

Archive#

mutool only

new Archive(path)#

Constructor method.

Create a new archive based either on a tar or zip file or the contents of a directory.

Arguments
  • pathString.

Returns

Archive.

EXAMPLE

var archive = new mupdf.Archive("example1.zip");
var archive2 = new mupdf.Archive("example2.tar");

Instance methods

getFormat()#

Returns a string describing the archive format.

Returns

String.

EXAMPLE

var archive = new mupdf.Archive("example1.zip");
print(archive.getFormat());
countEntries()#

Returns the number of entries in the archive.

Returns

Integer.

EXAMPLE

var archive = new mupdf.Archive("example1.zip");
var numEntries = archive.countEntries();
listEntry(idx)#

Returns the name of entry number idx in the archive.

Arguments
  • idxInteger.

Returns

String.

EXAMPLE

var archive = new mupdf.Archive("example1.zip");
var entry = archive.listEntry(0);
hasEntry(name)#

Returns true if an entry of the given name exists in the archive.

Arguments
  • nameString.

Returns

Boolean.

EXAMPLE

var archive = new mupdf.Archive("example1.zip");
var hasEntry = archive.hasEntry("file1.txt");
readEntry(name)#

Returns the contents of the entry of the given name.

Arguments
  • nameString.

Returns

String.

EXAMPLE

var archive = new mupdf.Archive("example1.zip");
var contents = archive.readEntry("file1.txt");

MultiArchive#

mutool only

new MultiArchive()#

Constructor method.

Create a new empty multi archive.

Returns

MultiArchive.

EXAMPLE

var multiArchive = new mupdf.MultiArchive();

Instance methods

mountArchive(subArchive, path)#

Add an archive to the set of archives handled by a multi archive. If path is null, the subArchive contents appear at the top-level, otherwise they will appear prefixed by the string path.

Arguments
  • subArchiveArchive.

  • pathString.

EXAMPLE

var archive = new mupdf.MultiArchive();
archive.mountArchive(new mupdf.Archive("example1.zip"), null);
archive.mountArchive(new mupdf.Archive("example2.tar"), "subpath");
print(archive.hasEntry("file1.txt"));
print(archive.hasEntry("subpath/file2.txt"));

Assuming that example1.zip contains a file1.txt and example2.tar contains file2.txt, the multiarchive now allows access to “file1.txt” and “subpath/file2.txt”.

TreeArchive#

mutool only

new TreeArchive()#

Constructor method.

Create a new empty tree archive.

Returns

TreeArchive.

EXAMPLE

var treeArchive = new mupdf.TreeArchive();

Instance methods

add(name, buffer)#

Add a named buffer to a tree archive.

Arguments
  • nameString.

  • bufferBuffer.

EXAMPLE

var buf = new mupdf.Buffer();
buf.writeLine("hello world!");
var archive = new mupdf.TreeArchive();
archive.add("file2.txt", buf);
print(archive.hasEntry("file2.txt"));

Story#

mutool only

new Story(contents, userCSS, em, archive)#

Constructor method.

Create a new story with the given contents, formatted according to the provided userCSS and em size, and an archive to lookup images, etc.

Arguments
  • contentsString HTML source code. If omitted, a basic minimum is generated.

  • userCSSString CSS source code. If provided, must contain valid CSS specifications.

  • emFloat The default text font size.

  • archive – An Archive from which to load resources for rendering. Currently supported resource types are images and text fonts. If omitted, the Story will not try to look up any such data and may thus produce incomplete output.

EXAMPLE

var story = new mupdf.Story(<contents>, <css>, <em>, <archive>);

Instance methods

document()#

Return an XML for an unplaced story. This allows adding content before placing the Story.

Returns

XML.

EXAMPLE

var xml = story.document();
place(rect)#

Place (or continue placing) a Story into the supplied rectangle, returning a Placement Result Object. Call draw() to draw the placed content before calling place() again to continue placing remaining content.

Arguments
Returns

Placement Result Object.

EXAMPLE

var result = story.place([0,0,100,100]);
draw(device, transform)#

Draw the placed Story to the given device with the given transform.

Arguments
  • deviceDevice.

  • transform[a,b,c,d,e,f]. The transform matrix.

EXAMPLE

story.draw(device, mupdf.Matrix.identity);

XML#

mutool only

This represents an HTML or an XML node. It is a helper class intended to access the DOM (Document Object Model) content of a Story object.

Instance methods

body()#

Return an XML for the body element.

Returns

XML.

EXAMPLE

var result = xml.body();
documentElement()#

Return an XML for the top level element.

Returns

XML.

EXAMPLE

var result = xml.documentElement();
createElement(tag)#

Create an element with the given tag type, but do not link it into the XML yet.

Arguments
  • tagString.

Returns

XML.

EXAMPLE

var result = xml.createElement("div");
createTextNode(text)#

Create a text node with the given text contents, but do not link it into the XML yet.

Arguments
  • textString.

Returns

XML.

EXAMPLE

var result = xml.createElement("Hello world!");
find(tag, attribute, value)#

Find the element matching the tag, attribute and value. Set either of those to null to match anything.

Arguments
  • tagString.

  • attributeString.

  • valueString.

Returns

XML.

EXAMPLE

var result = xml.find("tag", "attribute", "value");
findNext(tag, attribute, value)#

Find the next element matching the tag, attribute and value. Set either of those to null to match anything.

Arguments
  • tagString.

  • attributeString.

  • valueString.

Returns

XML.

EXAMPLE

var result = xml.findNext("tag", "attribute", "value");
appendChild(dom, childDom)#

Insert an element as the last child of a parent, unlinking the child from its current position if required.

Arguments
  • domXML.

  • childDomXML.

EXAMPLE

xml.appendChild(dom, childDom);
insertBefore(dom, elementDom)#

Insert an element before this element, unlinking the new element from its current position if required.

Arguments
  • domXML.

  • elementDomXML.

EXAMPLE

xml.insertBefore(dom, elementDom);
insertAfter(dom, elementDom)#

Insert an element after this element, unlinking the new element from its current position if required.

Arguments
  • domXML.

  • elementDomXML.

EXAMPLE

xml.insertAfter(dom, elementDom);
remove()#

Remove this element from the XML. The element can be added back elsewhere if required.

Returns

XML.

EXAMPLE

var result = xml.remove();
clone()#

Clone this element (and its children). The clone is not yet linked into the XML.

Returns

XML.

EXAMPLE

var result = xml.clone();
firstChild()#

Return the first child of the element as a XML, or null if no child exist.

Returns

XML | null.

EXAMPLE

var result = xml.firstChild();
parent()#

Return the parent of the element as a XML, or null if no parent exists.

Returns

XML | null.

EXAMPLE

var result = xml.parent();
next()#

Return the next element as a XML, or null if no such element exists.

Returns

XML | null.

EXAMPLE

var result = xml.next();
previous()#

Return the previous element as a XML, or null if no such element exists.

Returns

XML | null.

EXAMPLE

var result = xml.previous();
addAttribute(attribute, value)#

Add attribute with the given value, returns the updated element as an XML.

Arguments
  • attributeString.

  • valueString.

Returns

XML.

EXAMPLE

var result = xml.addAttribute("attribute", "value");
removeAttribute(attribute)#

Remove the specified attribute from the element.

Arguments
  • attributeString.

EXAMPLE

xml.removeAttribute("attribute");
attribute(attribute)#

Return the element’s attribute value as a String, or null if no such attribute exists.

Arguments
  • attributeString.

Returns

String | null.

EXAMPLE

var result = xml.attribute("attribute");
getAttributes()#

Returns a dictionary object with properties and their values corresponding to the element’s attributes and their values.

Returns

{}.

EXAMPLE

var dict = xml.getAttributes();

PDF Processor#

A PDF processor provides callbacks that get called for each PDF operator handled by PDFPage process() & PDFAnnotation process() methods. The callbacks whose names start with op_ correspond to each PDF operator. Refer to the PDF specification for what these do and what the callback arguments are.

Methods#

Main methods#

  • push_resources(resources)

  • pop_resources()

General graphics state callbacks#

  • op_w(lineWidth)

  • op_j(lineJoin)

  • op_J(lineCap)

  • op_M(miterLimit)

  • op_d(dashPattern, phase)

  • op_ri(intent)

  • op_i(flatness)

  • op_gs(name, extGState)

Special graphics state#

  • op_q()

  • op_Q()

  • op_cm(a, b, c, d, e, f)

Path construction#

  • op_m(x, y)

  • op_l(x, y)

  • op_c(x1, y1, x2, y2, x3, y3)

  • op_v(x2, y2, x3, y3)

  • op_y(x1, y1, x3, y3)

  • op_h()

  • op_re(x, y, w, h)

Path painting#

  • op_S()

  • op_s()

  • op_F()

  • op_f()

  • op_fstar()

  • op_B()

  • op_Bstar()

  • op_b()

  • op_bstar()

  • op_n()

Clipping paths#

  • op_W()

  • op_Wstar()

Text objects#

  • op_BT()

  • op_ET()

Text state#

  • op_Tc(charSpace)

  • op_Tw(wordSpace)

  • op_Tz(scale)

  • op_TL(leading)

  • op_Tf(name, size)

  • op_Tr(render)

  • op_Ts(rise)

Text positioning#

  • op_Td(tx, ty)

  • op_TD(tx, ty)

  • op_Tm(a, b, c, d, e, f)

  • op_Tstar()

Text showing#

  • op_TJ(textArray) number/string

  • op_Tj(stringOrByteArray)

  • op_squote(stringOrByteArray)

  • op_dquote(wordSpace, charSpace, stringOrByteArray)

Type 3 fonts#

  • op_d0(wx, wy)

  • op_d1(wx, wy, llx, lly, urx, ury)

Color#

  • op_CS(name, colorspace)

  • op_cs(name, colorspace)

  • op_SC_color(color)

  • op_sc_color(color)

  • op_SC_pattern(name, patternID, color)

    API not settled, arguments may change in the future.

  • op_sc_pattern(name, patternID, color)

    API not settled, arguments may change in the future.

  • op_SC_shade(name, shade)

    API not settled, arguments may change in the future.

  • op_sc_shade(name, shade)

    API not settled, arguments may change in the future.

  • op_G(gray)

  • op_g(gray)

  • op_RG(r, g, b)

  • op_rg(r, g, b)

  • op_K(c, m, y, k)

  • op_k(c, m, y, k)

Shadings, images and XObjects#

  • op_BI(image, colorspace)

  • op_sh(name, shade)

    API not settled, arguments may change in the future.

  • op_Do_image(name, image)

  • op_Do_form(xobject, resources)

Marked content#

  • op_MP(tag)

  • op_DP(tag, raw)

  • op_BMC(tag)

  • op_BDC(tag, raw)

  • op_EMC()

Compatibility#

  • op_BX()

  • op_EX()


This software is provided AS-IS with no warranty, either express or implied. This software is distributed under license and may not be copied, modified or distributed except as expressly authorized under the terms of that license. Refer to licensing information at artifex.com or contact Artifex Software, Inc., 39 Mesa Street, Suite 108A, San Francisco, CA 94129, USA, for further information.

Discord logo