Definition und Abfrage von ItemRef-Objekten.

Letzte Änderung :
30.07.2025, 07:35 Uhr

Definition und Abfrage von ItemRef-Objekten.

Bitte beachten Sie den Unterschied zwischen der Adresse des ItemRef-Objektes und seiner UID: Die Adresse ist die Position des ItemRef-Objektes im Arbeitsspeicher. So eine Adresse (aber noch keine UID) erhalten Sie mit item::alloc, gFrame hat bereits eine. Die UID dagegen steht (zusammen mit einigen anderen Daten) an der Adresse und InDesign kann aus dieser Nummer das referenzierte Objekt ableiten.

static ItemRef item::alloc(ItemRef org = 0)

Reserviere Speicherplatz für ein InDesign®-Objekt. Das erzeugte ItemRef ist damit noch nicht mit einem InDesign®-Objekt verbunden. Mit alloc erzeugte ItemRefs müssen mit item::release wieder gelöscht werden.

Bitte beachten Sie den Unterschied zwischen der Adresse des ItemRef-Objektes und seiner UID: Die Adresse ist die Position des ItemRef-Objektes im Arbeitsspeicher. So eine Adresse (aber noch keine UID) erhalten Sie mit item::alloc, gFrame hat bereits eine. Die UID dagegen steht (zusammen mit einigen anderen Daten) an der Adresse und InDesign kann aus dieser Nummer das referenzierte Objekt ableiten.

Name Typ Default Beschreibung
Return ItemRef   Neu erzeugter leerer Verweis auf ein InDesign®-Objekt
org ItemRef 0 Original

0 : Erzeuge ein neues leeres ItemRef-Objekt
sonst : Lege eine Kopie des Originales an. ItemRefs verweisen im Normalfall auf InDesign®-Objekte. Natürlich wird hier nur der Verweis kopiert, nicht das Objekt selbst.
ItemRef	frameRef = item::alloc ();

org seit Version 1.3.4 (P/R 74)

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

static ItemRef item::assign(ItemRef dest, ItemRef src)

übernehme den Inhalt eines ItemsRefs in ein anderes ItemRef. Der Inhalt der Variable src wird in dest kopiert. ItemRefs verweisen im Normalfall auf InDesign®-Objekte. Natürlich wird hier nur der Verweis kopiert, nicht das referenzierte InDesign-Objekt selbst.

Bitte beachten Sie den Unterschied zwischen der Adresse des ItemRef-Objektes und seiner UID: Die Adresse ist die Position des ItemRef-Objektes im Arbeitsspeicher. So eine Adresse (aber noch keine UID) erhalten Sie mit item::alloc, gFrame hat bereits eine. Die UID dagegen steht (zusammen mit einigen anderen Daten) an der Adresse und InDesign kann aus dieser Nummer das referenzierte Objekt ableiten.

Name Typ Default Beschreibung
Return ItemRef   dest oder 0 im Fehlerfall
dest ItemRef - Ziel der Zuweisung
src ItemRef - Original

Version 1.3.4 (P/R 74)

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

static int item::define(
  ItemRef dest,
  ItemRef srcDB,
  int UID,
  int checkIfExists = 1)

Definiere eine Referenz auf ein InDesign-Objekt.

Bitte beachten Sie den Unterschied zwischen der Adresse des ItemRef-Objektes und seiner UID: Die Adresse ist die Position des ItemRef-Objektes im Arbeitsspeicher. So eine Adresse (aber noch keine UID) erhalten Sie mit item::alloc. Die UID dagegen steht (zusammen mit einigen anderen Daten) an der Adresse und InDesign kann daraus das referenzierte Objekt ableiten.

[seit v4.3 R34250, 2. Feb 2024] Ist dest gleich gDocument, wird automatisch das aktuelle Dokument des Skriptes angepaßt. In diesem Fall muß uid unbedingt den Wert 1 haben! Unten finden Sie ein Beipiel.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode.
dest ItemRef - Zielreferenz
srcDB ItemRef - Geben Sie hier ein beliebiges (aber gültiges) Objekt des Dokumentes an, in dem auch ihr Zielobjekt liegt. Geeignet ist dafür etwa gFrame.

0 : Versuche das Dokument über die Skriptumgebung zu ermitteln:
  1. aktueller Rahmen (gFrame)
  2. aktueller Text
  3. aktuelles Dokument
uid int - Objekt-ID
checkIfExists int 1 Prüfe vor der Zuweisung, ob ein Objekt mit der gegebenen UID überhaupt existiert.

1 : Ja, prüfen
0 : Nein, immer setzen

Teste einen Bereich von UIDs des aktuellen Dokumentes.

int main ()
{
    int 		i;
    ItemRef		ref	= item::alloc ();
for (i = 200; i < 301; i++) { item::define (ref, gFrame, i); wlog ("", "# UID %d : %d, 0x%X'\n",   i,   item::exists (ref),   item::get_class (ref)); }
return 0; }

