PDF-Vorschau

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

PDF-Vorschau

Beitrag von Jan »

Ich zeige in einem Projekt eine Bildervorschau für jpg und bmp an. Das klappt ja über die Bordmittel von Xbase++ sehr gut. Aber wie kann ich sowas mit pdf machen? Die sollen direkt auf der :drawingArea() angezeigt werden, nicht in irgendeinem extra Fenster.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Christian
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 44
Registriert: Mi, 18. Jul 2007 15:05

Re: PDF-Vorschau

Beitrag von Christian »

Hallo Jan,

ich kenne nur den weg über ActiveX (glaube ab AcrobatReader Version 9).

Code: Alles auswählen

		oPDF := XbpActiveXControl():new( drawingArea )
		oPDF:CLSID  := "{CA8A9780-280D-11CF-A24D-444553540000}"
		oPDF:create(,, {0,0}, drawingArea:currentSize() )
		oPDF:loadFile( cFile )                                      // hier den Dateinamen angeben
		oPDF:SetShowToolBar( .T. )
		oPDF:SetShowScrollbars( .T. )
Gruß
Christian
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: PDF-Vorschau

Beitrag von Jan »

Hallo Christian,

ja, per ActiveX mach ich teilweise auch. Das Problem ist, das der immer den Adobe Reader erst laden muß. Für eine schnelle Vorschau ist mir das viel zu lahm.

Abgesehen davon habe ich das Problem, das nicht auf jedem Rechner der Adobe Reader installiert ist. Gerader WEIL der Adobe Reader so ein Monster ist steigen viele auf andere PDF-Viewer um. Die kann ich garnicht alle abdecken, manche haben nicht einmal eine ActiveX-Schnittstelle, die ich nutzen könnte.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: PDF-Vorschau

Beitrag von Rudolf »

Hallo,
wenn es nur um einfache Anzeige geht, mache ich mit QUICKPDF ein JPG File, geht sehr schnell, auf alle Fälle schneller als die Acrobat Anzeige. Vor allem beim ersten Aufruf ist Acrobat total langsam. Gibt Tools die unnötige Dinge ausblenden, geht dann schneller, aber die will ich nicht immer beim Kunden installieren lassen.
Grüße
Rudolf
Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 483
Registriert: So, 28. Mär 2010 19:21
Danksagung erhalten: 11 Mal

Re: PDF-Vorschau

Beitrag von azzo »

>mache ich mit QUICKPDF ein JPG File

Hallo Rudolf,
kannst du dazu etwas mehr posten.
Danke.
Mfg
Otto
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: PDF-Vorschau

Beitrag von brandelh »

Grundsätzlich könnte QuickPDF (wenn ich das richtig im Kopf habe) direkt auf z.B. ein XbpStatic zeichnen.
Auf deren Server liegt ein Beispiel für PowerBasic, allerdings vermute ich dass man dann auch Events (repaint) etc. berücksichtigen muss.
Wenn man aber die Druckausgabe in eine Bilddatei umlenkt, kann man einfach diese in einem Static anzeigen und dieses kümmert sich um die Anzeige.

Vermutlich nutzt Rudolf die Funktion (HBPrintPDF-Methode) (DA)RenderPageToFile()
Gruß
Hubert
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: PDF-Vorschau

Beitrag von Rudolf »

Hallo,

Code: Alles auswählen

function pdftest()
******************************************************************
local oStatic1,oBitmap,nPageID,nPages,abuffer := {}
//TQuickPdf():Register(QUICKPDF_KEY) // wird beim Programmstart nur einmal gemacht !!!
cFile := "laststrokes.pdf"
WITH OBJECT ( oPdf := TQuickPdf():New() )
     nPageID := .:LoadFromFile(cFile)
     nPages := .:PageCount()
     for x := 1 to nPages
          aadd(aBuffer,substr(.:RenderPagetoString(96,x,0),15))
     next x
     .:Destroy()
END WITH

@ 0,0   DCSTATIC TYPE XBPSTATIC_TYPE_RECESSEDBOX SIZE 100,50 OBJECT oStatic1

oBitmap := xbpBitmap():new():create()
oBitmap:setbuffer(aBuffer[1]) // nur erste Seite für Test

@ .1,.1  DCSTATIC TYPE XBPSTATIC_TYPE_BITMAP SIZE 100,50 CAPTION oBitmap OBJECT oBitmap1 PARENT oStatic1

dcread gui fit
return nil

