Преглед на файлове

Merge pull request #33 from ashkulz/header-html-crash

fix crash when --header-html is specified
Jakob Truelsen преди 11 години
родител
ревизия
924bcb7d5e
променени са 2 файла, в които са добавени 13 реда и са изтрити 5 реда
  1. 12 4
      src/lib/pdfconverter.cc
  2. 1 1
      src/lib/pdfconverter_p.hh

+ 12 - 4
src/lib/pdfconverter.cc

@@ -231,9 +231,17 @@ void PdfConverterPrivate::beginConvert() {
 // returns millimeters
 qreal PdfConverterPrivate::calculateHeaderHeight(PageObject & object, QWebPage & header) {
     typedef QPair<QWebElement, QString> p_t;
-    //settings::PdfObject & s = object.settings;
+
+    TempFile   tempObj;
+    QString    tempFile = tempObj.create(settings.outputFormat == "ps"?".ps":".pdf");
+
     QPainter * testPainter = new QPainter();
-    QPrinter * testPrinter = createPrinter();
+    QPrinter * testPrinter = createPrinter(tempFile);
+
+    if (!testPainter->begin(testPrinter)) {
+        emit out.error("Unable to write to temp location");
+        return 0.0;
+    }
 
     QWebPrinter wp(header.mainFrame(), testPrinter, *testPainter);
     qreal height = wp.elementLocation(header.mainFrame()->findFirstElement("body")).second.height();
@@ -244,7 +252,7 @@ qreal PdfConverterPrivate::calculateHeaderHeight(PageObject & object, QWebPage &
     return (height / PdfConverter::millimeterToPointMultiplier);
 }
 
-QPrinter * PdfConverterPrivate::createPrinter() {
+QPrinter * PdfConverterPrivate::createPrinter(const QString & tempFile) {
     QPrinter * printer = new QPrinter(settings.resolution);
     if (settings.dpi != -1) printer->setResolution(settings.dpi);
     //Tell the printer object to print the file <out>
@@ -253,7 +261,7 @@ QPrinter * PdfConverterPrivate::createPrinter() {
         (settings.outputFormat == "ps" || (settings.outputFormat == "" && settings.out.endsWith(".ps", Qt::CaseInsensitive)))?
         QPrinter::PostScriptFormat : QPrinter::PdfFormat
         );
-    printer->setOutputFileName(lout);
+    printer->setOutputFileName(tempFile);
 
     if ((settings.size.height.first != -1) && (settings.size.width.first != -1)) {
         printer->setPaperSize(QSizeF(settings.size.width.first,settings.size.height.first + 100), settings.size.height.second);

+ 1 - 1
src/lib/pdfconverter_p.hh

@@ -169,7 +169,7 @@ private:
 	QWebPage * currentHeader;
 	QWebPage * currentFooter;
     qreal calculateHeaderHeight(PageObject & object, QWebPage & header);
-    QPrinter * createPrinter();
+    QPrinter * createPrinter(const QString & tempFile);
 
 	void handleTocPage(PageObject & obj);
 	void preprocessPage(PageObject & obj);