Browse Source

Implement issue 281: Support of page title in header/footer

Antialize 15 years ago
parent
commit
ebfe5d847d
3 changed files with 11 additions and 6 deletions
  1. 2 0
      src/pdf/docparts.cc
  2. 7 5
      src/pdf/pdfconverter.cc
  3. 2 1
      src/pdf/pdfconverter_p.hh

+ 2 - 0
src/pdf/docparts.cc

@@ -178,6 +178,8 @@ void CommandLineParser::outputHeaderFooterDoc(Outputter * o) const {
 " * [subsection] Replaced by the name of the current subsection\n"
 " * [date]       Replaced by the current date in system local format\n"
 " * [time]       Replaced by the current time in system local format\n"
+" * [title]      Replaced by the title of the of the current page object\n"
+" * [doctitle]   Replaced by the title of the output document\n"
 "\n");
 	o->paragraph("As an example specifying --header-right \"Page [page] of [toPage]\", "
 				 "will result in the text \"Page x of y\" where x is the number of the "

+ 7 - 5
src/pdf/pdfconverter.cc

@@ -232,7 +232,7 @@ void PdfConverterPrivate::pagesLoaded(bool ok) {
 
 	painter = new QPainter();
 	
-	QString title = settings.documentTitle;
+	title = settings.documentTitle;
 	for(int d=0; d < objects.size(); ++d) {
 		if (title != "") break;
 		if (!objects[d].loaderObject || objects[d].loaderObject->skip || 
@@ -299,7 +299,7 @@ void PdfConverterPrivate::loadHeaders() {
 		for (int op=0; op < obj.pageCount; ++op) {
 			if (!ps.header.htmlUrl.isEmpty() || !ps.footer.htmlUrl.isEmpty()) {
 				QHash<QString, QString> parms;
-				fillParms(parms, pageNumber, ps);
+				fillParms(parms, pageNumber, obj);
 				hf = true;
 				if (!ps.header.htmlUrl.isEmpty())
 					obj.headers.push_back(loadHeaderFooter(ps.header.htmlUrl, parms, ps) );
@@ -397,8 +397,10 @@ void PdfConverterPrivate::findLinks(QWebFrame * frame, QVector<QPair<QWebElement
 	}
 }
 
-void PdfConverterPrivate::fillParms(QHash<QString, QString> & parms, int page, const settings::Page & ps) {
-	outline->fillHeaderFooterParms(page, parms, ps);
+void PdfConverterPrivate::fillParms(QHash<QString, QString> & parms, int page, const PageObject & object) {
+	outline->fillHeaderFooterParms(page, parms, object.settings);
+	parms["doctitle"] = title;
+	parms["title"] = object.page?object.page->mainFrame()->title():"";
 	QDateTime t(QDateTime::currentDateTime());
 	parms["time"] = t.time().toString(Qt::SystemLocaleShortDate);
 	parms["date"] = t.date().toString(Qt::SystemLocaleShortDate);
@@ -416,7 +418,7 @@ void PdfConverterPrivate::endPage(PageObject & object, bool hasHeaderFooter, int
 	settings::Page & s = object.settings;
 	if(hasHeaderFooter) {
 		QHash<QString, QString> parms;
-		fillParms(parms, pageNumber, s);
+		fillParms(parms, pageNumber, object);
 
 		//Webkit used all kinds of crazy coordinate transformation, and font setup
 		//We save it here and restore some sane defaults

+ 2 - 1
src/pdf/pdfconverter_p.hh

@@ -100,6 +100,7 @@ private:
 	QPrinter * printer;
 	QPainter * painter;
 	QString lout;
+	QString title;
 
 	int actualPages;
 	int pageCount;
@@ -121,7 +122,7 @@ private:
 	void findLinks(QWebFrame * frame, QVector<QPair<QWebElement, QString> > & local, QVector<QPair<QWebElement, QString> > & external, QHash<QString, QWebElement> & anchors);
 	void beginPage(int actualPage);
 	void endPage(PageObject & object, bool hasHeaderFooter, int objectPage,  int pageNumber);
-	void fillParms(QHash<QString, QString> & parms, int page, const settings::Page & ps);
+	void fillParms(QHash<QString, QString> & parms, int page, const PageObject & object);
 	QString hfreplace(const QString & q, const QHash<QString, QString> & parms);
 	QWebPage * loadHeaderFooter(QString url, const QHash<QString, QString> & parms, const settings::Page & ps);
 #endif