ist wesentlich schneller als das PDF anzeigen, leider habe ich noch nichts gefunden um die Größe des Image im Fenster dynamisch zu verändern, z.B. Buttons zum Zoomen. Muss da noch ein wenig experimentieren. QUICKPDF ist auch super um komplexe Images zu erstellen und zu konvertieren, kann viel mehr als nur PDFs bearbeiten.
Grüße
Rudolf
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: PDF-Vorschau

Beitrag von brandelh »

Hallo Rudolf,

du renderst fix auf 96 dpi, besser wäre es dies vorher abzufragen.
Die Funktion SetRenderScale() scheint eine Größenanpassung zu ermöglichen.
Ansonsten bleibt die Größenanpassung in XbpBitmap() (Hilfeseite, siehe Beispiel unten mit GraBitBlt())

Die Veränderung der dpi Zahl sollte eine Größenänderung des Bilds in den gleichen Grenzen ermöglichen.
Auch könnte :setPageSize() und :setViewPort() von XbpPresSpace() nützlich sein.
Gruß
Hubert
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: PDF-Vorschau

Beitrag von Rudolf »

Hallo Hubert,
ist nur eine meiner Testfunktionen, werde wenn ich wieder ein wenig Zeit habe mit den ganzen Parametern experimentieren. Jedenfalls ist die Geschwindigkeit wesentlich schneller als mit einem normalen PDF und Acrobat. Verwende es auch um Thumbnails zu erstellen.
Grüße
Rudolf
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: PDF-Vorschau

Beitrag von brandelh »

Klar doch und nochmal Danke für den Tipp, nun verstehe ich, was die mit RenderPagetoString(96,x,0) gemeint haben :D
Gruß
Hubert
Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 483
Registriert: So, 28. Mär 2010 19:21
Danksagung erhalten: 11 Mal

Re: PDF-Vorschau

Beitrag von azzo »

Hallo Rudolf,
danke, dass du deine Lösung mit uns teilst.

Ich programmiere mit harbour und habe für mich das Problem folgend gelöst:
Ich öffne mit winexec mit Hilfe von PDFXCview meine PDFs und mache dann einen Screenshot.
Das Problem dabei ist, dass die PDFs für eine kurze Zeit am Bildschirm angezeigt werden müssen.
Wie ist das bei QUICKPDF. Wird hier das PDF ohne Bildschirmanzeige in eine JPG umgewandelt?
Ich werde versuchen, deine Lösung nachzubauen.
Danke nochmals.
mfg
Otto

http://www.atzwanger-software.com/fw/pd ... iewer.html

Code: Alles auswählen

function PdfToJpeg( cPDF )
	local cExe     := "c:\Tracker Software\PDF Viewer\PDFXCview.exe"
   local cTitle   := cFileNoExt(  LFN2SFN(  cPDF ) ) //+ " - PDF-XChange Viewer"
   local cCmd
   local hWnd, hBmp, hBmp2, hDib, cBuf, nWait := 2
   local lRet  := .f.

   if File( cExe ) .and. File( cPDF )
      cCmd  := cExe + ' /A "fullscreen=yes"' +  ' ' +  LFN2SFN(  cPDF )
		//cCmd  := cExe + ' /A "Zoom=150"' +  ' ' + cPDF
      
      WinExec( cCmd )
      SysWait( 3 )
      
      do while nWait < 12 .and. Empty( hWnd :=  FindWnd( cTitle ) )
         SysWait( nWait )
         nWait    += 1
      enddo
      if ! Empty( hWnd )

         SetFocus( hWnd )
         SetForeGroundWindow( hWnd )
         SysRefresh()
         SysWait( 0.1 )

         hBmp	:= WndBitmap( hWnd )
         SendMessage( hWnd, WM_CLOSE )

         hBmp2             := BmpTrim( hBmp )
         DeleteObject( hBmp )

         hDib              := DibFromBitmap( hBmp2 )
         cBuf              := DibToStr( hDib )
         GlobalFree( hDib )
         DeleteObject( hBmp2 )

         lRet              := BmpBufToJpg( cFileSetExt( cPDF, "jpg" ), cBuf )
         cBuf              := nil
      endif
   endif

return lRet

//----------------------------------------------------------------------------//
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: PDF-Vorschau

Beitrag von Wolfgang Ciriack »

