2012-02-14 15:33:17 +04:00
|
|
|
|
# coding: utf8
|
2012-03-22 02:19:27 +04:00
|
|
|
|
"""
|
|
|
|
|
weasyprint.__main__
|
|
|
|
|
-------------------
|
2012-02-14 15:33:17 +04:00
|
|
|
|
|
2012-03-22 02:19:27 +04:00
|
|
|
|
Command-line interface to WeasyPrint.
|
2012-02-14 15:33:17 +04:00
|
|
|
|
|
2012-03-22 02:19:27 +04:00
|
|
|
|
:copyright: Copyright 2011-2012 Simon Sapin and contributors, see AUTHORS.
|
|
|
|
|
:license: BSD, see LICENSE for details.
|
2012-02-14 15:33:17 +04:00
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
2012-02-17 21:49:58 +04:00
|
|
|
|
from __future__ import division, unicode_literals
|
|
|
|
|
|
2012-02-15 21:49:37 +04:00
|
|
|
|
import sys
|
2012-02-14 15:33:17 +04:00
|
|
|
|
import argparse
|
|
|
|
|
|
2012-02-15 21:49:37 +04:00
|
|
|
|
from . import VERSION, HTML
|
2012-02-14 15:33:17 +04:00
|
|
|
|
|
|
|
|
|
|
2012-06-02 08:28:44 +04:00
|
|
|
|
def main(argv=None, stdout=None, stdin=None):
|
2012-02-14 15:33:17 +04:00
|
|
|
|
"""Parse command-line arguments and convert the given document."""
|
2012-02-16 21:28:01 +04:00
|
|
|
|
parser = argparse.ArgumentParser(prog='weasyprint',
|
2012-08-02 19:19:52 +04:00
|
|
|
|
description='Renders web pages to PDF or PNG.')
|
2012-02-14 15:33:17 +04:00
|
|
|
|
parser.add_argument('--version', action='version',
|
|
|
|
|
version='WeasyPrint version %s' % VERSION,
|
|
|
|
|
help='Print WeasyPrint’s version number and exit.')
|
|
|
|
|
parser.add_argument('-e', '--encoding',
|
|
|
|
|
help='Character encoding of the input')
|
2012-08-02 19:19:52 +04:00
|
|
|
|
parser.add_argument('-f', '--format', choices=['pdf', 'png'],
|
2012-02-14 15:33:17 +04:00
|
|
|
|
help='Output format. Can be ommited if `output` '
|
2012-08-02 19:19:52 +04:00
|
|
|
|
'ends with a .pdf or .png extension.')
|
2012-02-14 15:33:17 +04:00
|
|
|
|
parser.add_argument('-s', '--stylesheet', action='append',
|
2012-08-02 19:19:52 +04:00
|
|
|
|
help='URL or filename for a user CSS stylesheet. '
|
2012-02-14 15:33:17 +04:00
|
|
|
|
'May be given multiple times.')
|
2012-08-02 15:04:31 +04:00
|
|
|
|
parser.add_argument('-m', '--media-type', default='print',
|
2012-08-02 19:19:52 +04:00
|
|
|
|
help='Media type to use for @media, defaults to print')
|
|
|
|
|
parser.add_argument('-r', '--resolution', type=float,
|
|
|
|
|
help='PNG only: the resolution in pixel per CSS inch. '
|
|
|
|
|
'Defaults to 96, one PNG pixel per CSS pixel.')
|
|
|
|
|
parser.add_argument('--base-url',
|
|
|
|
|
help='Base for relative URLs in the HTML input. '
|
|
|
|
|
"Defaults to the input's own filename or URL "
|
|
|
|
|
'or the current directory for stdin.')
|
2012-02-14 15:33:17 +04:00
|
|
|
|
parser.add_argument('input',
|
|
|
|
|
help='URL or filename of the HTML input, or - for stdin')
|
|
|
|
|
parser.add_argument('output',
|
|
|
|
|
help='Filename where output is written, or - for stdout')
|
|
|
|
|
|
2012-02-16 21:28:01 +04:00
|
|
|
|
args = parser.parse_args(argv)
|
2012-02-14 15:33:17 +04:00
|
|
|
|
|
|
|
|
|
if args.format is None:
|
2012-02-29 23:17:44 +04:00
|
|
|
|
output_lower = args.output.lower()
|
2012-08-02 19:19:52 +04:00
|
|
|
|
if output_lower.endswith('.pdf'):
|
|
|
|
|
format_ = 'pdf'
|
|
|
|
|
elif output_lower.endswith('.png'):
|
|
|
|
|
format_ = 'png'
|
2012-02-14 15:33:17 +04:00
|
|
|
|
else:
|
|
|
|
|
parser.error(
|
|
|
|
|
'Either sepecify a format with -f or choose an '
|
2012-08-02 19:19:52 +04:00
|
|
|
|
'output filename that ends in .pdf or .png')
|
2012-02-27 17:51:10 +04:00
|
|
|
|
else:
|
2012-02-29 23:17:44 +04:00
|
|
|
|
format_ = args.format.lower()
|
2012-02-14 15:33:17 +04:00
|
|
|
|
|
|
|
|
|
if args.input == '-':
|
2012-06-02 08:28:44 +04:00
|
|
|
|
if stdin is None:
|
|
|
|
|
stdin = sys.stdin
|
|
|
|
|
# stdin.buffer on Py3, stdin on Py2
|
2012-02-27 18:07:41 +04:00
|
|
|
|
source = getattr(stdin, 'buffer', stdin)
|
2012-08-02 19:19:52 +04:00
|
|
|
|
if not args.base_url:
|
|
|
|
|
args.base_url = '.' # current directory
|
2012-02-15 21:49:37 +04:00
|
|
|
|
else:
|
2012-02-27 18:07:41 +04:00
|
|
|
|
source = args.input
|
2012-02-14 15:33:17 +04:00
|
|
|
|
|
|
|
|
|
if args.output == '-':
|
2012-06-02 08:28:44 +04:00
|
|
|
|
if stdout is None:
|
|
|
|
|
stdout = sys.stdout
|
|
|
|
|
# stdout.buffer on Py3, stdout on Py2
|
2012-02-27 17:51:10 +04:00
|
|
|
|
output = getattr(stdout, 'buffer', stdout)
|
|
|
|
|
else:
|
|
|
|
|
output = args.output
|
2012-02-14 15:33:17 +04:00
|
|
|
|
|
2012-08-02 19:19:52 +04:00
|
|
|
|
kwargs = {'stylesheets': args.stylesheet}
|
|
|
|
|
if args.resolution:
|
|
|
|
|
if format_ == 'png':
|
|
|
|
|
kwargs['resolution'] = args.resolution
|
|
|
|
|
else:
|
|
|
|
|
parser.error('--resolution only applies for the PNG format.')
|
|
|
|
|
html = HTML(source, base_url=args.base_url, encoding=args.encoding,
|
2012-08-02 15:04:31 +04:00
|
|
|
|
media_type=args.media_type)
|
2012-08-02 19:19:52 +04:00
|
|
|
|
getattr(html, 'write_' + format_)(output, **kwargs)
|
2012-02-14 15:33:17 +04:00
|
|
|
|
|
|
|
|
|
|
2012-04-02 16:45:44 +04:00
|
|
|
|
if __name__ == '__main__': # pragma: no cover
|
2012-02-17 18:00:55 +04:00
|
|
|
|
main()
|