Edgars PDF-Klasse - Funktionsaufruf

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

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

Edgars PDF-Klasse - Funktionsaufruf

Beitrag von Jan »

Hallo,

ich arbeite mit Edgars PDF-Klasse. Der hat natürlich nicht alle Funktionen der QuickPDF-Bibliothek implementiert, das ist einfach zu umfangreich. Was mir da gerade speziell fehlt ist SetInformation. Hat jemand von Euch das mal eingebaut? Bei mir klappt das einfach nicht. Gibt zwar keine Fehlermeldung, aber es passiert auch nichts.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Edgars PDF-Klasse - Funktionsaufruf

Beitrag von ramses »

Hallo Jan

Ja. MIt der QuickPDF
Damit können Eigenschaften des PDF Files geändert werden. Der Rückgabewert ist 0=.f. oder 1=.t.
Die Funktioen benötigt 3 Parameter: (InstanceID, Key, Neuer Wert als String)
Key :
0 = PDF Version
1 = Author
2 = Title
3 = Subject
4 = Keywords
5 = Creator
6 = Producer
7 = CreationDate
8 = ModDate
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Edgars PDF-Klasse - Funktionsaufruf

Beitrag von Jan »

Hallo Carlo,

all das weiß ich auch. Die Frage war: Hat jemand diesen Aufruf mit Edgars Klasse schon mal erfolgreich umgesetzt.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Edgars PDF-Klasse - Funktionsaufruf

Beitrag von ramses »

Jan hat geschrieben: Mi, 27. Jan 2021 10:25 jemand diesen Aufruf mit Edgars Klasse schon mal erfolgreich umgesetzt.
Ja. Auch mit Edgars Klasse funktionerte und funktionert das. Soeben nochmals getestet.
Hier die entsprechende Zeile: ( Setzt den Author)

Code: Alles auswählen


oDoc := xbppdf():New()
...
...
oDoc:qCall("SetInformation", oDoc:oPdf, 1, cSzAnsi2Wide('Auto Yxcdkk') )
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Edgars PDF-Klasse - Funktionsaufruf

Beitrag von Jan »

Hallo Carlo,

interessant. Wenn ich das so mache moniert der als Laufzeitfehler das qCall unbekannt sei

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Edgars PDF-Klasse - Funktionsaufruf

Beitrag von Jan »

Hallo Carlo,

OK, ich seh den Unterschied. Du arbeitest mit xpppdf, ich mit XbpGraPdf. Das sind bei Edgar zwei unterschiedliche Klassen. Die Unterschiedlich viel können. Und offenbar intern so unterschiedlich arbeiten, daß dieser Aufruf bei Dir klappt und bei mir nicht.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Edgars PDF-Klasse - Funktionsaufruf

Beitrag von ramses »

Hallo Jan

ich hab die Version 5.0.1.0 und ot4xb ist eingebunden.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Edgars PDF-Klasse - Funktionsaufruf

Beitrag von Koverhage »

Jan,
der Aufruf sollte so sein
pObj:qCall("EncryptA",pObj:oPdf,cOwnerPW, cUserPW, 2, 12845065)

Die Aufrufe lauten z.b.
Musste aber auf obige Syntax anpassen

// PDF Title
pObj:SetInformation(2 , rTrim(cPdfTitle))
// PDF Subject
pObj:SetInformation(3 , rTrim(cPdfSubject))
// PDF Keyword(s)
pObj:SetInformation(4 , "HKABR-Win "+ pObj:LibraryVersion())
// PDF Creator
pObj:SetInformation(5 , "HKABR-Win "+hkaversion())
// PDF Producer
pObj:SetInformation(6 , cCompany)
IF nPDFAModus > 0
pObj:SetPDFAMode(nPDFAModus)
ENDIF
Gruß
Klaus
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Edgars PDF-Klasse - Funktionsaufruf

Beitrag von Jan »

Klaus,

wie ich oben schon anmerkte: Das gilt für Edgars xpppdf. Nicht aber für seine xbpgradf.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Edgars PDF-Klasse - Funktionsaufruf

Beitrag von brandelh »

Jan hat geschrieben: Mi, 27. Jan 2021 8:22 ich arbeite mit Edgars PDF-Klasse. Der hat natürlich nicht alle Funktionen der QuickPDF-Bibliothek implementiert, das ist einfach zu umfangreich. Was mir da gerade speziell fehlt ist SetInformation. Hat jemand von Euch das mal eingebaut? Bei mir klappt das einfach nicht. Gibt zwar keine Fehlermeldung, aber es passiert auch nichts.
Edgars PDF Klasse ist die XppPDF und nutzt eine alte Version 7.xx der QuickPDF (zumindest als ich mich damit beschäftigt habe), diese nutzt meist ANSI Strings.

Von einer XbpGraPdf() hab ich noch nix gehört, ob die auch auf die alte QuickPDF zugreift, weiß ich nicht, aber alles was die 7.11 Version kann, kann man auch aufrufen.
Wenn beim Aufruf kein Fehler erscheint, muss die Funktion zumindest vorhanden sein, das würde auf einen Fehler der Parameter hindeuten.

Dies ist die Methode aus meiner Klasse, welche die Funktion aufruft:

Code: Alles auswählen

METHOD HBPrintPDF:SetInformation(nKey, NewValue)                                              // *HB* return .t. / .f.
   NewValue := ::ForceUTF8(NewValue)
