Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign » InDesign mit Delphi steuern

InDesign mit Delphi steuern

Halbaffe
Beiträge gesamt: 12

17. Mär 2010, 11:01
Bewertung:

gelesen: 7089

Beitrag als Lesezeichen
Hallo HDS-Forum,

seit einiger Zeit versuche ich, mit Hilfe von Delphi eine ID-Datei zu erstellen und darin sinnvoll Inhalte zu platzieren.

Weiss jemand von euch, wo es Informationen zu diesem Thema gibt? Im restlichen I-Net habe ich nur einen kleinen Beitrag von Marc Sidon gefunden, der mir aber leider nicht genug Start gegeben hat.

Meine Programmierkenntnisse sind weitestgehend in den Kinderschuhen daher würd ich mich über Möglichkeiten freuen, wie ich hier einen Fuss in die Tür kriegen kann. Tutorials, Bücher etc.

Vielen Dank


(@Marc Sidon´s Beitrag ganz speziell:
idDoc1 := _Application (IDispatch(vIdApplication1)).Open (Pfad, True); gibt als Fehlermeldung: E2010 Inkompatible Typen: 'Document' und 'OleVariant' ?)

InDesign mit Delphi steuern

Marc Sidon
Beiträge gesamt: 262

17. Mär 2010, 11:52
Bewertung:

gelesen: 7070

Beitrag als Lesezeichen
Hallo Halbaffe...
(irgendwie komisch, mit diesem Namen jemanden anzusprechen...)

Informationen darüber wirst Du so gut wie keine finden... habe ich seinerseits auch keine gefunden. Zumindest nicht bezogen auf InDesign. Das Stichwort hierzu ist OLE !
Ich kann Dir jedoch Deine konkreten Fragen beantworten.

In Deinem Code (und ich damals in meinem Beispiel) ist wahrscheinlich nur idDoc1 als Document deklariert, während Application.open() jedoch einen Olevariant zurück gibt, den Du dann wieder casten must. Da Du weißt, dass Du ein Document zurückbekommst, wenn Du eins öffnest, ist das Typcasting so legitim.

Code
var idDoc1:Document; 
ov1:Olevariant;
[..]
begin
[..]
ov1 := _Application (IDispatch(vIdApplication1)).Open (Pfad, True);
idDoc1 := Document(IDispatch(ov1));


Ich gehe mal davon aus, dass Du die Typenbibliothek bereits importiert hast, Dir also die InDesign Typen zur Verfügung stehen... (_Application, Document, Spread, ... )

Gruß,
Marc Sidon
------------------------------------------

modernmediasidon
Erstellung von InDesign Scripts

(Dieser Beitrag wurde von Marc Sidon am 17. Mär 2010, 12:04 geändert)

InDesign mit Delphi steuern

Halbaffe
Beiträge gesamt: 12

17. Mär 2010, 12:49
Bewertung:

gelesen: 7049

Beitrag als Lesezeichen
Hallo Marc,

ja, zugegeben, "Halbaffe" lässt einen stolpern :-)


Danke für die schnelle Antwort, Genau das Casting wars. Jetzt kann ich versuchen auch wirklich was zu bewegen.

Ist das Thema zu ungewöhnlich das es da nichts zu finden gibt? Die Steuerung via Delphi bietet sich doch an oder verlagert sich das auf die VB-Ecke?



Armin Kirstein

InDesign mit Delphi steuern

Marc Sidon
Beiträge gesamt: 262

17. Mär 2010, 13:05
Bewertung:

gelesen: 7038

Beitrag als Lesezeichen
Hallo Armin... (schon irgendwie netter... :-) )

Antwort auf [ Halbaffe ] Ist das Thema zu ungewöhnlich das es da nichts zu finden gibt? Die Steuerung via Delphi bietet sich doch an oder verlagert sich das auf die VB-Ecke?


Nunja, ich weiß es nicht. Ich denke, dass es nunmal nicht wahnsinnig viele Leute gibt, die InDesign grundsätzlich automatisieren. Und dann auch noch jemanden zu finden, der gerade in Delphi programmiert, ist auch eher seltener. Es gibt ja einige Wege InDesign fernzusteuern... Als ich für meine Diplomarbeit recherchiert habe, fand ich auch recht wenig, und glaub mir, da habe ich mir die finger wundgegoogelt! :)

Also, wie gesagt, frag ruhig, wenn Du etwas nicht hinbekommst. Delphi und InDesign sind (zumindest ein Teil meines) "täglich Brot".

