diff --git a/src/calibre/ebooks/epub/__init__.py b/src/calibre/ebooks/epub/__init__.py
index 863f2f8db0..aa17024d50 100644
--- a/src/calibre/ebooks/epub/__init__.py
+++ b/src/calibre/ebooks/epub/__init__.py
@@ -153,6 +153,14 @@ help on using this feature.
'slow and if your source file contains a very large '
'number of page breaks, you should turn off splitting '
'on page breaks.'))
+ structure('page', ['--page'], default=None,
+ help=_('XPath expression to detect page boundaries for building '
+ 'a custom pagination map, as used by AdobeDE. Default is '
+ 'not to build an explicit pagination map.'))
+ structure('page_names', ['--page-names'], default=None,
+ help=_('XPath expression to find the name of each page in the '
+ 'pagination map relative to its boundary element. '
+ 'Default is to number all pages staring with 1.'))
toc = c.add_group('toc',
_('''\
Control the automatic generation of a Table of Contents. If an OPF file is detected
@@ -230,4 +238,4 @@ to auto-generate a Table of Contents.
c.add_opt('extract_to', ['--extract-to'], group='debug', default=None,
help=_('Extract the contents of the produced EPUB file to the '
'specified directory.'))
- return c
\ No newline at end of file
+ return c
diff --git a/src/calibre/ebooks/epub/from_html.py b/src/calibre/ebooks/epub/from_html.py
index ca50fe7a5d..b8fa3e8fd0 100644
--- a/src/calibre/ebooks/epub/from_html.py
+++ b/src/calibre/ebooks/epub/from_html.py
@@ -46,6 +46,7 @@ from calibre.ebooks.metadata.toc import TOC
from calibre.ebooks.metadata.opf2 import OPF
from calibre.ebooks.epub import initialize_container, PROFILES
from calibre.ebooks.epub.split import split
+from calibre.ebooks.epub.pages import add_page_map
from calibre.ebooks.epub.fonts import Rationalizer
from calibre.constants import preferred_encoding
from calibre.customize.ui import run_plugins_on_postprocess
@@ -438,6 +439,8 @@ def convert(htmlfile, opts, notification=None, create_epub=True,
if opts.show_ncx:
print toc
split(opf_path, opts, stylesheet_map)
+ if opts.page:
+ add_page_map(opf_path, opts)
check_links(opf_path, opts.pretty_print)
opf = OPF(opf_path, tdir)
diff --git a/src/calibre/ebooks/epub/pages.py b/src/calibre/ebooks/epub/pages.py
new file mode 100644
index 0000000000..c1b38b9be1
--- /dev/null
+++ b/src/calibre/ebooks/epub/pages.py
@@ -0,0 +1,59 @@
+'''
+Add page mapping information to an EPUB book.
+'''
+
+from __future__ import with_statement
+
+__license__ = 'GPL v3'
+__copyright__ = '2008, Marshall T. Vandegrift