return 0 # FpQCall( {::_hdll_,"QuickPDFSetInformation"} ,"__sl__sl__sl__pt",::_id_,nKey, NewValue)
Der Inhalt muss als UTF8 übergeben werden, was bei einfachen Zeichen kein Problem verursacht.
In meiner Klasse kann man den Aufruf der Funktion nachsehen, bei mir funktioniert es.

Aber wie so oft ist kein Quellcode erkennbar, bei dem man was prüfen könnte ;-)
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Edgars PDF-Klasse - Funktionsaufruf

Beitrag von Jan »

Hubert,

XbpGraPdf ist eine erweiterte xpppdf. Hat z. B. eine Vorschau eingebaut.

Edgar ist bei seinen Klassen inzwischen bei der 6.1 angekommen mit QuickPf 18.1.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Edgars PDF-Klasse - Funktionsaufruf

Beitrag von Koverhage »

Jan,
ich benutze nur xpppdf.
Was benutzt Du ? Finde in Deinen Beiträgen nicht, dass Du XbpGraPdf benutzt .
Das einfachste wäre Du fragst Edgar.
Gruß
Klaus
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Edgars PDF-Klasse - Funktionsaufruf

Beitrag von Jan »

Klaus,

Beitrag 6 in diesem Thread.

Edgar hatte ich vergangenes Jahr schon gefragt. Beide Beispiele die er mir gegeben hat, funktionieren nicht. Deswege hatte ich die Hoffnung, das hier jemand das hinbekommen hätte.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Edgars PDF-Klasse - Funktionsaufruf

Beitrag von Koverhage »

Basierend auf
oGrapdf := xbpGraPDF():New()
oGraPDF:Create()
oGraPDF:qCall("EncryptA",oGraPDF:oGraPDF,cOwnerPW, cUserPW, 2, 12845065)

Tip:

Falls noch nicht passiert
entweder die Doku zu QuickPDF oder HBPRINTPDF schauen was es alles für Funktionen gibt.
Gruß
Klaus
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Edgars PDF-Klasse - Funktionsaufruf

Beitrag von Jan »

Klaus,

den Funktionsaufruf kenne ich ja schon. Der tut nur nichts.

Und die Funktionsübersicht habe ich natürlich auch.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Edgars PDF-Klasse - Funktionsaufruf

Beitrag von ramses »

Jan

die XbpGraPDF Klasse funktioniert anders. Nicht auf Basis eines PDF-Files es wird anderes gerendert deshalb laufen dir die gewünschten Funktionen auch ins leere. Es gibt verschiedene möglichkeiten die Infos zu setzten. Am einfachsten ist es das PDF durch die GraPDF Klasse zu erstellen und danach mit der XbpPDF Klasse zu laden und die gewünschten Angaben zu setzten und zu speichern.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Edgars PDF-Klasse - Funktionsaufruf

Beitrag von Jan »

Es hat sich herausgestellt, das in dem letzten XbpGraPdf.dll-Release von Edgar zwei Fehler waren. Einer betraf die die Erzeugung der PDF selber. Der andere die Ausführung von Funktionen, die Edgar nicht direkt implementiert hat, die aber manuell aufrufbar sind (hier war das halt SetInformation).

Die aktuelle version 6.1 ist freigegeben und kann herunter geladen werden.

Der Hauptunterschied zwischen der 6.0 und der 6.1 ist, das in der 6.0 die Quickpdf 17 mitgeliefert wurde, in der 6.1 dagegen die 6.1. Der für uns größte Unterschied für uns zwischen den beiden QuickPDF-Versionen liegt darin, das die 17 nur ZUGFeRD 1 unterstützt hat, die 18 dagegen auch die 2.0 und die 2.1.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Edgars PDF-Klasse - Funktionsaufruf

Beitrag von ramses »

Toll. Genau die habe ich ja zum arbeiten.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Edgars PDF-Klasse - Funktionsaufruf

Beitrag von Jan »

Nachtrag: In XbpGraPdf sieht der Aufruf einer von Edgar nicht direkt implementierten Funktion so aus (Achtung: Wir reden hier von XbpGraPdf, bei XppPdf sieht das anders aus! Da geht das wie hier mehrfach beschrieben per oGraPdf:qCall("SetInformation", oGraPdf:oGraPdf, 1, cSzAnsi2Wide("Der Autor"))):

Code: Alles auswählen

oGraPdf:pdf("qCall", "SetInformation", "PDF", 1, cSzAnsi2Wide("Der Autor")) 
Das bedeutet aber, das man OT4XB benötigt (das Edgars Klasse ohnehin benötigt, er versucht aber gerade das so weit möglich zu eliminieren).

Wenn man mit Xbase++ 2.0 arbeitet kann man das mit Bordmitteln machen:

Code: Alles auswählen

oGraPdf:pdf("qCall", "SetInformation", "PDF", 1, Str2Unicode("Der Autor")) 
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Edgars PDF-Klasse - Funktionsaufruf

Beitrag von ramses »

Danke für das Update.
Ich habe gerade einen Auftrag ein Programm umzubauen. Auch da muss auch ot4xb raus. Aber auch Edgars Klasse. Sie soll durch List&Label ersetzt werden. Der Auftraggeber ist der Meinung: "Es kann ja heute nicht mehr sein dass ich für jede kleine Anpassung an einem Ausdruck einen Programmierer brauche ....." (List&Label und die gestalterischen Möglichkeiten kennt er aus seiner Buchhaltung)
Valar Morghulis

Gruss Carlo
Antworten