QT4: PDF Preview in widget
QT4: PDF Preview in widget
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
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
Vielleicht hilft dir das hier weiter:
Xpdf / Kpdf etc verwenden das zum Rendern der pdf-Seiten:
Nur dass du mal siehst
Ob das ganze Plattformunanhängig ist kann ich dir leider nicht sagen. Ich nutze halt Linux.
Grüße
Franz
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
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)
Ob das ganze Plattformunanhängig ist kann ich dir leider nicht sagen. Ich nutze halt Linux.
Grüße
Franz
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.
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
Re: QT4: PDF Preview in widget
mit QDesktopServices kannst du die datei darstellen mit acrobat reader...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
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
speack português italiano deutsch english castellà qt
Hi Reinhard,
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
Wenn es dir nicht zu komplex ist dich da durchzuwurschteln (denke nicht) schau dir mal Okular an, im speziellen den PopplerGenerator.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.
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