Die UID 1 bezeichnet immer das Dokument. Das Beispiel erzeugt eine ItemRef des Dokumentes des aktuellen Skriptrahmens und zeigt den Dokumentnamen.

int main ()
{
    ItemRef		docRef	= item::alloc ();
    char		docName	[4000];
item::define (docRef, gFrame, 1); document::name (docName, docRef); showmessage (docName);
return 0; }

Passe gDocument an das aktuelle Front-Dokument an.

int front_doc_changed ()
{
    ItemRef 		docRef = document::get_front ();
item::define (gDocument, docRef, 1); item::release (docRef);
return 0; }

v3.3 R2489, 06.06.2011
Parameter checkIfExists seit v4.1.6 R26001, 1. Okt 2019

priint:comet InDesign® Plug-Ins, comet_pdf

defined
exists
get_class
comet.CDocument.getFrame

static int item::release(ItemRef itm)

Der reservierte Speicher eines Objektverweises wird wieder freigegeben. Das Zielobjekt des Verweise bleibt durch diese Aktion natürlich unberührt.

Name Typ Default Beschreibung
itm ItemRef - Freizugebender Verweis
ItemRef	frameRef = item::alloc ();
:
item::release (frameRef);	


priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

static int item::fitframe(
  ItemRef ref,
  int refPoint = 0,
  float* width = 0,
  float* height = 0)

Passe den Rahmen, auf den der Verweis zeigt, an seinen Inhalt an. In den optionalen Parametern width und height kann die neue Größe des Rahmens erfragt werden. Neue Parameter refPoint seit Version 1.4, R142, 4. Aug. 2006!

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
ref ItemRef - Verweis auf einen Dokumentrahmen
refPoint int kRefPointTopLeft Welche Ecke des Ursprungs-Rahmens soll bei der Skalierung festgehalten werden? Beachten Sie dabei, dass Textrahmen nur in ihrer Höhe geändert werden und dass Inlinerahmen immer an der rechten unteren Ecke festgehalten werden.

kRefPointTopLeft
kRefPointTopCenter
kRefPointTopRight
kRefPointLeftCenter
kRefPointCenter
kRefPointRightCenter
kRefPointBottomLeft
kRefPointBottomCenter
kRefPointBottomRight

Um Rahmen an das enthaltene Bild anzupassen, verwenden Sie die Funktion frame::fit_image mit der Methode 3.
width float* 0 Neue Breite des Rahmens, Rückgabewert
height float* 0 Neue Höhe des Rahmens, Rückgabewert
#include "internal/types.h"
ItemRef         frame   = item::alloc ();
document::find_frame (frame, 1, 1, 3, 4);
if (!item::defined (frame)) { item::release (frame); showmessage ("Rahmen nicht gefunden"); return 1; } item::fitframe (frame); item::release (frame);

Neue Parameter seit Version 1.4, R142, 4. Aug. 2006 Der Parameter refPoint ist neu hinzugekommen und verschiebt die bisherigen Parameter.

priint:comet InDesign® Plug-Ins, comet_pdf

frame::fit
frame::fit_better
frame::fit_image
comet.CFrame.fit

static int item::defined(ItemRef ref)

Zeigt die Referenz auf ein gültiges Objekt?

ItemRefs können auf beliebige Objekte wie Rahmen, Tabellen, Dokumente, ... verweisen. Die Abfrage defined beantwortet lediglich, ob die Referenz überhaupt auf etwas zeigt. In den meisten Fällen reicht das aus. Wenn Sie sicher prüfen wollen, ob ein ItemRef auf einen gültigen Dokumentrahmen, eine gültige Tabelle zeigt, Bookmark, ... zeigt, verwenden Sie die entsprechende is_valid Methode. Mit get_class können Sie zudem die eindeutige Klassen-ID des Objektes ermitteln.

Name Typ Default Beschreibung
Return int   != 0 das Objekt ist definiert, == 0 kein Objekt
ref ItemRef - Verweis auf einen Dokumentrahmen
ItemRef         frame   = item::alloc ();
document::find_frame (frame, 1, 1, 3, 4);
if (!item::defined (frame)) { item::release (frame); showmessage ("Rahmen nicht gefunden"); return 1; } item::fitframe (frame); item::release (frame);


priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

frame::is_valid
table::is_valid
bookmark::is_valid
document::is_valid
hyerlink::is_valid

static int item::getint(ItemRef ref)

UID der Referenz. Informationen zu UIDs finden Sie hier.

Bitte beachten Sie den Unterschied zwischen der Adresse des ItemRef-Objektes und seiner UID: Die Adresse ist die Position des ItemRef-Objektes im Arbeitsspeicher. So eine Adresse (aber noch keine UID) erhalten Sie mit item::alloc, gFrame hat bereits eine. Die UID dagegen steht (zusammen mit einigen anderen Daten) an der Adresse und InDesign kann aus dieser Nummer das referenzierte Objekt ableiten.

