summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brüning <michael.bruning@qt.io>2018-02-26 14:38:13 +0100
committerKai Koehne <kai.koehne@qt.io>2018-03-06 07:26:35 +0000
commit66a6518422bb32a85a481088a213a790ffd48785 (patch)
tree920945700398fa97a6f8e734137971ca16c1d910
parent0d9ba4179245d89e163494ea0a3652e790ec08a0 (diff)
Explicitly use custom margins for printing to pdf
3cec2ccb0ffdd41a41ab55d4c1ba88d4866e71d1 introduced a regression because it was assumed that the page was only printed to pdf when a filename was given. This is not the case when the pdf data is handed to the callback, though. Correct this by explicitly stating when margins should be used. Task-number: QTBUG-66654 Change-Id: I663f578ff5d01c77cc62e6f3756a17f78168a9aa Reviewed-by: Szabolcs David <davidsz@inf.u-szeged.hu> Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-rw-r--r--src/core/print_view_manager_qt.cpp19
-rw-r--r--src/core/print_view_manager_qt.h3
-rw-r--r--src/core/web_contents_adapter.cpp4
-rw-r--r--src/core/web_contents_adapter.h4
-rw-r--r--src/webenginewidgets/api/qwebenginepage.cpp4
5 files changed, 23 insertions, 11 deletions
diff --git a/src/core/print_view_manager_qt.cpp b/src/core/print_view_manager_qt.cpp
index fef2cf51a..627afb01a 100644
--- a/src/core/print_view_manager_qt.cpp
+++ b/src/core/print_view_manager_qt.cpp
@@ -154,13 +154,14 @@ static base::DictionaryValue *createPrintSettings()
return printSettings;
}
-static base::DictionaryValue *createPrintSettingsFromQPageLayout(const QPageLayout &pageLayout, bool printToPdf)
+static base::DictionaryValue *createPrintSettingsFromQPageLayout(const QPageLayout &pageLayout,
+ bool useCustomMargins)
{
base::DictionaryValue *printSettings = createPrintSettings();
//Set page size attributes, chromium expects these in micrometers
QRectF pageSizeInMillimeter = pageLayout.pageSize().rect(QPageSize::Millimeter);
- if (!printToPdf) {
+ if (!useCustomMargins) {
// QPrinter will extend this size with its margins
QMarginsF margins = pageLayout.margins(QPageLayout::Millimeter);
pageSizeInMillimeter = pageSizeInMillimeter.marginsRemoved(margins);
@@ -170,7 +171,7 @@ static base::DictionaryValue *createPrintSettingsFromQPageLayout(const QPageLayo
sizeDict->SetInteger(printing::kSettingMediaSizeHeightMicrons, pageSizeInMillimeter.height() * kMicronsToMillimeter);
printSettings->Set(printing::kSettingMediaSize, std::move(sizeDict));
- if (printToPdf) {
+ if (useCustomMargins) {
// Apply page margins when printing to PDF
QMargins pageMarginsInPoints = pageLayout.marginsPoints();
std::unique_ptr<base::DictionaryValue> marginsDict(new base::DictionaryValue);
@@ -201,7 +202,8 @@ PrintViewManagerQt::~PrintViewManagerQt()
#if BUILDFLAG(ENABLE_BASIC_PRINTING)
void PrintViewManagerQt::PrintToPDFFileWithCallback(const QPageLayout &pageLayout,
- bool printInColor, const QString &filePath,
+ bool printInColor,
+ const QString &filePath,
const PrintToPDFFileCallback& callback)
{
if (callback.is_null())
@@ -226,6 +228,7 @@ void PrintViewManagerQt::PrintToPDFFileWithCallback(const QPageLayout &pageLayou
void PrintViewManagerQt::PrintToPDFWithCallback(const QPageLayout &pageLayout,
bool printInColor,
+ bool useCustomMargins,
const PrintToPDFCallback& callback)
{
if (callback.is_null())
@@ -240,7 +243,7 @@ void PrintViewManagerQt::PrintToPDFWithCallback(const QPageLayout &pageLayout,
}
m_pdfPrintCallback = callback;
- if (!PrintToPDFInternal(pageLayout, printInColor)) {
+ if (!PrintToPDFInternal(pageLayout, printInColor, useCustomMargins)) {
content::BrowserThread::PostTask(content::BrowserThread::UI,
FROM_HERE,
base::Bind(callback, std::vector<char>()));
@@ -249,12 +252,14 @@ void PrintViewManagerQt::PrintToPDFWithCallback(const QPageLayout &pageLayout,
}
}
-bool PrintViewManagerQt::PrintToPDFInternal(const QPageLayout &pageLayout, bool printInColor)
+bool PrintViewManagerQt::PrintToPDFInternal(const QPageLayout &pageLayout,
+ const bool printInColor,
+ const bool useCustomMargins)
{
if (!pageLayout.isValid())
return false;
- m_printSettings.reset(createPrintSettingsFromQPageLayout(pageLayout, !m_pdfOutputPath.empty()));
+ m_printSettings.reset(createPrintSettingsFromQPageLayout(pageLayout, useCustomMargins));
m_printSettings->SetBoolean(printing::kSettingShouldPrintBackgrounds
, web_contents()->GetRenderViewHost()->GetWebkitPreferences().should_print_backgrounds);
m_printSettings->SetInteger(printing::kSettingColor,
diff --git a/src/core/print_view_manager_qt.h b/src/core/print_view_manager_qt.h
index 2eceaa588..654608ddd 100644
--- a/src/core/print_view_manager_qt.h
+++ b/src/core/print_view_manager_qt.h
@@ -93,6 +93,7 @@ public:
const PrintToPDFFileCallback& callback);
void PrintToPDFWithCallback(const QPageLayout &pageLayout,
bool printInColor,
+ bool useCustomMargins,
const PrintToPDFCallback &callback);
#endif // ENABLE_BASIC_PRINTING
@@ -118,7 +119,7 @@ protected:
void OnMetafileReadyForPrinting(const PrintHostMsg_DidPreviewDocument_Params& params);
#if BUILDFLAG(ENABLE_BASIC_PRINTING)
- bool PrintToPDFInternal(const QPageLayout &, bool printInColor);
+ bool PrintToPDFInternal(const QPageLayout &, bool printInColor, bool useCustomMargins = true);
#endif // BUILDFLAG(ENABLE_BASIC_PRINTING)
base::FilePath m_pdfOutputPath;
diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp
index c7b2e6e93..081dbd28d 100644
--- a/src/core/web_contents_adapter.cpp
+++ b/src/core/web_contents_adapter.cpp
@@ -1149,7 +1149,8 @@ void WebContentsAdapter::printToPDF(const QPageLayout &pageLayout, const QString
}
quint64 WebContentsAdapter::printToPDFCallbackResult(const QPageLayout &pageLayout,
- const bool colorMode)
+ bool colorMode,
+ bool useCustomMargins)
{
#if BUILDFLAG(ENABLE_BASIC_PRINTING)
Q_D(WebContentsAdapter);
@@ -1158,6 +1159,7 @@ quint64 WebContentsAdapter::printToPDFCallbackResult(const QPageLayout &pageLayo
d->nextRequestId);
PrintViewManagerQt::FromWebContents(webContents())->PrintToPDFWithCallback(pageLayout,
colorMode,
+ useCustomMargins,
callback);
return d->nextRequestId++;
#else
diff --git a/src/core/web_contents_adapter.h b/src/core/web_contents_adapter.h
index 9ce438119..367e44397 100644
--- a/src/core/web_contents_adapter.h
+++ b/src/core/web_contents_adapter.h
@@ -179,7 +179,9 @@ public:
void endDragging(const QPoint &clientPos, const QPoint &screenPos);
void leaveDrag();
void printToPDF(const QPageLayout&, const QString&);
- quint64 printToPDFCallbackResult(const QPageLayout &, const bool colorMode = true);
+ quint64 printToPDFCallbackResult(const QPageLayout &,
+ bool colorMode = true,
+ bool useCustomMargins = true);
// meant to be used within WebEngineCore only
content::WebContents *webContents() const;
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp
index ec35ea6ce..497083f4d 100644
--- a/src/webenginewidgets/api/qwebenginepage.cpp
+++ b/src/webenginewidgets/api/qwebenginepage.cpp
@@ -2237,7 +2237,9 @@ void QWebEnginePage::print(QPrinter *printer, const QWebEngineCallback<bool> &re
}
d->currentPrinter = printer;
#endif // ENABLE_PRINTING
- quint64 requestId = d->adapter->printToPDFCallbackResult(printer->pageLayout(), printer->colorMode() == QPrinter::Color);
+ quint64 requestId = d->adapter->printToPDFCallbackResult(printer->pageLayout(),
+ printer->colorMode() == QPrinter::Color,
+ false);
d->m_callbacks.registerCallback(requestId, resultCallback);
#else // if defined(ENABLE_PDF)
Q_UNUSED(printer);