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' ?)
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.
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 ------------------------------------------
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 ------------------------------------------
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.
nein, es gibt nicht nur Move als Befehl. Du kannst die GeometricBounds natürlich auch setzen:
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:
Ich hoffe, ich konnte es Dir einigermaßen verständlich machen...
Gruß, Marc Sidon ------------------------------------------
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.
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 ------------------------------------------
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.
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 ------------------------------------------
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 :-)
... 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.
Das ist ganz normal... und eben der Alltag! :) Aber Werner hat Recht...
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 ------------------------------------------
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.
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.
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:
Der Unterstrich vor Application ist kein Schreibfehler, aber das weißt Du bestimmt...
Gruß, Marc Sidon ------------------------------------------
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.
Danach gehts denn weiter. Was erstaunlicherweise nicht funktionierte war das herauspicken eines Sets anhand des Namens. 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:
Super das das klappt, ohne das PDF-Speichern wäre es nicht richtig automatisiert.
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.