Gruß,
Marc
------------------------------------------

modernmediasidon
Erstellung von InDesign Scripts

InDesign mit Delphi steuern

Halbaffe
Beiträge gesamt: 12

18. Mär 2010, 12:51
Bewertung:

gelesen: 6989

Beitrag als Lesezeichen
Hallo Marc,

ist ja ein wenig wie der große neue Lego-Kasten zu Weihnachten. Tolle Möglichkeiten.

Aber ich habe Schwierigkeiten, eine neue Farbe zu erstellen. Hättest du da eine Beispielzeile?

Gruß
Armin Kirstein

InDesign mit Delphi steuern

Marc Sidon
Beiträge gesamt: 262

18. Mär 2010, 19:08
Bewertung:

gelesen: 6960

Beitrag als Lesezeichen
Hallo Armin,

überall in InDesign wirst Du über die sogenannten Collections stolpern.

Eine Collection heisst "Colors". Du findest eine an der Application, eine am Document und noch an ein paar anderen Stellen.

Möchtest Du nun im Dokument eine neue Farbe hinzufügen, so holst Du Dir die Collection "Colors" des Dokumentes und fügst dort eine neue Farbe hinzu.

Ergo irgendwas mit
Code
ov1 = idDocument.Colors.Add(); 


Und dann kannst Du sie wieder typecasten und damit dann alles anstellen, was Du willst:
Code
Color(IDispatch(ov1)).Space := idCMYK; 
Color(IDispatch(ov1)).ColorValue := varArrayOf([75,5,100,20]);


Gruß,
Marc Sidon
------------------------------------------

modernmediasidon
Erstellung von InDesign Scripts

InDesign mit Delphi steuern

Halbaffe
Beiträge gesamt: 12

18. Mär 2010, 21:04
Bewertung:

gelesen: 6943

Beitrag als Lesezeichen
Hallo Marc,

Ich musste leider mein Hirn auf unterlassene Hilfeleistung verklagen. Das Problem war, das ich in einer GDI+ - Unit schon den Typ 'Color' hatte und daher anscheinend damit aneckte.
Nu gehts aber.

Danke dir sehr

Gruß

Armin Kirstein

InDesign mit Delphi steuern

Marc Sidon
Beiträge gesamt: 262

19. Mär 2010, 09:06
Bewertung:

gelesen: 6908

Beitrag als Lesezeichen
Hi,

jaja... die guten alten Namespaces... :)

Gruß,
Marc
------------------------------------------

modernmediasidon
Erstellung von InDesign Scripts

InDesign mit Delphi steuern

Halbaffe
Beiträge gesamt: 12

25. Mär 2010, 17:31
Bewertung:

gelesen: 6846

Beitrag als Lesezeichen
Hallo Marc,

eine bescheidene Frage noch:

Wie bewege ich ein TextFrame an eine bestimmte Stelle?
Mit den GeometricBounds bekomme ich zwei Ecken angegeben, kann diese aber nicht verändern.

Gibt es da nur Move als Befehl? Das wäre irgendwie unelegant.



mit bestem Dank

Armin Kirstein

InDesign mit Delphi steuern

Marc Sidon
Beiträge gesamt: 262

25. Mär 2010, 18:45
Bewertung:

gelesen: 6832

Beitrag als Lesezeichen
Hallo Armin,

nein, es gibt nicht nur Move als Befehl.
Du kannst die GeometricBounds natürlich auch setzen:

Zitat ov1.GeometricBounds := VarArrayOf([Top1, Left1, Bottom1, Right1]);


Es ist einfacher, wenn Du bei den GeometricBounds etwas abstrakter denkst:
Du bekommst nicht (nur) zwei Ecken angegeben, sondern die Position von allen 4 Kanten.

Ein Quadrat von 10 x 10 mm, welches an 0:0 positioniert ist hat demnach die obere Kante an Position 0, die linke Kante an Position 0, die untere Kante an Position 10 und die rechte Kante an Position 10.

Willst Du also einen Textrahmen genau so positionieren wäre dies:
Code
ov1.GeometricBounds := VarArrayOf([0, 0, 10, 10]); 


Ich hoffe, ich konnte es Dir einigermaßen verständlich machen...

Gruß,
Marc Sidon
------------------------------------------

modernmediasidon
Erstellung von InDesign Scripts

InDesign mit Delphi steuern

Halbaffe
Beiträge gesamt: 12

25. Mär 2010, 21:43
Bewertung:

