#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