mirror of
https://invent.kde.org/network/falkon.git
synced 2024-11-14 02:52:12 +01:00
[PageScreen] Add possibility to save into PDF and PostScript
Closes #903
This commit is contained in:
parent
bb03cfb133
commit
772427ef09
|
@ -20,6 +20,7 @@
|
||||||
#include "tabbedwebview.h"
|
#include "tabbedwebview.h"
|
||||||
#include "webpage.h"
|
#include "webpage.h"
|
||||||
#include "qztools.h"
|
#include "qztools.h"
|
||||||
|
#include "qupzilla.h"
|
||||||
|
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
#include <QWebFrame>
|
#include <QWebFrame>
|
||||||
|
@ -28,6 +29,7 @@
|
||||||
#include <QMovie>
|
#include <QMovie>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
#include <QCloseEvent>
|
#include <QCloseEvent>
|
||||||
|
#include <QPrinter>
|
||||||
|
|
||||||
#if QT_VERSION >= 0x050000
|
#if QT_VERSION >= 0x050000
|
||||||
#include <QtConcurrent/QtConcurrentRun>
|
#include <QtConcurrent/QtConcurrentRun>
|
||||||
|
@ -49,6 +51,8 @@ PageScreen::PageScreen(WebView* view, QWidget* parent)
|
||||||
m_formats[2] = QLatin1String("JPG");
|
m_formats[2] = QLatin1String("JPG");
|
||||||
m_formats[3] = QLatin1String("PPM");
|
m_formats[3] = QLatin1String("PPM");
|
||||||
m_formats[4] = QLatin1String("TIFF");
|
m_formats[4] = QLatin1String("TIFF");
|
||||||
|
m_formats[5] = QLatin1String("PDF");
|
||||||
|
m_formats[6] = QLatin1String("PS");
|
||||||
|
|
||||||
QHashIterator<int, QString> i(m_formats);
|
QHashIterator<int, QString> i(m_formats);
|
||||||
while (i.hasNext()) {
|
while (i.hasNext()) {
|
||||||
|
@ -102,17 +106,24 @@ void PageScreen::dialogAccepted()
|
||||||
{
|
{
|
||||||
if (!ui->location->text().isEmpty()) {
|
if (!ui->location->text().isEmpty()) {
|
||||||
QApplication::setOverrideCursor(Qt::WaitCursor);
|
QApplication::setOverrideCursor(Qt::WaitCursor);
|
||||||
saveScreen();
|
|
||||||
|
const QString &format = m_formats[ui->formats->currentIndex()];
|
||||||
|
if (format == QLatin1String("PDF") || format == QLatin1String("PS")) {
|
||||||
|
saveAsDocument(format);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
saveAsImage(format);
|
||||||
|
}
|
||||||
|
|
||||||
QApplication::restoreOverrideCursor();
|
QApplication::restoreOverrideCursor();
|
||||||
|
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PageScreen::saveScreen()
|
void PageScreen::saveAsImage(const QString &format)
|
||||||
{
|
{
|
||||||
const QString &format = m_formats[ui->formats->currentIndex()];
|
const QString &suffix = QLatin1Char('.') + format.toLower();
|
||||||
const QString &suffix = QLatin1Char('.') + m_formats[ui->formats->currentIndex()].toLower();
|
|
||||||
|
|
||||||
QString pathWithoutSuffix = ui->location->text();
|
QString pathWithoutSuffix = ui->location->text();
|
||||||
if (pathWithoutSuffix.endsWith(suffix, Qt::CaseInsensitive)) {
|
if (pathWithoutSuffix.endsWith(suffix, Qt::CaseInsensitive)) {
|
||||||
|
@ -132,6 +143,38 @@ void PageScreen::saveScreen()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PageScreen::saveAsDocument(const QString &format)
|
||||||
|
{
|
||||||
|
const QString &suffix = QLatin1Char('.') + format.toLower();
|
||||||
|
|
||||||
|
QString pathWithoutSuffix = ui->location->text();
|
||||||
|
if (pathWithoutSuffix.endsWith(suffix, Qt::CaseInsensitive)) {
|
||||||
|
pathWithoutSuffix = pathWithoutSuffix.mid(0, pathWithoutSuffix.length() - suffix.length());
|
||||||
|
}
|
||||||
|
|
||||||
|
QPrinter printer;
|
||||||
|
printer.setCreator(QupZilla::tr("QupZilla %1 (%2)").arg(QupZilla::VERSION, QupZilla::WWWADDRESS));
|
||||||
|
printer.setOutputFileName(pathWithoutSuffix + suffix);
|
||||||
|
printer.setOutputFormat(format == QLatin1String("PDF") ? QPrinter::PdfFormat : QPrinter::PostScriptFormat);
|
||||||
|
printer.setPaperSize(m_pageImages.first().size(), QPrinter::DevicePixel);
|
||||||
|
printer.setPageMargins(0, 0, 0, 0, QPrinter::DevicePixel);
|
||||||
|
printer.setFullPage(true);
|
||||||
|
|
||||||
|
QPainter painter;
|
||||||
|
painter.begin(&printer);
|
||||||
|
|
||||||
|
for (int i = 0; i < m_pageImages.size(); ++i) {
|
||||||
|
const QImage &image = m_pageImages.at(i);
|
||||||
|
painter.drawImage(0, 0, image);
|
||||||
|
|
||||||
|
if (i != m_pageImages.size() - 1) {
|
||||||
|
printer.newPage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
painter.end();
|
||||||
|
}
|
||||||
|
|
||||||
void PageScreen::createThumbnail()
|
void PageScreen::createThumbnail()
|
||||||
{
|
{
|
||||||
QWebPage* page = m_view->page();
|
QWebPage* page = m_view->page();
|
||||||
|
@ -146,9 +189,9 @@ void PageScreen::createThumbnail()
|
||||||
int yPosition = 0;
|
int yPosition = 0;
|
||||||
bool canScroll = frameSize.height() > heightLimit;
|
bool canScroll = frameSize.height() > heightLimit;
|
||||||
|
|
||||||
/* We will split rendering page into smaller parts to avoid infinite loops
|
// We will split rendering page into smaller parts to avoid infinite loops
|
||||||
* or crashes.
|
// or crashes.
|
||||||
*/
|
|
||||||
do {
|
do {
|
||||||
int remainingHeight = frameSize.height() - yPosition;
|
int remainingHeight = frameSize.height() - yPosition;
|
||||||
if (remainingHeight <= 0) {
|
if (remainingHeight <= 0) {
|
||||||
|
|
|
@ -49,7 +49,9 @@ private slots:
|
||||||
void dialogAccepted();
|
void dialogAccepted();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void saveScreen();
|
void saveAsImage(const QString &format);
|
||||||
|
void saveAsDocument(const QString &format);
|
||||||
|
|
||||||
void createPixmap();
|
void createPixmap();
|
||||||
|
|
||||||
Ui::PageScreen* ui;
|
Ui::PageScreen* ui;
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>531</width>
|
<width>531</width>
|
||||||
<height>271</height>
|
<height>264</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
@ -50,21 +50,8 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item>
|
<item row="1" column="1">
|
||||||
<spacer name="horizontalSpacer">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>40</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QFormLayout" name="formLayout">
|
<layout class="QFormLayout" name="formLayout">
|
||||||
<property name="fieldGrowthPolicy">
|
<property name="fieldGrowthPolicy">
|
||||||
<enum>QFormLayout::ExpandingFieldsGrow</enum>
|
<enum>QFormLayout::ExpandingFieldsGrow</enum>
|
||||||
|
@ -109,7 +96,20 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item row="1" column="0">
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="2">
|
||||||
<spacer name="horizontalSpacer_2">
|
<spacer name="horizontalSpacer_2">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
|
@ -122,6 +122,13 @@
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="0" column="0" colspan="3">
|
||||||
|
<widget class="Line" name="line">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user