gelesen: 6808

Beitrag als Lesezeichen
Hallo Marc,

schön erklärt und es geht natürlich auch.

Was würde ich nur ohne dich machen ...


Grüße und Dank

Armin Kirstein

(Dieser Beitrag wurde von Halbaffe am 25. Mär 2010, 21:44 geändert)

InDesign mit Delphi steuern

Halbaffe
Beiträge gesamt: 12

8. Apr 2010, 12:28
Bewertung:

gelesen: 6642

Beitrag als Lesezeichen
Hallo Marc,

noch einmal eine Frage zu einem Thema bei dem ich mich gerade völlig im Kreis drehe.
Ich habe auf einer Seite eine Linie quasi als Vorlage (GraphicLine) mit einer gewünschten Dicke und Farbe.
Jetzt erzeuge ich neue Linien und möchte den neuen die Eigenschaften (Farbe, Dicke) der Vorlage geben.

NeueLinie.AppliedObjectStyle := VorlageLinie.AppliedObjectStyle;

erfüllt leider nicht den Zweck den ich erhofft hatte. Wo ist denn die Farbe zu finden?


Vielen Dank

Armin Kirstein

(Dieser Beitrag wurde von Halbaffe am 8. Apr 2010, 12:29 geändert)

InDesign mit Delphi steuern

Marc Sidon
Beiträge gesamt: 262

8. Apr 2010, 15:20
Bewertung:

gelesen: 6618

Beitrag als Lesezeichen
Mit "AppliedObjectStyle" ist das Objektformat gemeint. Siehe "Objektformate".

Die Farbe findest Du unter "fillColor".
Die Dicke findest Du unter "strokeWeight".

Benutzt Du den ExtendScriptToolkit als Nachschlagewerk?
Dort kannst Du zu jedem Element im Scripting sehen, was es für Eigenschaften hat und was Du damit anstellen kannst!

Gruß,
Marc
------------------------------------------

modernmediasidon
Erstellung von InDesign Scripts

InDesign mit Delphi steuern

Halbaffe
Beiträge gesamt: 12

8. Apr 2010, 16:48
Bewertung:

gelesen: 6598

Beitrag als Lesezeichen
Hallo Marc,

Vielen Dank für den Hinweis.
Ja, ich benutze ExtendScriptToolkit als Hilfe, wenn auch eine Web-Version davon die mal jemand erstellt hat und die IMHO ein wenig flüssiger zu bedienen ist. Dennoch ist das für den Anfang wahnsinnig viel Input.

Die Farbe ist StrokeColor und nicht FillColor, wie ich ständig probiert hatte.
Ich wollte in jedem Fall erreichen, das die neue Linie die Eigenschaften der Vorlage erbt. Damit haben Programmierer und Grafiker beiderseits ein paar mehr Freiheiten. Der Grafiker kann eine Beispiellinie vorgeben, die der Programmierer dann nur noch vervielfältigen muss. Und der Programmierer muss nicht alle 5 Minuten die CMYK-Werte ändern :-)

Danke die wieder einmal für den entscheidenden Hinweis.

Armin Kirstein

InDesign mit Delphi steuern

Marc Sidon
Beiträge gesamt: 262

8. Apr 2010, 18:09
Bewertung:

gelesen: 6582

Beitrag als Lesezeichen
Hallo Armin,

ach ja stimmt, strokeColor, nicht fillColor. Sorry.
Kannst Du die "Vorlage-Linie" denn nicht einfach duplizieren und dann dahin setzen, wo sie hin soll? Dann hast Du auf jeden Fall alle Einstellungen übernommen...

Gruß,
Marc
------------------------------------------

modernmediasidon
Erstellung von InDesign Scripts

InDesign mit Delphi steuern

Halbaffe
Beiträge gesamt: 12

8. Apr 2010, 18:22
Bewertung:

gelesen: 2370

Beitrag als Lesezeichen
Hallo Marc,

ich muss gestehen, das ich das Duplizieren unlängst versucht hatte und es einfach nicht hinbekommen hab. Weiss nicht warum. Daher hatte ich es mit einem Add versucht. Aber aus Umwegen lernt man ja ne Menge.

Am Programmieren ist irgendwie bemerkenswert, das man (gefühlt) wenig an Sachen arbeitet, die man gut kann. Aufhalten tut man sich an den Dingen die einem je nach Lage Kopfschmerzen machen. Ich glaube daher ist die wesentliche Eigenschaft eines Programmierers eine hohe Frustrationstoleranz. Also es gibt Tage,da frag ich mich wirklich warum ich mir das antue :-)