Wer ein bischen Geld ausgeben kann oder will, kann sich auch mal den GdPicture-Viewer (http://www.gdpicture.com/) ansehen, habe ich über ActiveX eingebunden und kann neben Bild- und PDF-Anzeigen noch vieles mehr.
Viele Grüße
Wolfgang
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: PDF-Vorschau

Beitrag von Rudolf »

Hallo,
es wird nichts angezeigt, läuft alles im Hintergrund ab. Ich muss teilweise 10seitige PDFs einlesen, berbeiten und dann rendern, geht blitzschnell und sehr zuverlässig. Habe noch viele andere Beispiele, z.B. Vektordaten aus Handschrifterfassung auf Hintergrund darstellen, editierbare PDFs erstellen welche dann über einen integrierten Button an meinen XB2NET Webserver zur Auswertung geschickt werden etc. Kann bei Bedarf gerne mehr hier posten. Der Support für das Tool ist super, ist wirklich sein Geld wert.
Grüße
Rudolf
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: PDF-Vorschau

Beitrag von AUGE_OHR »

Rudolf hat geschrieben:Vor allem beim ersten Aufruf ist Acrobat total langsam.
unter Xbase++ über die activeX Schnittstelle ...
nicht nur das man per DispHPR.DLL es 40x schneller hin bekommt man kann damit ja auch die PDF "Vorschau" von Win7 / Win8 ansteuern.

da es Jan aber für die o:drawingArea() haben will "müsste" man es aus dem DC des activeX in den DC des Presentationspace übertragen.
was Rudolf mit einem JPG macht ist auch in einem Schritt möglich.
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: PDF-Vorschau

Beitrag von Jan »

Jimmy hat geschrieben: "müsste" man es aus dem DC des activeX in den DC des Presentationspace übertragen.
Wie bitte meinen?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: PDF-Vorschau

Beitrag von AUGE_OHR »

Jan hat geschrieben:
Jimmy hat geschrieben: "müsste" man es aus dem DC des activeX in den DC des Presentationspace übertragen.
Wie bitte meinen?
such mal im Alaska Forum "hDC nach hDC"
gruss by OHR
Jimmy
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: PDF-Vorschau

Beitrag von Rudolf »

Hallo,
so weit ich weiss sind die vielen Plugins die Acrobat standardmäßig inkludiert hat das Problem, zumindest beim ersten Aufruf. Da wird disphpr.dll nur wenig bringen.
Grüße
Rudolf
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: PDF-Vorschau

Beitrag von brandelh »

Der Acrobat Reader als solcher ist das Problem :!: die zusätzlichen AddIns machen die Sache noch schlimmer.
Ich persönlich nutze ihn trotzdem, auch aus Programmen heraus, denn viele Anwender haben ihn und wollen ihn.
Das Problem sind einfach die unzähligen Angriffspunkte für die der Acrobat Reader berüchtigt ist.
Auch wenn man die neueste Version hat, wer weiß was noch alles darin schlummert und er ist ein Hauptangriffsziel der Hacker.

Wenn der Anwender ihn dennoch will, OK, aber wenn man eine Software verkauft, die die Installation des Acrobat Reader erzwingt, das ist problematisch.
(Ich nutze immer das Standardprogramm das für PDF hinterlegt ist).

Daher ist der direkte Weg von Rudolf ( ich weiß nicht warum er JPEG erwähnt hat, alles läuft ausschließlich im RAM ab,
außer man muss die PDF zuerst noch laden ) nicht nur der schnellste sondern auch der sicherste.

Die QuickPDF sind wirklich der HAMMER für alles was mit PDF Dateien zu tun hat.
Man kann diese direkt ohne Hilfsmittel erstellen, offnen und weiter bearbeiten oder mit den "DA" Befehlen direkt in den Dateien arbeiten (braucht weniger RAM).

Viele nutzen die ActiveX Schnittstelle, einige die original Klasse von Pablo, aber am aktuellsten und einfachsten ist meine HBPrintPDF Klasse von Version 7 bis 9.
Sicherlich ist die Kaufversion recht teuer, wenn man nur mal so eben etwas braucht, aber es gibt auch eine kostenlose LITE Version.

Meine HBPrintPDF Klasse unterstützt diese direkt nicht, aber eine Anpassung wäre ein Klacks wenn man sich die Mühe macht.
Ich persönlich mache das nicht (ich brauche es nicht), aber wer will kann meine Klasse nutzen und von mir aus als HBPrintPDF_Lite veröffentlichen ...
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: PDF-Vorschau

Beitrag von brandelh »

das "Standardprogramm" ermittelt man mit dieser Funktion (z.b. für den Standard-PDF-Reader).
Wichtig, man muss den Pfad (ohne Datei) und die gewünschte Datei dieses Typs angeben.

Code: Alles auswählen

*-------------------------------------------------------------
function GetStandardProgramm(cFile, cPath)
   local cExe , nRet, x
   cExe := space(256)
   nRet := FindExecutableA(cFile, cPath, @cExe)
   if nRet <= 32
      cExe := ""
   else
      x := at(chr(0),cExe)
      if x > 0
         cExe := left(cExe,x-1)
      endif
      cExe := alltrim(cExe)
   endif
return cExe

DLLFUNCTION FindExecutableA( cF, cP, @cE ) USING STDCALL FROM SHELL32.DLL
Gruß
Hubert
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: PDF-Vorschau

Beitrag von Rudolf »

Hallo Hubert,
ich muss leider das PDF in einem Fenster darstellen, also nicht einfach in einem anderen Fenster anzeigen. Könnte zwar auch eine ander PDF Software mit ActiveX verwenden, aber Acrobat ist eben mal fast überall installiert. Foxit reader hätte auch eine Schnittstelle, aber da müsste erst jemand was ähnliches wie Deine HBPrintPDF machen oder für OT4XB anpassen.
Grüße
Rudolf
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: PDF-Vorschau

Beitrag von brandelh »

Hallo Rudolf,

je nach Aufgabenstellung ist die Integration natürlich wesentlich besser !
Auf jeden Fall ist sie sicherer als sich auf andere PDF Reader zu verlassen. Manches kann man auch nicht fernsteuern und wenn es jetzt geht, wer weiß was das nächste Update bringt.

In diesem Zusammenhang fällt mir immer wieder die Windowshilfe als negativ Beispiel ein.
Die HLP Dateien und der passende Reader fand ich immer super, wenn auch die Erstellung mit dem offiziellen Tool nicht ganz einfach war.
Dann stieg MS auf die neue HTML basierte Hilfe um, warum KEINE AHNUNG !
Dann mussten Sie auf Sicherheitslücken reagieren und sperrten die Inhalte wenn die Hilfedatei vom LAN geladen wird, TOLL.

Ich finde deine Lösung gut und wollte keinesfalls etwas dagegen sagen (nur gegen den Freispruch von Acrobat Reader ;-) ),
meine Lösungen nutzen PDF Dateien als Hilfeersatz und daher sind diese gut mit dem externen PDF Standardprogramm bedient.

