commit
418c1d5454
72
Makefile
72
Makefile
@ -55,30 +55,30 @@ browser-test:
|
|||||||
--browserManifestFile=$(PDF_BROWSERS) \
|
--browserManifestFile=$(PDF_BROWSERS) \
|
||||||
--manifestFile=$(PDF_TESTS)
|
--manifestFile=$(PDF_TESTS)
|
||||||
|
|
||||||
# make shell-test
|
# # make shell-test
|
||||||
#
|
# #
|
||||||
# This target runs all of the tests that can be run in a JS shell.
|
# # This target runs all of the tests that can be run in a JS shell.
|
||||||
# The shell used is taken from the JS_SHELL environment variable. If
|
# # The shell used is taken from the JS_SHELL environment variable. If
|
||||||
# that variable is not defined, the script will attempt to use the copy
|
# # that variable is not defined, the script will attempt to use the copy
|
||||||
# of Rhino that comes with the Closure compiler used for producing the
|
# # of Rhino that comes with the Closure compiler used for producing the
|
||||||
# website.
|
# # website.
|
||||||
SHELL_TARGET = $(NULL)
|
# SHELL_TARGET = $(NULL)
|
||||||
ifeq ($(JS_SHELL),)
|
# ifeq ($(JS_SHELL),)
|
||||||
JS_SHELL := "java -cp $(BUILD_DIR)/compiler.jar"
|
# JS_SHELL := "java -cp $(BUILD_DIR)/compiler.jar"
|
||||||
JS_SHELL += "com.google.javascript.jscomp.mozilla.rhino.tools.shell.Main"
|
# JS_SHELL += "com.google.javascript.jscomp.mozilla.rhino.tools.shell.Main"
|
||||||
SHELL_TARGET = compiler
|
# SHELL_TARGET = compiler
|
||||||
endif
|
# endif
|
||||||
|
#
|
||||||
shell-test: shell-msg $(SHELL_TARGET) font-test
|
# shell-test: shell-msg $(SHELL_TARGET) font-test
|
||||||
shell-msg:
|
# shell-msg:
|
||||||
ifeq ($(SHELL_TARGET), compiler)
|
# ifeq ($(SHELL_TARGET), compiler)
|
||||||
@echo "No JS_SHELL env variable present."
|
# @echo "No JS_SHELL env variable present."
|
||||||
@echo "The default is to find a copy of Rhino and try that."
|
# @echo "The default is to find a copy of Rhino and try that."
|
||||||
endif
|
# endif
|
||||||
@echo "JS shell command is: $(JS_SHELL)"
|
# @echo "JS shell command is: $(JS_SHELL)"
|
||||||
|
#
|
||||||
font-test:
|
# font-test:
|
||||||
@echo "font test stub."
|
# @echo "font test stub."
|
||||||
|
|
||||||
# make lint
|
# make lint
|
||||||
#
|
#
|
||||||
@ -133,18 +133,18 @@ $(GH_PAGES)/web/%: web/%
|
|||||||
$(GH_PAGES)/web/images/%: web/images/%
|
$(GH_PAGES)/web/images/%: web/images/%
|
||||||
@cp $< $@
|
@cp $< $@
|
||||||
|
|
||||||
# make compiler
|
# # make compiler
|
||||||
#
|
# #
|
||||||
# This target downloads the Closure compiler, and places it in the
|
# # This target downloads the Closure compiler, and places it in the
|
||||||
# build directory. This target is also useful when the user doesn't
|
# # build directory. This target is also useful when the user doesn't
|
||||||
# have a JS shell available--we can have them use the Rhino shell that
|
# # have a JS shell available--we can have them use the Rhino shell that
|
||||||
# comes with Closure.
|
# # comes with Closure.
|
||||||
COMPILER_URL = http://closure-compiler.googlecode.com/files/compiler-latest.zip
|
# COMPILER_URL = http://closure-compiler.googlecode.com/files/compiler-latest.zip
|
||||||
|
#
|
||||||
compiler: $(BUILD_DIR)/compiler.zip
|
# compiler: $(BUILD_DIR)/compiler.zip
|
||||||
$(BUILD_DIR)/compiler.zip: | $(BUILD_DIR)
|
# $(BUILD_DIR)/compiler.zip: | $(BUILD_DIR)
|
||||||
curl $(COMPILER_URL) > $(BUILD_DIR)/compiler.zip;
|
# curl $(COMPILER_URL) > $(BUILD_DIR)/compiler.zip;
|
||||||
cd $(BUILD_DIR); unzip compiler.zip compiler.jar;
|
# cd $(BUILD_DIR); unzip compiler.zip compiler.jar;
|
||||||
|
|
||||||
# make firefox-extension
|
# make firefox-extension
|
||||||
#
|
#
|
||||||
|
89
README.md
89
README.md
@ -1,17 +1,84 @@
|
|||||||
# pdf.js
|
# pdf.js
|
||||||
|
|
||||||
pdf.js is a technology demonstrator prototype to explore whether the HTML5
|
|
||||||
platform is complete enough to faithfully and efficiently render the ISO
|
|
||||||
32000-1:2008 Portable Document Format (PDF) without native code assistance.
|
|
||||||
|
|
||||||
pdf.js is not currently part of the Mozilla project, and there is no plan
|
|
||||||
yet to integrate it into Firefox. We will explore that possibility once
|
## Overview
|
||||||
pdf.js is production ready. Until then we aim to publish a Firefox
|
|
||||||
PDF reader extension powered by pdf.js.
|
pdf.js is an HTML5 technology experiment that explores building a faithful
|
||||||
|
and efficient Portable Document Format (PDF) renderer without native code
|
||||||
|
assistance.
|
||||||
|
|
||||||
|
pdf.js is community-driven and supported by Mozilla Labs. Our goal is to
|
||||||
|
create a general-purpose, web standards-based platform for parsing and
|
||||||
|
rendering PDFs, and eventually release a PDF reader extension powered by
|
||||||
|
pdf.js. Integration with Firefox is a possibility if the experiment proves
|
||||||
|
successful.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Getting started
|
||||||
|
|
||||||
|
**Online demo**
|
||||||
|
|
||||||
|
For an online demo, visit:
|
||||||
|
|
||||||
|
http://andreasgal.github.com/pdf.js/web/viewer.html
|
||||||
|
|
||||||
|
This demo provides an interactive interface for displaying and browsing PDFs
|
||||||
|
using the pdf.js API.
|
||||||
|
|
||||||
|
**Hello world**
|
||||||
|
|
||||||
|
For a "hello world" example, take a look at:
|
||||||
|
|
||||||
|
examples/helloworld/
|
||||||
|
|
||||||
|
This example illustrates the bare minimum ingredients for integrating pdf.js
|
||||||
|
in a custom project.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Running the Tests
|
||||||
|
|
||||||
|
pdf.js comes with browser-level regression tests that allow one to probe
|
||||||
|
whether it's able to successfully parse PDFs, as well as compare its output
|
||||||
|
against reference images, pixel-by-pixel.
|
||||||
|
|
||||||
|
To run the tests, first configure the browser manifest file at:
|
||||||
|
|
||||||
|
test/resources/browser_manifests/browser_manifest.json
|
||||||
|
|
||||||
|
Sample manifests for different platforms are provided in that directory.
|
||||||
|
|
||||||
|
To run all the bundled tests, type:
|
||||||
|
|
||||||
|
$ make test
|
||||||
|
|
||||||
|
and cross your fingers. Different types of tests are available, see the test
|
||||||
|
manifest file at:
|
||||||
|
|
||||||
|
test/test_manifest.json
|
||||||
|
|
||||||
|
The test type `eq` tests whether the output images are identical to reference
|
||||||
|
images. The test type `load` simply tests whether the file loads without
|
||||||
|
raising any errors.
|
||||||
|
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
pdf.js is a community-driver project, so contributors are always welcome.
|
||||||
|
Simply fork our repo and contribute away. A great place to start is our
|
||||||
|
open issues.
|
||||||
|
|
||||||
|
For better consistency and long-term stability, please do look around the
|
||||||
|
code and try to follow our conventions.
|
||||||
|
|
||||||
|
|
||||||
|
## Additional resources
|
||||||
|
|
||||||
Our demo site is here:
|
Our demo site is here:
|
||||||
|
|
||||||
http://andreasgal.github.com/pdf.js/
|
http://andreasgal.github.com/pdf.js/web/viewer.html
|
||||||
|
|
||||||
You can read more about pdf.js here:
|
You can read more about pdf.js here:
|
||||||
|
|
||||||
@ -19,14 +86,14 @@ You can read more about pdf.js here:
|
|||||||
|
|
||||||
http://blog.mozilla.com/cjones/2011/06/15/overview-of-pdf-js-guts/
|
http://blog.mozilla.com/cjones/2011/06/15/overview-of-pdf-js-guts/
|
||||||
|
|
||||||
follow us on twitter: @pdfjs
|
Follow us on twitter: @pdfjs
|
||||||
|
|
||||||
http://twitter.com/#!/pdfjs
|
http://twitter.com/#!/pdfjs
|
||||||
|
|
||||||
join our mailing list:
|
Join our mailing list:
|
||||||
|
|
||||||
dev-pdf-js@lists.mozilla.org
|
dev-pdf-js@lists.mozilla.org
|
||||||
|
|
||||||
and talk to us on IRC:
|
Talk to us on IRC:
|
||||||
|
|
||||||
#pdfjs on irc.mozilla.org
|
#pdfjs on irc.mozilla.org
|
||||||
|
16
examples/helloworld/README.md
Normal file
16
examples/helloworld/README.md
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
## "Hello World" overview
|
||||||
|
|
||||||
|
This example is a minimalistic application of the pdf.js project. The file
|
||||||
|
`helloworld.pdf` is from the GNUpdf project (see [Introduction to PDF at GNUpdf](http://gnupdf.org/Introduction_to_PDF), and contains a simple and
|
||||||
|
human-readable PDF.
|
||||||
|
|
||||||
|
|
||||||
|
## Getting started
|
||||||
|
|
||||||
|
Point your browser to `index.html`. Voila. Take a peek at `hello.js` to see
|
||||||
|
how to make basic calls to `pdf.js`.
|
||||||
|
|
||||||
|
|
||||||
|
## Additional resources
|
||||||
|
|
||||||
|
+ [GNUpdf - Introduction to PDF](http://gnupdf.org/Introduction_to_PDF)
|
49
examples/helloworld/hello.js
Normal file
49
examples/helloworld/hello.js
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
//
|
||||||
|
// See README for overview
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Ajax GET request, for binary files
|
||||||
|
// (like jQuery's $.get(), but supports the binary type ArrayBuffer)
|
||||||
|
//
|
||||||
|
var ajaxGet = function(url, callback){
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
xhr.open('GET', url);
|
||||||
|
xhr.mozResponseType = xhr.responseType = 'arraybuffer';
|
||||||
|
xhr.expected = (document.URL.indexOf('file:') === 0) ? 0 : 200;
|
||||||
|
xhr.onreadystatechange = function() {
|
||||||
|
if (xhr.readyState === 4 && xhr.status === xhr.expected) {
|
||||||
|
var data = (xhr.mozResponseArrayBuffer || xhr.mozResponse ||
|
||||||
|
xhr.responseArrayBuffer || xhr.response);
|
||||||
|
|
||||||
|
callback(data);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
xhr.send(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// This is where the fun happens
|
||||||
|
//
|
||||||
|
ajaxGet('helloworld.pdf', function(data){
|
||||||
|
//
|
||||||
|
// Instantiate PDFDoc with PDF data
|
||||||
|
//
|
||||||
|
var pdf = new PDFDoc(new Stream(data));
|
||||||
|
var page = pdf.getPage(1);
|
||||||
|
var scale = 1.5;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare canvas using PDF page dimensions
|
||||||
|
//
|
||||||
|
var canvas = document.getElementById('the-canvas');
|
||||||
|
var context = canvas.getContext('2d');
|
||||||
|
canvas.height = page.height * scale;
|
||||||
|
canvas.width = page.width * scale;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Render PDF page into canvas context
|
||||||
|
//
|
||||||
|
page.startRendering(context);
|
||||||
|
});
|
68
examples/helloworld/helloworld.pdf
Normal file
68
examples/helloworld/helloworld.pdf
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
%PDF-1.7
|
||||||
|
|
||||||
|
1 0 obj % entry point
|
||||||
|
<<
|
||||||
|
/Type /Catalog
|
||||||
|
/Pages 2 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/Type /Pages
|
||||||
|
/MediaBox [ 0 0 200 200 ]
|
||||||
|
/Count 1
|
||||||
|
/Kids [ 3 0 R ]
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/Type /Page
|
||||||
|
/Parent 2 0 R
|
||||||
|
/Resources <<
|
||||||
|
/Font <<
|
||||||
|
/F1 4 0 R
|
||||||
|
>>
|
||||||
|
>>
|
||||||
|
/Contents 5 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Type /Font
|
||||||
|
/Subtype /Type1
|
||||||
|
/BaseFont /Times-Roman
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
5 0 obj % page content
|
||||||
|
<<
|
||||||
|
/Length 44
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
BT
|
||||||
|
70 50 TD
|
||||||
|
/F1 12 Tf
|
||||||
|
(Hello, world!) Tj
|
||||||
|
ET
|
||||||
|
endstream
|
||||||
|
endobj
|
||||||
|
|
||||||
|
xref
|
||||||
|
0 6
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000010 00000 n
|
||||||
|
0000000079 00000 n
|
||||||
|
0000000173 00000 n
|
||||||
|
0000000301 00000 n
|
||||||
|
0000000380 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/Size 6
|
||||||
|
/Root 1 0 R
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
492
|
||||||
|
%%EOF
|
18
examples/helloworld/index.html
Normal file
18
examples/helloworld/index.html
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<!-- PDF.js-specific -->
|
||||||
|
<script type="text/javascript" src="../../pdf.js"></script>
|
||||||
|
<script type="text/javascript" src="../../metrics.js"></script>
|
||||||
|
<script type="text/javascript" src="../../fonts.js"></script>
|
||||||
|
<script type="text/javascript" src="../../glyphlist.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="hello.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<canvas id="the-canvas" style="border:1px solid black;"/>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
12
test/pdfs/.gitignore
vendored
12
test/pdfs/.gitignore
vendored
@ -1,3 +1,13 @@
|
|||||||
pdf.pdf
|
DiwanProfile.pdf
|
||||||
|
artofwar.pdf
|
||||||
|
cable.pdf
|
||||||
|
ecma262.pdf
|
||||||
|
hmm.pdf
|
||||||
|
i9.pdf
|
||||||
intelisa.pdf
|
intelisa.pdf
|
||||||
openweb_tm-PRINT.pdf
|
openweb_tm-PRINT.pdf
|
||||||
|
pdf.pdf
|
||||||
|
pdkids.pdf
|
||||||
|
shavian.pdf
|
||||||
|
jai.pdf
|
||||||
|
|
||||||
|
2
test/resources/browser_manifests/.gitignore
vendored
Normal file
2
test/resources/browser_manifests/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
browser_manifest.json
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user