Vielen Dank noch mal

Armin Kirstein

InDesign mit Delphi steuern

WernerPerplies
Beiträge gesamt: 2762

8. Apr 2010, 18:47
Bewertung:

gelesen: 2364

Beitrag als Lesezeichen
Armin,

Antwort auf [ Halbaffe ] Hallo Marc,
...
ch glaube daher ist die wesentliche Eigenschaft eines Programmierers eine hohe Frustrationstoleranz.

Armin Kirstein


Der Frust ist vorübergehend, was bleibt sind die Erfolgserlebnisse;-)

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

InDesign mit Delphi steuern

Marc Sidon
Beiträge gesamt: 262

9. Apr 2010, 11:04
Bewertung:

gelesen: 2307

Beitrag als Lesezeichen
Hallo Armin...

Antwort auf [ Halbaffe ] ...ich muss gestehen, das ich das Duplizieren unlängst versucht hatte und es einfach nicht hinbekommen hab. Weiss nicht warum. Daher hatte ich es mit einem Add versucht. Aber aus Umwegen lernt man ja ne Menge.


... dann frag doch einfach danach! :)
Duplizieren ist ganz einfach! Du benötigst dazu lediglich noch einen Pointer auf die aktuelle Seite. In den zweiten Parameter kannst Du dann noch einen Offset (Versatz) zur Vorlagenlinie angeben.
Code
newLine1 := masterLine1.Duplicate(page1, VarArrayOf([aOffsetX, aOffsetY])); 


Antwort auf [ Halbaffe ] Am Programmieren ist irgendwie bemerkenswert, das man (gefühlt) wenig an Sachen arbeitet, die man gut kann. Aufhalten tut man sich an den Dingen die einem je nach Lage Kopfschmerzen machen. Ich glaube daher ist die wesentliche Eigenschaft eines Programmierers eine hohe Frustrationstoleranz. Also es gibt Tage,da frag ich mich wirklich warum ich mir das antue :-)


Das ist ganz normal... und eben der Alltag! :)
Aber Werner hat Recht...

Antwort auf [ WernerPerplies ] Der Frust ist vorübergehend, was bleibt sind die Erfolgserlebnisse;-)


Ich habe über "InDesign mit Delphi steuern" quasi meine Diplomarbeit geschrieben und mich auch anschliessend ca. 2,5 Jahre damit befasst zu lernen und zu verstehen wie InDesign hinter dem Vorhang funktioniert. Und glaub mir, auch ich hatte mehr als einmal mit ausreichend Frust zu tun... Vor allem, wenn Du Dir eigentlich sicher bist, dass Du es 100% richtig machst und irgendwas doch nicht das macht, was Du erhofft hast.

Neulich habe ich einen ganzen Tag damit verbracht festzustellen, dass zwei für mich definitiv übereinanderliegende Objekte doch nicht übereinander liegen, wenn sie eine Abweichung von 6,2 * 10 hoch -11 haben.... *grmpf*

Die Delphi Tooltips sagten, die Differenz sei 0. InDesign sagte, die Differenz ist 0. Die ganzen Nullstellen hinter dem Komma wurden mir von beiden Seiten einfach unterschlagen.... :)

Gruß,
Marc Sidon
------------------------------------------

modernmediasidon
Erstellung von InDesign Scripts

InDesign mit Delphi steuern

Halbaffe
Beiträge gesamt: 12

9. Apr 2010, 13:42
Bewertung:

gelesen: 2291

Beitrag als Lesezeichen
Hallo,

danke, das Duplizieren probier ich ma beizeiten aus. So ähnlich hatte ich die Formel auch, doch hab ich aus der Hilfe gelesen, das der erste Teil der Übergabe ein Array aus 2 Units ist und nicht nur 1. Schätze daran hats dann gelegen.
Danke für den Tip.

Einen kleinen Vorteil haben die Programmierer ja als Ausgleich für die täglichen Kopfschmerzen. Es ist ja für den Rest der Menschheit nahezu schon Hexenkram was wir machen. Digitale Schwarze Kunst und so. Und ich bin mir garnicht so sicher ob ich denn immer zeigen soll, wie simpel die Sache eigentlich ist, denn warum desillusionieren. :-)
Aber tatsächlich ist die Kunst bei der Sache ja, wie ich den Weg zum Ziel gehe. Mag das Ergebnis unterm Strich noch so banal sein, kann es bis dahin ja der reinste Horror gewesen sein.

