QWebView exportar a PDF

51 views
Skip to first unread message

Jarley Vargas Damian

unread,
Jan 19, 2015, 10:46:26 AM1/19/15
to qt-es...@googlegroups.com
Estimados, estoy exportando el contenido de QWebView  a un archivo PDF, pero tengo un problema con las imágenes y colores:

HTML: Archivo local

Imágenes integradas 1

PDF:
Imágenes integradas 2

Versión de Qt 5.4.0

Alguien me puede ayudar por favor, gracias.

--

Atte.
Jarley Vargas Damian
//========================>>
Analista Funcional de Sistemas
Analista Programador de Sistemas

Lisandro Damián Nicanor Pérez

unread,
Jan 19, 2015, 8:04:34 PM1/19/15
to qt-es...@googlegroups.com
On Monday 19 January 2015 10:46:23 Jarley Vargas Damian wrote:
> Estimados, estoy exportando el contenido de QWebView a un archivo PDF,
> pero tengo un problema con las imágenes y colores:
>
> HTML: Archivo local
>
> [image: Imágenes integradas 1]
>
> PDF:
> [image: Imágenes integradas 2]
>
> Versión de Qt 5.4.0
>
> Alguien me puede ayudar por favor, gracias.

QWebView recién aparece con Qt 5.4.0, la versión actual.Es posible que aún
tenga fallas (eso sin mirar tu código). Sugiero mires los bugs de la clase en
el bug tracker y si no encontrás nada, llená uno.

--
2: Windows con las funciones que realiza se clasifica como:
* Un bug
Damian Nadales
http://mx.grulic.org.ar/lurker/message/20080307.141449.a70fb2fc.es.html

Lisandro Damián Nicanor Pérez Meyer
http://perezmeyer.com.ar/
http://perezmeyer.blogspot.com/
signature.asc

Jarley Vargas Damian

unread,
Jan 21, 2015, 3:19:15 PM1/21/15
to qt-es...@googlegroups.com
Estimado, gracias por la respuesta, al final buscando encontré el programa QtWeb, baje las fuentes, donde tienen algo similar implementado al momento de exportar HTML a PDF, pero la ultima compilación del programa fue hecha en Qt 4.5.8, así que me baje esa versión y compilo sin problemas, el PDF muestra los colores correctos, debe ser un bug en la última versión de Qt, el código compilado es:

#include <QCoreApplication>
#include <QApplication>
#include <QtGui/QPrinter>
#include <QtWebKit/QWebView>
#include <QTimer>
#include <QtWebKit/QWebFrame>
#include <QFile>
#include <QTextStream>
#include "runner.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QString url = qApp->applicationDirPath();
    QString archivoHTML = "SinNombre";
    QString archivoPDF = "SinNombre";
    QString dimensionesHoja = "210x297";

    /*QFile file(url + "/log.txt");
    file.open(QIODevice::WriteOnly | QIODevice::Text);
    QTextStream out(&file);*/
    for (int i = 0; i < argc; i++){
        QString valor = argv[i];

        switch (i) {
        case 1:
            archivoHTML = valor;
            break;
        case 2:
            archivoPDF = valor;
            break;
        case 3:
            dimensionesHoja = valor;
            break;
        }
        //out << valor + "\n";
    }

    //file.close();

    QStringList dimension = dimensionesHoja.split("x");
    int ancho = 210;
    int alto = 297;
    if(dimension.length() > 0)
    {
        ancho = dimension.at(0).toInt();
        alto = dimension.at(1).toInt();
    }
    QWebView *web = new QWebView();
    QEventLoop loop;

    web->settings()->setAttribute(QWebSettings::PrintElementBackgrounds, true);
    QObject::connect(web,SIGNAL(loadFinished(bool)),&loop,SLOT(quit()));

    web->load(QUrl("file:///" + url + "/" + archivoHTML + ".html"));
    loop.exec();
    web->stop();
    QPrinter printer(QPrinter::HighResolution);
    printer.setColorMode(QPrinter::Color);
    printer.setOutputFormat(QPrinter::PdfFormat);
    printer.setPaperSize(QSize(ancho, alto), QPrinter::Millimeter); //QPrinter::A4);
    printer.setPrintRange(QPrinter::AllPages);
    printer.setOrientation(QPrinter::Portrait);
    printer.setFullPage(true);
    printer.setOutputFileName(url + "/" + archivoPDF + ".pdf");
    printer.setFontEmbeddingEnabled(true);

    QWebFrame *frame = web->page()->mainFrame();
    frame->print(&printer);
    web->close();
    runner r;
    QTimer::singleShot(0, &r, SLOT(run()));
    return app.exec();
}

void runner::run() {
    QApplication::exit(0);
    QCoreApplication::exit(0);

    QApplication::quit();
    QCoreApplication::quit();
}
La aplicación de consola final la uso en .net con c#, mediante un proceso y todo va ok

Gracias, saludos.

--
Has recibido este mensaje porque estás suscrito al grupo "Qt-español" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a qt-espanol+...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a qt-es...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/qt-espanol.
Para obtener más opciones, visita https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages