QT4: PDF Preview in widget

Alles rund um die Programmierung mit Qt
Antworten
nando
Beiträge: 321
Registriert: 28. Oktober 2004 13:16

QT4: PDF Preview in widget

Beitrag 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
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag 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...
nando
Beiträge: 321
Registriert: 28. Oktober 2004 13:16

Beitrag von nando »

wie machen die das dann bei firefox ? da kann man ja auch pdf's sehen.
auch unter linux....
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

firefox kenne ich nicht, da kann ich dir nicht helfen... Vielleicht kannste du in die Sourcen von denen reinschauen...
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Firefox benutzt den Acrobat als Plugin...
nando
Beiträge: 321
Registriert: 28. Oktober 2004 13:16

Beitrag von nando »

hm....
gibt es da irgendwie genauere informationen, wie man das macht....??
hab bis jetzt nix finden koennen...

gruss,
nando
nando
Beiträge: 321
Registriert: 28. Oktober 2004 13:16

Beitrag 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.....
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Na gut, wenn du unter Win arbeitest, dann ist ActiveX die schnellste und einfachste Lösung, unter Linux haste aber ein Problem :)
suamor
Beiträge: 3
Registriert: 13. Juli 2006 11:57

Beitrag 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.
Project: Canorus - the next generation music score editor - http://canorus.berlios.de
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Re: QT4: PDF Preview in widget

Beitrag 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;
}

Dateianhänge
ghostinline.txt
(8.84 KiB) 138-mal heruntergeladen
.........................
speack português italiano deutsch english castellà qt
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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
Antworten