Grüße

Armin Kirstein

InDesign mit Delphi steuern

Halbaffe
Beiträge gesamt: 12

27. Apr 2010, 11:47
Bewertung:

gelesen: 2134

Beitrag als Lesezeichen
Hallo Marc,

leider hänge ich an einer Stelle, bei der ich eine Zuweisung machen will.
Ziel soll es sein, ein PDF-Export zu machen. Dabei ist Ziel:

idDoc1.Export('t_PD',s1,false,idPDFSet,'',true);

Nur kann ich irgendwie kein Preset zuweisen. Soweit ich weiss muss ich das doch von der Application holen. Versucht hab ich das hier:
idPDFSet := PDFExportPreset(IDispatch(vIdApplication1)). ...?
Aber da ist kein Preset.

hast du einen erleuchtenden Tip für mich?

Armin

InDesign mit Delphi steuern

Marc Sidon
Beiträge gesamt: 262

27. Apr 2010, 14:15
Bewertung:

gelesen: 2101

Beitrag als Lesezeichen
Hallo Armin...

Antwort auf [ Halbaffe ] idPDFSet := PDFExportPreset(IDispatch(vIdApplication1)). ...?


Ohne mich genauer mit Deinem eigentlichen Vorhaben befasst zu haben, ist DAS DA OBEN 100%-ig falsch!
Du castest damit Deinen vIdApplication1-Pointer auf den Typ "PDFExportPreset".... DAS kann nicht gehen... Ich denke, dass Du darin die Application hast...

Schau mal, ob HIER was zu finden ist:
Code
idPDFSet := _Application(IDispatch(vIdApplication1)).pdfExportPresets... 


Der Unterstrich vor Application ist kein Schreibfehler, aber das weißt Du bestimmt...

Gruß,
Marc Sidon
------------------------------------------

modernmediasidon
Erstellung von InDesign Scripts

(Dieser Beitrag wurde von Marc Sidon am 27. Apr 2010, 14:18 geändert)

InDesign mit Delphi steuern

Halbaffe
Beiträge gesamt: 12

28. Apr 2010, 16:56
Bewertung:

gelesen: 2064

Beitrag als Lesezeichen
Hallo Marc,

wieder einmal Danke für die Hilfe.
Für die Mitleser eine kurze Zusammenfassung.
Mein Fehler war unter anderem nach einem einzelnen PDF-Einstellungssatz zu suchen. Der richtige Weg ist, sich zuerst die gesammelten Presets zu schnappen und daraus dann ein einzelnes zu nehmen.

Code
idPDFSets :=_Application (IDispatch(vIdApplication1)).PDFExportPresets; 
idPDFSetLast := PDFExportPreset(idPDFSets.LastItem);


Danach gehts denn weiter. Was erstaunlicherweise nicht funktionierte war das herauspicken eines Sets anhand des Namens.
Code
string := '[PDF/X-4:2008]'; 

Aber ich hab nicht herausgefunden warum das nicht geklappt hat. Die Aussage von Indesign war, das diese Einstellungen nicht anwendbar seien. Hmm, händisch waren sie es. Aber ich hab mir ein Set in ID zurechtgestellt, unter "x" gespeichert und das letzte angesprochen. Ist halt eine der Möglichkeiten.

Und brauchen tut man das Ganze um zB automatisiert als PDF zu speichern. Und das geht so:
Code
idDoc1.Export(1952403524,Pfadstring,false,idPDFSetEins,'',true); 


Super das das klappt, ohne das PDF-Speichern wäre es nicht richtig automatisiert.

Armin

InDesign mit Delphi steuern

Pfaffe
Beiträge gesamt: 1

23. Jul 2010, 11:23
Bewertung:

gelesen: 1841

Beitrag als Lesezeichen
Hallo,
ich beschäftige mich zur Zeit auch mit dem Thema "InDesign mit Delphi 2009 steuern". Wobei für mich InDesign Neuland ist. InDesign zu öffnen habe ich bereits hin bekommen. Die Typenbibliothek liegt mir vor. Was mir fehlt ist eine Dokumentation über die Befehle?
Konkret möchte ich in einer Preisliste, die aus Spalten (Produktbild, Artikelnummer, Artikeltext, Preis) besteht, die Artikelnummer zeilenweise auslesen und dann den Artikeltext und Preis in die Datei schreiben.

Gruß
Dietmar