Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Quick PDF-Library: Wie die Position des Annotationfensters ermitteln? (https://www.delphipraxis.net/209154-quick-pdf-library-wie-die-position-des-annotationfensters-ermitteln.html)

ULIK 12. Nov 2021 08:20

AW: Quick PDF-Library: Wie die Position des Annotationfensters ermitteln?
 
Super! :thumb:
Noch ein kleiner Rat (falls für Dich relevant): wenn Du Zugriff auf einen mit einer neueren AutoCAD Version erstellten Plan hast, dann teste dein Programm mal gegen ein daraus generiertes PDF. Der Hintergrund: in diesen Plänen gibt es nämlich gerne mal extrem viele Annotations (hab da Beispiele mit 10000 und mehr Annotations). Einfach weil dort jede Beschriftung als Annotation angelegt wird.
Oder generier mal mit QuickPDF so ein PDF mit >10000 Text-Annotations.


Grüße,
Uli

Harry Stahl 12. Nov 2021 17:16

AW: Quick PDF-Library: Wie die Position des Annotationfensters ermitteln?
 
Und die 10.000 Annotationen sind alle auf einer Seite?
Ich habe mein Programm so gestrickt, dass immer nur alle Annotationen der gewählten Seite angezeigt wird.
Man kann aber mit Schaltern zur nächsten oder vorherigen Seite mit Annotationen springen.

Edit 1: Sind das alles sinle-Annotations oder ist es eher eine oder einige Annotationen mit vielen Antworten?

Edit2: Jetzt ist es mir auch gelungen, den Status der Annotationen zu setzen und zu speichern (habe hier doch GetobjFromString und SetObjToString verwendet). Mal schauen, ob ich noch das setzen einer Antwort auf eine Annotation hinbekomme, dann wäre ich soweit zufrieden...

ULIK 15. Nov 2021 06:37

AW: Quick PDF-Library: Wie die Position des Annotationfensters ermitteln?
 
Die waren wirklich auf einer Seite: das war ein riesiger AutoCAD Plan mit Papierformat 2x3 m und alle Beschriftungen auf diesem Plan waren Text Annotations :-D Ist natürlich ein Extrembeispiel aber im Hinterkopf sollte man es halt behalten.

Lies Dir in der PDF Spec die Abschnitte bei den Markup-Annotations für die Eigenschaften IRT und RT durch. Gerade IRT ist das interessante. Dann modifizier deine Annotation entsprechend und schreib es mit SetObjToString in das PDF zurück.

Harry Stahl 15. Nov 2021 10:52

AW: Quick PDF-Library: Wie die Position des Annotationfensters ermitteln?
 
Danke für den Hinweis. Genau das hatte ich schon selber herausgefunden und konnte damit auch eine Antwort-Annotation setzen.

Was mir dabei auffiel, ist dass nach dem Anfügen von Annotationen diese leider nicht direkt auch über die Objektliste erreichbar sind. Erst nachdem ich die PDF-Datei gespeichert und neu geladen habe, tauchen die in der Objektliste auf (mache ich nicht als Dateispeicherung, sondern speichern in String und laden daraus). Die Anzahl der Objekte wird zwar erhöht, aber wie gesagt, bei Abfrage der Objekte nacheinander tauchen die neu hinzugefügten Annotationen nicht auf.

Allerdings ist das umständlich und unnötig aufwändig. Gibt es nicht eine andere Methode, um sicherzustellen, dass angefügte Annotationen auch direkt danach über die Objectliste verfügbar sind?

Welche Dokumentation zur PDF-Spezifikation kannst Du empfehlen? "/IRT" habe ich durch vergleichen der Annos rausgefunden, aber das ist natürlich aufwendig. Andererseits eröffnet sich ja mit dem direkten Schreiben und lesen der Objekte doch ein weites Anwedungsfeld...

ULIK 15. Nov 2021 14:59

AW: Quick PDF-Library: Wie die Position des Annotationfensters ermitteln?
 
Ich hab hier die offizielle PDF 1.7 und 2.0 Spezifikation rumliegen. Die gibt's aber glaub ich nur zu kaufen (hat mein Arbeitgeber besorgt, darum weis ich grad nichts genaueres über Bezugsquellen).

Das mit den Objektlisten schau ich mir mal an. Wie genau erstellst Du eine neue Annotation? Mit AddTextMarkupAnnotation?

Edit: Hab das schnell getestet: wenn ich mit
Code:
qp.AddNoteAnnotation(100, 100, 0, 100, 100, 100, 100, 'Murks', 'Content', 1.0, 0,0,0);
eine neue Annotation angelege, dann seh ich die sofort in der Objektliste.

Hier mein Testcode:
Code:
        qp := TDebenuPDFLibrary.Create;
        try
          for i := 1 to qp.GetObjectCount do
          begin
            strObject := qp.GetObjectToString(i);

            memo1.Lines.Add('Obj ' + IntToStr(i) + ' ' + Copy(strObject,1, 60) + #13#10);
          end;

          qp.AddNoteAnnotation(100, 100, 0, 100, 100, 100, 100, 'Murks', 'Content', 1.0, 0,0,0);

          for i := 1 to qp.GetObjectCount do
          begin
            strObject := qp.GetObjectToString(i);

            memo1.Lines.Add('Obj ' + IntToStr(i) + ' ' + Copy(strObject,1, 60) + #13#10);
          end;
        finally
          qp.Free;
        end;

Harry Stahl 15. Nov 2021 15:05

AW: Quick PDF-Library: Wie die Position des Annotationfensters ermitteln?
 
Nein, ich verwende AddNoteAnnotation.

ULIK 15. Nov 2021 15:12

AW: Quick PDF-Library: Wie die Position des Annotationfensters ermitteln?
 
Upps. Siehe meine Bearbeitung oben

Harry Stahl 15. Nov 2021 15:42

AW: Quick PDF-Library: Wie die Position des Annotationfensters ermitteln?
 
Dein "Upps" verstehe ich als Bestätigung des Problems. Oder?

Edit: Mal selber getestet: hier existiert das Object auch nach dem Add.

Das nicht- funktionieren hatte ich auch erst mal festgestellt, bei einer größeren Datei, die ein anderer erzeugt hat...

Harry Stahl 15. Nov 2021 18:16

AW: Quick PDF-Library: Wie die Position des Annotationfensters ermitteln?
 
Kann das übrigens sein, dass das nachträgliche Hinzufügen eines Outline-Eintrages als Child nicht funktioniert, wenn das Parent-Outline kein Child ist?

Ich wollte einen neuen Untereintrag in einem bestehenden Baum nachträglich hinzufügen (also einem Child ein weiteres Child hinzufügen), das geht wohl nicht, muss ich dafür den ganzen Baum neu erzeugen?

EDit: Das ist wohl nur so ab Level-Ebene 3, ab da funktioniert es nicht mehr, vorher kein Problem. Seltsam...

ULIK 16. Nov 2021 08:39

AW: Quick PDF-Library: Wie die Position des Annotationfensters ermitteln?
 
Outlines: das wäre mir noch nie aufgefallen. Kannst Du mir da mal deinen Testcode schicken? Hab's grad in unsere Anwendung schnell ausprobiert, da hab ich kein Problem gehabt auch in der 6./7. Ebene


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:08 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz