[GastForen Programme Print/Bildbearbeitung Adobe InDesign InDesign mit Delphi steuern

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

InDesign mit Delphi steuern

Halbaffe
Beiträge gesamt: 12

17. Mär 2010, 11:01
Beitrag # 1 von 23
Bewertung:
(7086 mal gelesen)
URL zum Beitrag
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' ?)
X

InDesign mit Delphi steuern

Marc Sidon
Beiträge gesamt: 262

17. Mär 2010, 11:52
Beitrag # 2 von 23
Beitrag ID: #436771
Bewertung:
(7067 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#436752]
(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
Beitrag # 3 von 23
Beitrag ID: #436786
Bewertung:
(7046 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#436771]

InDesign mit Delphi steuern

Marc Sidon
Beiträge gesamt: 262

17. Mär 2010, 13:05
Beitrag # 4 von 23
Beitrag ID: #436787
Bewertung:
(7035 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#436786]

InDesign mit Delphi steuern

Halbaffe
Beiträge gesamt: 12

18. Mär 2010, 12:51
Beitrag # 5 von 23
Beitrag ID: #436957
Bewertung:
(6986 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#436787]

InDesign mit Delphi steuern

Marc Sidon
Beiträge gesamt: 262

18. Mär 2010, 19:08
Beitrag # 6 von 23
Beitrag ID: #437021
Bewertung:
(6957 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#436957]

InDesign mit Delphi steuern

Halbaffe
Beiträge gesamt: 12

18. Mär 2010, 21:04
Beitrag # 7 von 23
Beitrag ID: #437032
Bewertung:
(6940 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#437021]

InDesign mit Delphi steuern

Marc Sidon
Beiträge gesamt: 262

19. Mär 2010, 09:06
Beitrag # 8 von 23
Beitrag ID: #437059
Bewertung:
(6905 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,

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

Gruß,
Marc


als Antwort auf: [#437032]

InDesign mit Delphi steuern

Halbaffe
Beiträge gesamt: 12

25. Mär 2010, 17:31
Beitrag # 9 von 23
Beitrag ID: #437742
Bewertung:
(6843 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#437059]

InDesign mit Delphi steuern

Marc Sidon
Beiträge gesamt: 262

25. Mär 2010, 18:45
Beitrag # 10 von 23
Beitrag ID: #437745
Bewertung:
(6829 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#437742]

InDesign mit Delphi steuern

Halbaffe
Beiträge gesamt: 12

25. Mär 2010, 21:43
Beitrag # 11 von 23
Beitrag ID: #437755
Bewertung:
(6805 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#437745]
(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
Beitrag # 12 von 23
Beitrag ID: #438674
Bewertung:
(6639 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#437755]
(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
Beitrag # 13 von 23
Beitrag ID: #438727
Bewertung:
(6615 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#438674]

InDesign mit Delphi steuern

Halbaffe
Beiträge gesamt: 12

8. Apr 2010, 16:48
Beitrag # 14 von 23
Beitrag ID: #438737
Bewertung:
(6595 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#438727]

InDesign mit Delphi steuern

Marc Sidon
Beiträge gesamt: 262

8. Apr 2010, 18:09
Beitrag # 15 von 23
Beitrag ID: #438744
Bewertung:
(6579 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#438737]
X