mirror of https://github.com/vitalif/phantomjs
Merge remote-tracking branch 'KDAB/printing-margin'
commit
4515332d9d
|
@ -0,0 +1,34 @@
|
|||
var page = require('webpage').create();
|
||||
|
||||
if (phantom.args.length < 6) {
|
||||
console.log('Usage: printmargins.js URL filename LEFT TOP RIGHT BOTTOM');
|
||||
console.log(' margin examples: "1cm", "10px", "7mm", "5in"');
|
||||
phantom.exit();
|
||||
} else {
|
||||
var address = phantom.args[0];
|
||||
var output = phantom.args[1];
|
||||
var marginLeft = phantom.args[2];
|
||||
var marginTop = phantom.args[3];
|
||||
var marginRight = phantom.args[4];
|
||||
var marginBottom = phantom.args[5];
|
||||
page.viewportSize = { width: 600, height: 600 };
|
||||
page.paperSize = {
|
||||
format: 'A4',
|
||||
margin: {
|
||||
left: marginLeft,
|
||||
top: marginTop,
|
||||
right: marginRight,
|
||||
bottom: marginBottom
|
||||
}
|
||||
};
|
||||
page.open(address, function (status) {
|
||||
if (status !== 'success') {
|
||||
console.log('Unable to load the address!');
|
||||
} else {
|
||||
window.setTimeout(function () {
|
||||
page.render(output);
|
||||
phantom.exit();
|
||||
}, 200);
|
||||
}
|
||||
});
|
||||
}
|
|
@ -11,8 +11,8 @@ if (phantom.args.length < 2 || phantom.args.length > 3) {
|
|||
page.viewportSize = { width: 600, height: 600 };
|
||||
if (phantom.args.length === 3 && phantom.args[1].substr(-4) === ".pdf") {
|
||||
size = phantom.args[2].split('*');
|
||||
page.paperSize = size.length === 2 ? { width: size[0], height: size[1], border: '0px' }
|
||||
: { format: phantom.args[2], orientation: 'portrait', border: '1cm' };
|
||||
page.paperSize = size.length === 2 ? { width: size[0], height: size[1], margin: '0px' }
|
||||
: { format: phantom.args[2], orientation: 'portrait', margin: '1cm' };
|
||||
}
|
||||
page.open(address, function (status) {
|
||||
if (status !== 'success') {
|
||||
|
|
|
@ -467,6 +467,16 @@ qreal stringToPointSize(const QString &string)
|
|||
return 0;
|
||||
}
|
||||
|
||||
qreal printMargin(const QVariantMap &map, const QString &key)
|
||||
{
|
||||
const QVariant margin = map.value(key);
|
||||
if (margin.isValid() && margin.canConvert(QVariant::String)) {
|
||||
return stringToPointSize(margin.toString());
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
bool WebPage::renderPdf(const QString &fileName)
|
||||
{
|
||||
QPrinter printer;
|
||||
|
@ -479,7 +489,7 @@ bool WebPage::renderPdf(const QString &fileName)
|
|||
const QSize pageSize = m_mainFrame->contentsSize();
|
||||
paperSize.insert("width", QString::number(pageSize.width()) + "px");
|
||||
paperSize.insert("height", QString::number(pageSize.height()) + "px");
|
||||
paperSize.insert("border", "0px");
|
||||
paperSize.insert("margin", "0px");
|
||||
}
|
||||
|
||||
if (paperSize.contains("width") && paperSize.contains("height")) {
|
||||
|
@ -537,9 +547,34 @@ bool WebPage::renderPdf(const QString &fileName)
|
|||
return false;
|
||||
}
|
||||
|
||||
const qreal border = paperSize.contains("border") ?
|
||||
floor(stringToPointSize(paperSize.value("border").toString())) : 0;
|
||||
printer.setPageMargins(border, border, border, border, QPrinter::Point);
|
||||
if (paperSize.contains("border") && !paperSize.contains("margin")) {
|
||||
// backwards compatibility
|
||||
paperSize["margin"] = paperSize["border"];
|
||||
}
|
||||
|
||||
qreal marginLeft = 0;
|
||||
qreal marginTop = 0;
|
||||
qreal marginRight = 0;
|
||||
qreal marginBottom = 0;
|
||||
|
||||
if (paperSize.contains("margin")) {
|
||||
const QVariant margins = paperSize["margin"];
|
||||
if (margins.canConvert(QVariant::Map)) {
|
||||
const QVariantMap map = margins.toMap();
|
||||
marginLeft = printMargin(map, "left");
|
||||
marginTop = printMargin(map, "top");
|
||||
marginRight = printMargin(map, "right");
|
||||
marginBottom = printMargin(map, "bottom");
|
||||
} else if (margins.canConvert(QVariant::String)) {
|
||||
const qreal margin = stringToPointSize(margins.toString());
|
||||
marginLeft = margin;
|
||||
marginTop = margin;
|
||||
marginRight = margin;
|
||||
marginBottom = margin;
|
||||
}
|
||||
}
|
||||
|
||||
printer.setPageMargins(marginLeft, marginTop, marginRight, marginBottom, QPrinter::Point);
|
||||
|
||||
m_mainFrame->print(&printer);
|
||||
return true;
|
||||
|
|
Loading…
Reference in New Issue