tclMuPdf is a porting of the MuPDF framework (see at mupdf.com ), for fast and high-quality rendering of PDF pages.
History
13-dec-2016 - Version 1.0b1 (beta) released. No support for MacOS
15-dec-2016 - Version 1.0 - Support for MacOS. API unchanged, but big internal optimization for reusing opened pages (read
28-jan-2017 - Version 1.1 - new commands: fields, field, anchor, mupdf::libinfo . Added package mupdf-notk for tcl-only usage. (read the documentation). Aligned with core library MuPDF v.1.10a
Download
Version 1.1 is still distributed in a pre-built package with multi-platform support, but if you only need support for a single platform, you can download a lighter package.
Note that a specific platform support (e.g. "Linux 32") is not referred to the hosting O.S. architecture, but it's referred to the architecture of the TclTk interpreter. E.g. if you have a 32-bit TclTk interpreter running on a 64-bit Linux, you need the tclMuPdf package for linux-x32.
[L1 ] FULL (Win 32/64, Linux 32/64, MacOS) (Warning: 28 MB)
Package mupdf integrates the MuPDF framework in Tcl. The focus of MuPDF is on speed, small code size, and high-quality anti-aliased rendering. The main goal of this integration is to generate images of the PDF pages, in a .png format, or directly in a Tk's photo image type. Thanks to its speed mupdf can be used for building interactive PDF-viewers with high-quality and real-time zooming. mupdf is a binary package, distributed in a multi-platform bundle, i.e. it can be used on
Windows 32/64 bit
Linux 32/64 bit
MacOS 64 bit
Just an example to get the flavor of how to use mupdf:
# open a file and save 1st page as a .png file
package require mupdf
set pdf [mupdf::open /mydir/sample.pdf]
set page [$pdf getpage 0] ;# 0 is the 1st page
$page savePNG /mydir/page0.png
mupdf::close $pdf
mupdf Commands
mupdf supports the following commands:
mupdf::openfilename
This is the main command: it opens the pdf-file filename and returns a pdfHandle to be used in subsequent operations.
pdfHandlenpages
return the number of pages.
pdfHandlegetpagen
return a pageHandle to be used in subsequent operations. Note that first page is page 0. Note that if the requested page is currently opened, getpage reuses the handle of the opened page.
pdfHandleopenedpages
return a list of all pageHandles currently opened related to pdfHandle
pdfHandlecloseallpages
close all currently opened pages related to pdfHandle
pageHandlesize
return the physical size of the page as a list of two decimal numbers. Note that page size is expressed in points, i.e. 1/72 inch.
pageHandledocref
return a reference to the related pdf-document as a pdfHandle
render the page in a .png file named filename. With a default -zoom factor equal to 1.0, a page whose size is W x H points is rendered as a raster image of W x H pixels. If -zoom is specified, the resulting image size is scaled by a factor of zoom. By default the whole page is rendered; the -from option, allows you to render only a given rectangler area of the page. x0y0 are the coords of the top-left corner and x1y1 are for the bottom-right corner. These coords must be expressed in terms of the physical size of the page, i.e in points Note that if these coords lies outside of the page, only the intersection of this area with the page areais rendered.
...
set page [$pdf getpage 0] ;# 0 is the 1st page
lassign [$page size] dx dy
# save just the upper half of the page
$page savePNG /mydir/page0.png -zoom 2.25 -from 0 0 $dx [expr $dy/2]
mupdf::close $pdf
render the page in an existing Tk's photo image. The width and/or height of image are unchanged if the user has set on it an explicit image width or height (with the -width and/or -height configuration options, respectively). About the -zoom and -from options, the same rules for the savePNG apply. Option -to allows you to place the resulting raster image at the x0y0 coords of the destination image. By default, is -to0.00.0
mupdf::closehandle
if handle refers to a pageHandle, close the page. if handle refers to a pdfHandle, close the pdf and all its opened pages.
mupdf::isobjecthandle
return 1 if handle is a valid reference to a pdf or a page.
mupdf::typehandle
return document or page if handle is a valid reference, else raise an error.