Name Typ Default Beschreibung
Return int   UID der Referenz als Ganzzahl
ref ItemRef - Verweis auf eine Dokumentreferenz

Version 1.4 R334 (13. April 2007)

priint:comet InDesign® Plug-Ins, comet_pdf

comet.CFrame.getUID

static int item::exists(ItemRef ref)

Prüfe, ob eine Referenz auf ein gültiges Objekt im Dokument verweist.

ItemRefs können auf beliebige Objekte wie Rahmen, Tabellen, Dokumente, ... verweisen. Die Abfrage exist beantwortet lediglich, ob die Referenz auf ein gültiges Objekt zeigt. In den meisten Fällen reicht das aus. Wenn Sie sicher prüfen wollen, ob ein ItemRef auf einen gültigen Dokumentrahmen, eine gültige Tabelle zeigt, Bookmark, ... zeigt, verwenden Sie die entsprechende is_valid Methode. Mit get_class können Sie zudem die eindeutige Klassen-ID des Objektes ermitteln.

Name Typ Default Beschreibung
Return int   0 : Nein
1 . Ja, das Objekt exisitiert.
ref ItemRef - beliebige Referenz

Teste einen Bereich von UIDs des aktuellen Dokumentes.

int main ()
{
    int 		i;
    ItemRef		ref	= item::alloc ();
for (i = 200; i < 301; i++) { item::define (ref, gFrame, i); wlog ("", "# UID %d : %d, 0x%X'\n",   i,   item::exists (ref),   item::get_class (ref)); }
return 0; }

v3.3 R2489, 06.06.2011

priint:comet InDesign® Plug-Ins, comet_pdf

static int item::get_class(ItemRef ref)

Ermittle die Klassen-ID eines Dokument-Objektes. Diese IDs werden von Adobe vergeben. Es gibt Tausende davon. Hier eine kleine Zusammenstellung der häufigsten Objektklassen und ihrer IDs.
ClassID Name
0xe01 kDocBoss
0x501 kSpreadBoss
0x50F kPageBoss
0x1401 kMasterPagesBoss
0x302 kDocumentLayerBoss
0x301 kSpreadLayerBoss
0x201 kTextStoryBoss
0x2c0f kPageItemBoss
0x263 kMultiColumnItemBoss
0x227 kFrameItemBoss
0x2c10 kDrawablePageItemBoss
0x6201 kSplineItemBoss - Alle gewöhnlichen Dokumentrahmen haben diese Klasse.
0x1701 kImageBaseItem
0x1702 kImageItem
0x2501 kPlacedPDFItemBoss
0x660b kEPSTextItemBoss
0x6611 kDisplayListPageItemBoss
0x6601 kEPSItem
0x6602 kPICTItem
0x6603 kWMFItem
0x660f kDCSItemBoss
0x401 kGroupItemBoss - Das sind InDesign®-Gruppen.
0xb320 kTOPSplineItemBoss - Text auf einem Pfad
0x3301 kGuideItemBoss
0x262 kInlineBoss - Inline-Rahmen
0xb318 kTOPFrameItemBoss
0x10001 kBookBoss
0x1354C kBookmarkBoss
0x13501 kHyperlinkBoss
0xb603 kTableItemBoss
0xb608 kTableModelBoss
0x8c42 kImportLinkBoss - Bilder
0x8c44 kBidirectionalLinkBoss - Verlinkte Texte (InCopy)
0x145D8 kMultiStateObjectItemBoss - Objektstatus
0x1450C kPushButtonItemBoss - Buttons
0x14509 kFormFieldContentItemBoss
0x1450A kFormFieldItemBoss
0x1450B kAppearanceFormItemBoss
0x1450D kCheckBoxItemBoss
0x1450E kRadioButtonItemBoss
0x1450F kTextFieldItemBoss
0x14510 kListBoxFieldItemBoss
0x14511 kComboBoxItemBoss
0x14512 kSignatureFieldItemBoss

Name Typ Default Beschreibung
Return int   ClassID des Objektes oder 0 wenn das Objekt nicht existiert.
ref ItemRef - beliebige Referenz

Teste einen Bereich von UIDs des aktuellen Dokumentes.

int main ()
{
    int 		i;
    ItemRef		ref	= item::alloc ();
for (i = 200; i < 301; i++) { item::define (ref, gFrame, i); wlog ("", "# UID %d : %d, 0x%X'\n",   i,   item::exists (ref),   item::get_class (ref)); }
return 0; }

v3.3 R2489, 06.06.2011

priint:comet InDesign® Plug-Ins, comet_pdf

Seit
Plugin Version 1.0.10
Letzte Änderung
30.07.2025, 07:35 Uhr
Autor
Paul Seidel
Siehe auch
frame
itemlist

Alphabetic index HTML hierarchy of classes or Java