Witajcie,
otóż korzystam z QT 5.9.2. Aby korzystać z dobrodziejstw QtWebEngine - przeniosłem się na kompilator MSVC 2017 64 bit. Mam problem z poprawnym działaniem funkcji. Patrzyłem już na zagadnienia z sieci. Ale jestem troszkę już zdesperowany ponieważ mimo moich usilnych prób - nie mam efektów takich jakich bym chciał.
Generuję w programie plik html. Ten plik HTML - korzysta z stylesheet.css. Zadaniem programu, oprócz generowania - jest również zapis tego pliku HTML do pliku PDF. Wcześniej realizowałem to w zły sposób ponieważ generował mi się plik z zawartością HTML ale bez stylów. Postanowiłem użyć QtWebEngine aby osiągnąć lepsze efekty - samego wyświetlania strony (jednakże nie jest to wymagane) oraz generowania pliku PDF. Używam do tego funkcji printToPdf.
Robię to w ten sposób:
W pliku mainwindow.h deklaruję sobie dwie zmienne:
QWebEngineView *webView = new QWebEngineView;
QString fileName;
A w pliku mainwindow.cpp przy funkcji obsługującej kliknięcie przycisku z mojej formatki:
// wczytuję nazwę pliku do zapisu w pdf [ output ]
fileName = QFileDialog::getSaveFileName(0,
tr("Save pdf"),
".",
tr("PDF Files (*.pdf)"));
if (fileName.isEmpty()) {
return;
}
// wczytuję plik html który [ input ]
const QString htmlFile = QFileDialog::getOpenFileName(this,"Otwórz html",".",tr("HTML Files (*.html)"));
// ładuję plik do webView
webView->load( QUrl::fromLocalFile(QFileInfo(htmlFile).absoluteFilePath()));
// łączę sygnały z slotem który odpali się gdy ładowanie zostanie zakończone
connect (webView,SIGNAL(loadFinished(bool)), this,SLOT(savePDF(bool)));
// tutaj do testów korzystam z sygnału który poinformuje mnie gdy gdy towrzenie pliku PDF zostanie zakończone.
connect (webView->page(), SIGNAL(pdfPrintingFinished(QString,bool)), this, SLOT(finishPDF(QString,bool)));*/
A to są kody moich slotów które generują plik dalej
void MainWindow::savePDF(bool ok)
{
qDebug() << "Załadowano stronę do webView";
if(ok)
{
qDebug() << "ok true";
webView->page()->printToPdf(fileName);
}
}
void MainWindow::finishPDF(QString path, bool ok)
{
qDebug() << "Skończyłem tworzyć PDF-a";
}
Program się kompiluje. Zawartość oczywiście jest większa, ale przedstawiony kod jest kodem testowym. Klikam przycisk. Wybieram plik do zapisu. Wybieram plik html. I wtedy otrzymuję logi. I gdy już ma się pojawić plik PDF - otrzymuję coś takiego:
Kompletnie nie wiem co zrobić. Wcześniej miałem kłopoty z samym użyciem QtWebEngine - ale zainstalowałem sobie kompilatory i debbuger od Microsoftu. Utworzyłem zestaw narzędzi i działa. Ale pojawił się kolejny problem. Kompletnie nie wiem jak sobie z tym poradzić. Obojętnie co zrobię z komunikatem - plik się nie tworzy.
Proszę o pomoc albo sugestię.
Z góry dzięki