|
@@ -327,43 +327,48 @@ void WKHtmlToPdf::printPage() {
|
|
|
|
|
|
int cc=collate?copies:1;
|
|
|
int pc=collate?1:copies;
|
|
|
-
|
|
|
-
|
|
|
- QHash<QString, int> urlToDoc;
|
|
|
- for(int d=0; d < pages.size(); ++d)
|
|
|
- urlToDoc[ pages[d]->mainFrame()->url().toString(QUrl::RemoveFragment) ] = d;
|
|
|
-
|
|
|
+
|
|
|
QHash<int, QHash<QString, QWebElement> > anchors;
|
|
|
QHash<int, QVector< QPair<QWebElement,QString> > > localLinks;
|
|
|
QHash<int, QVector< QPair<QWebElement,QString> > > externalLinks;
|
|
|
|
|
|
//Find and resolve all local links
|
|
|
- for(int d=0; d < pages.size(); ++d) {
|
|
|
- QList<QWebElement> links = pages[d]->mainFrame()->findAllElements("a");
|
|
|
- for(QList<QWebElement>::iterator i=links.begin(); i != links.end(); ++i) {
|
|
|
- QUrl href=QUrl(i->attribute("href"));
|
|
|
- if(href.isEmpty()) continue;
|
|
|
- href=pages[d]->mainFrame()->url().resolved(href);
|
|
|
- if(urlToDoc.contains(href.toString(QUrl::RemoveFragment))) {
|
|
|
- int t = urlToDoc[href.toString(QUrl::RemoveFragment)];
|
|
|
- QWebElement e;
|
|
|
- if(!href.hasFragment())
|
|
|
- e = pages[t]->mainFrame()->findFirstElement("body");
|
|
|
- else {
|
|
|
- e = pages[t]->mainFrame()->findFirstElement("a[name=\""+href.fragment()+"\"]");
|
|
|
- if(e.isNull())
|
|
|
- e = pages[t]->mainFrame()->findFirstElement("*[id=\""+href.fragment()+"\"]");
|
|
|
- }
|
|
|
- if(e.isNull()) {
|
|
|
- qDebug() << "Unable to find target for local link " << href;
|
|
|
- } else {
|
|
|
- anchors[t][href.toString()] = e;
|
|
|
- localLinks[d].push_back( qMakePair(*i, href.toString()) );
|
|
|
- }
|
|
|
- //qDebug() << href.toString();
|
|
|
- } else {
|
|
|
- //qDebug() << href.toString();
|
|
|
- externalLinks[d].push_back( qMakePair(*i, href.toString() ) );
|
|
|
+ if(useLocalLinks || useExternalLinks) {
|
|
|
+ QHash<QString, int> urlToDoc;
|
|
|
+ for(int d=0; d < pages.size(); ++d)
|
|
|
+ urlToDoc[ pages[d]->mainFrame()->url().toString(QUrl::RemoveFragment) ] = d;
|
|
|
+
|
|
|
+ for(int d=0; d < pages.size(); ++d) {
|
|
|
+ if (!quiet) {
|
|
|
+ fprintf(stderr, "Resolving Links %d of %d \r",d+1,pages.size());
|
|
|
+ fflush(stdout);
|
|
|
+ }
|
|
|
+
|
|
|
+ QList<QWebElement> links = pages[d]->mainFrame()->findAllElements("a");
|
|
|
+ for(QList<QWebElement>::iterator i=links.begin(); i != links.end(); ++i) {
|
|
|
+ QUrl href=QUrl(i->attribute("href"));
|
|
|
+ if(href.isEmpty()) continue;
|
|
|
+ href=pages[d]->mainFrame()->url().resolved(href);
|
|
|
+ if(urlToDoc.contains(href.toString(QUrl::RemoveFragment))) {
|
|
|
+ if(useLocalLinks) {
|
|
|
+ int t = urlToDoc[href.toString(QUrl::RemoveFragment)];
|
|
|
+ QWebElement e;
|
|
|
+ if(!href.hasFragment())
|
|
|
+ e = pages[t]->mainFrame()->findFirstElement("body");
|
|
|
+ else {
|
|
|
+ e = pages[t]->mainFrame()->findFirstElement("a[name=\""+href.fragment()+"\"]");
|
|
|
+ if(e.isNull())
|
|
|
+ e = pages[t]->mainFrame()->findFirstElement("*[id=\""+href.fragment()+"\"]");
|
|
|
+ }
|
|
|
+ if(e.isNull())
|
|
|
+ qDebug() << "Unable to find target for local link " << href;
|
|
|
+ else {
|
|
|
+ anchors[t][href.toString()] = e;
|
|
|
+ localLinks[d].push_back( qMakePair(*i, href.toString()) );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if(useExternalLinks)
|
|
|
+ externalLinks[d].push_back( qMakePair(*i, href.toString() ) );
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -387,6 +392,11 @@ void WKHtmlToPdf::printPage() {
|
|
|
int actualPages = 0;;
|
|
|
//Count the number of pages
|
|
|
for(int d=0; d < pages.size(); ++d) {
|
|
|
+ if (!quiet) {
|
|
|
+ fprintf(stderr, "Counting pages %d of %d \r",d+1,pages.size());
|
|
|
+ fflush(stdout);
|
|
|
+ }
|
|
|
+
|
|
|
painter.save();
|
|
|
QWebPrinter wp(pages[d]->mainFrame(), &printer, painter);
|
|
|
painter.restore();
|
|
@@ -499,19 +509,16 @@ void WKHtmlToPdf::printPage() {
|
|
|
for(QHash<QString, QWebElement>::iterator i=myAnchors[p+1].begin();
|
|
|
i != myAnchors[p+1].end(); ++i) {
|
|
|
QRectF r = wp.elementLocation(i.value()).second;
|
|
|
- r = painter.worldTransform().mapRect(r);
|
|
|
painter.addAnchor(r, i.key());
|
|
|
}
|
|
|
for(QVector< QPair<QWebElement,QString> >::iterator i=myLocalLinks[p+1].begin();
|
|
|
i != myLocalLinks[p+1].end(); ++i) {
|
|
|
QRectF r = wp.elementLocation(i->first).second;
|
|
|
- r = painter.worldTransform().mapRect(r);
|
|
|
painter.addLink(r, i->second);
|
|
|
}
|
|
|
for(QVector< QPair<QWebElement,QString> >::iterator i=myExternalLinks[p+1].begin();
|
|
|
i != myExternalLinks[p+1].end(); ++i) {
|
|
|
QRectF r = wp.elementLocation(i->first).second;
|
|
|
- r = painter.worldTransform().mapRect(r);
|
|
|
painter.addHyperlink(r, QUrl(i->second));
|
|
|
}
|
|
|
|