![]() |
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 |
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... |
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. |
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... |
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:
eine neue Annotation angelege, dann seh ich die sofort in der Objektliste.
qp.AddNoteAnnotation(100, 100, 0, 100, 100, 100, 100, 'Murks', 'Content', 1.0, 0,0,0);
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; |
AW: Quick PDF-Library: Wie die Position des Annotationfensters ermitteln?
Nein, ich verwende AddNoteAnnotation.
|
AW: Quick PDF-Library: Wie die Position des Annotationfensters ermitteln?
Upps. Siehe meine Bearbeitung oben
|
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... |
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... |
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 02:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz