Seite 1 von 1

QT4: PDF Preview in widget

Verfasst: 11. April 2007 09:10
von nando
Hi,

ich moechte ein selbsterstelltes PDF (mit libharu) offnen und in meiner applikation anzeigen (als preview).

gibt es eine moeglichkeit ein pdf dokument zu oeffnen und darzustellen, also intern und nicht ueber QProcess oder so einen externen viewer starten???

gruss,
nando

Verfasst: 11. April 2007 09:19
von lepsai
soweit ich weiss - nein. In die andere Richtung geht's mit dem PDF-Printer.

Unter Win hättest du die Möglichkeit mit einem PDF-ActiveX zu arbeiten...

Verfasst: 11. April 2007 09:26
von nando
wie machen die das dann bei firefox ? da kann man ja auch pdf's sehen.
auch unter linux....

Verfasst: 11. April 2007 09:31
von lepsai
firefox kenne ich nicht, da kann ich dir nicht helfen... Vielleicht kannste du in die Sourcen von denen reinschauen...

Verfasst: 11. April 2007 09:55
von franzf
Vielleicht hilft dir das hier weiter:

Code: Alles auswählen

app-text/poppler
     Available versions:  0.5.3 0.5.4 0.5.4-r1
     Installed versions:  0.5.4-r1(13:32:38 22.02.2007)(-cjk jpeg zlib)
     Homepage:            http://poppler.freedesktop.org/
     Description:         PDF rendering library based on the xpdf-3.0 code base
Xpdf / Kpdf etc verwenden das zum Rendern der pdf-Seiten:

Code: Alles auswählen

equery d poppler
[ Searching for packages depending on poppler... ]
app-text/poppler-bindings-0.5.4 (~app-text/poppler-0.5.4)
app-text/xpdf-3.01-r8 (>=app-text/poppler-0.5.1)
kde-base/kpdf-3.5.6-r1 (>=app-text/poppler-0.5.1)
net-print/cups-1.2.9 (>=app-text/poppler-0.4.3-r1)
Nur dass du mal siehst ;)

Ob das ganze Plattformunanhängig ist kann ich dir leider nicht sagen. Ich nutze halt Linux.

Grüße
Franz

Verfasst: 11. April 2007 12:04
von upsala
Firefox benutzt den Acrobat als Plugin...

Verfasst: 11. April 2007 12:17
von nando
hm....
gibt es da irgendwie genauere informationen, wie man das macht....??
hab bis jetzt nix finden koennen...

gruss,
nando

Verfasst: 11. April 2007 12:29
von nando
Was ich sehe, ist dass das Adobe Reader Plugin dafuer da ist den bestehenden Adobe Reader zu endern/erweitert.
Ich will den ja nur in einem QT Widget nutzen.. wahrscheinlich komm ich um die ActiveX geschichte nicht rum.....

Verfasst: 11. April 2007 13:33
von lepsai
Na gut, wenn du unter Win arbeitest, dann ist ActiveX die schnellste und einfachste Lösung, unter Linux haste aber ein Problem :)

Verfasst: 25. April 2008 22:52
von suamor
Das Thema möchte ich nochmal aufleben lassen, da ich wirklich wie es sich für Qt4 gehört plattformunabhängig arbeite.

Zur Darstellung von PDF kommt kpdf nicht in Frage, da er auf qt3 aufsetzt. Also bleiben momentan theoretisch Adobe (verwenden der API ist wohl nicht GPL-kompatibel, oder ? unter Linux hat auch nicht jeder den Acrobat unbedingt installiert), XPDF und Poppler.

Da Poppler eine Qt4-Unterstützung hat, finde ich das die interessanteste Variante, zumal evince poppler verwendet und eine sehr gute Qualität hat. Leider habe ich bislang kein reines Qt4 Programm außer dem Demo gefunden, daß aber keinen Zoom hat, so daß ich keinen echten Vergleich anstellen kann.

Bei meinen eigenen Programmierversuchen habe ich nur schlechte Qualität erzielt (ScreenResolution anscheinend 72dpi) oder es hat bei HighResolution (1200 dpi) mein Speicher nicht ausgereicht und nach 5min Swapping habe ich den Test abgebrochen. Anscheinend reicht das Zeichnen in den QPainter von QPrinter nicht aus, um direkt in Datei bzw. den Drucker zu zeichnen. Das hat mich natürlich gewundert, aber ich habe bislang kein auf Qt4 basierendes Beispiel gefunden, das auch eine Druckausgabe hat. Einige der Beispielprogramme richten sich nach der Bildgröße, um die Auslösung zu berechnen, das ist das nächste, was ich ausprobieren werde.

Reinhard

P.S.
Der Druckcode in der nicht ganz aktuellen Fassung (habe Renderhints auf Aliasing nochmal explizit aktiviert sowohl für Poppler als auch QPainter) ist im SVN von Canorus zu finden, die Klasse heißt printctl.cpp, die Methode printPDF (im control Verzeichnis) auf canorus.org.

Re: QT4: PDF Preview in widget

Verfasst: 26. April 2008 12:29
von patrik08
nando hat geschrieben:Hi,

ich moechte ein selbsterstelltes PDF (mit libharu) offnen und in meiner applikation anzeigen (als preview).

gibt es eine moeglichkeit ein pdf dokument zu oeffnen und darzustellen, also intern und nicht ueber QProcess oder so einen externen viewer starten???

gruss,
nando
mit QDesktopServices kannst du die datei darstellen mit acrobat reader...
und um die datei in einen qwidged zu zeichen brauchst du ghostcript..


Code: Alles auswählen


extern inline QPixmap LoadPDF(QString fn, int Page, int w )
{
	QString tmp, cmd1, cmd2;
	const QString pdfFile = PathConvert(fn);
	const QString tmpFile = PathConvert(QDir::homePath()+"/sctodaytmps.png");
    const QString qttmpFile = QDir::homePath()+"/sctodaytmps.png";
	QPixmap pm;
    tmp.setNum(Page);
	int ret = -1;
	tmp.setNum(Page);
	QStringList args;
    args.append("-sDEVICE=png16m");
    args.append("-r72");
    args.append("-dGraphicsAlphaBits=4");
    args.append("-o");
	args.append(tmpFile);
    args.append("-dFirstPage="+tmp);
	args.append("-dLastPage="+tmp);
	args.append(pdfFile);
	ret = callGS(args);
    ////////qDebug() << "### ret " << ret;
	if (ret == 0)
	{
		QPixmap tmpimage(qttmpFile);
        QPixmap penna = tmpimage.scaledToWidth(w);
        tmpimage.detach(); 
        QFile lastaction(qttmpFile);
        lastaction.remove();   /* remove file */
        QPainter p;
		p.begin(&penna);
		p.setBrush(Qt::NoBrush);
		p.setPen(QPen(QBrush(Qt::black),2,Qt::SolidLine));
		p.drawRect(0, 0, penna.width(), penna.height());
		p.end();
        return penna;
	}
	return pm;
}


Verfasst: 27. April 2008 09:10
von franzf
Hi Reinhard,
suamor hat geschrieben:Da Poppler eine Qt4-Unterstützung hat, finde ich das die interessanteste Variante, zumal evince poppler verwendet und eine sehr gute Qualität hat. Leider habe ich bislang kein reines Qt4 Programm außer dem Demo gefunden, daß aber keinen Zoom hat, so daß ich keinen echten Vergleich anstellen kann.
Wenn es dir nicht zu komplex ist dich da durchzuwurschteln (denke nicht) schau dir mal Okular an, im speziellen den PopplerGenerator.
Okular ist halt MultiFormat (PDF, PS, Bilder, chm, ...), also musst du dir die einzelnen für dich interessanten Teile zusammensuchen.
Hier gibts den Code:
http://websvn.kde.org/trunk/KDE/kdegraphics/okular/

Grüße
Franz