Wenn man integrierte Dokumentenverwaltung machen möchte, dann ist deine Lösung 1000 mal besser. :D
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: PDF-Vorschau

Beitrag von Jan »

Ich arbeite ja mit dem PDF-Tool von Edgar. Der hat vor einiger Zeit auch auf QuickPDF umgestellt. Dummerweise habe ich aber seinen Code für die Vorversion für mich so stark angepasst, das ich jetzt nicht einfach mal eben so auf die neue umsteigen kann. Ansonsten hat die neue Version auch die Möglichkeit, über View() eine PDF anzuzeigen. Das wäre vermutlich die beste Lösung. Aber wie gesagt, andere Codeversion ... Ich muß mir unbedingt mal die Zeit nehmen, meine Änderungen in die neue Version zu übertragen.

Ich werde mir jetzt erstmal damit behelfen, das ich bei einer PDF nur einen Dummy anzeige, der auf den PDF-Inhalt hinweist. Und erst beim Klick darauf wird die PDF wirklich geöffnet, mit allen Vor- und Nachteilen, die dieser Ladevorgang dann hat.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: PDF-Vorschau

Beitrag von AUGE_OHR »

hi,

wenn man unter Win7 / Win8 Den Acrobat Reader Xi installiert dann hat man im Explorer keine Vorschau.
es liegt anscheint am Key

Code: Alles auswählen

falsch
F6594A6D-D57F-4EFD-B2C3-DCD9779E382E

Code: Alles auswählen

richtig
1AA9BF05-9A97-48c1-BA28-D9DCE795E93C
mit dem Key kann man, als PersistentHandler, die Explorer "Vorschau" bekommt.
wie man nun mit Xbase++ den "Inhalt" der Explorer Vorschau von "seinem" hDC in den hDC eines Presentationspace bekommt,
das ist IMHO der Trick für eine schnelle "Vorschau".
gruss by OHR
Jimmy
Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 483
Registriert: So, 28. Mär 2010 19:21
Danksagung erhalten: 11 Mal

Re: PDF-Vorschau

Beitrag von azzo »

Hallo Rudolf,
du schreibst, dass du Qickpdf
verwendest.
Ist das die Debenu Quick PDF Library.
Mfg
Otto
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: PDF-Vorschau

Beitrag von Rudolf »

Hallo,
genau, das verwende ich und bin sehr zufrieden. Hab mir die Lizenz gekauft, aber in der freien Version sollte auch fast alles funktionieren.
Grüße
Rudolf
Antworten