[Indesign scripting] xml import (string ipv file)

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Momenteel genereer ik een xml in php en schrijf deze vervolgens weg naar een xml-bestand. Vervolgens importeer ik deze xml met de functie importXML. Deze functie verwacht een file. Nu wil ik graag de xml als een string importeren zodat ik niet eerst de xml in een tempfile hoef te plaatsen. Weet iemand of dit mogelijk is? Kan de xml ook opbouwen met andere functies van indesignscripting, maar ik geef voorkeur aan een string..

Ik gebruik momenteel javascript als scriptaal voor indesignserver.

Voor meer informatie over indesign scripting de volgende link:
http://www.adobe.com/products/indesign/scripting/

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
bump

Acties:
  • 0 Henk 'm!

  • beany
  • Registratie: Juni 2001
  • Laatst online: 16:08

beany

Meeheheheheh

Tis nog vroeg voor mij, maar:

Je wil XML in PHP genereren en in PHP als string weer inlezen... Wat heeft JavaScript er dan mee te maken? Of wil je de XML in PHP genereren en die aan de client geven? Of draait JavaScript op de server(zou niet weten waarom, maar ok).

Kortom, het is mij niet helemaal duidelijk wat je wilt, kan je wat meer info geven?

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

beany schreef op maandag 29 juni 2009 @ 09:20:
Kortom, het is mij niet helemaal duidelijk wat je wilt, kan je wat meer info geven?
Second that. In welke taal ben je nou aan het programmeren, en wat lukt er niet? Plak de drie relevante regels code eens? De functie importXML() ken ik ook niet in PHP...

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • benoni
  • Registratie: November 2003
  • Niet online
beany schreef op maandag 29 juni 2009 @ 09:20:
Of draait JavaScript op de server(zou niet weten waarom, maar ok).
Indesign (al of niet in de Server versie) heeft een eigen Javascript omgeving aan boord. Het idee is waarschijnlijk begonnen omdat voor Apple versies van programma's al jaren compatibility wordt ingebouwd voor Applescript, maar er is ook een Javascript-like interpreter zodat je scripting cross-platform voor Windows en Mac kunt maken :)

Ik had het topic gebookmarked maar ik weet geen direct antwoord op de vraag van de topicstart. Ik heb wel scriptingfuncties voor Indesign gemaakt, maar dat is vooral Applescript, en in plaats van met een groot XML bestand wordt de import gedaan door stukjes tekst in tekstblokken te plaatsen of te vervangen (à la smarty sjabloon). Werkt een stuk langzamer though :P

Misschien is het slim om dit topic heen en weer te tikken naar Graphics, meer mensen daar die professioneel met Indesign onder Windows werken.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hieronder een voorbeeld van de code die momenteel werkt. Ik heb xml-bestand geëxporteerd van indesign. De tags en attributes van deze xml heb ik in een database opgeslagen. Met deze tags genereer ik een nieuwe xml met daarin de data die ik wil. Dit stuur ik met soap naar de indesignserver. De indesignserver gegeneerd nu een JPEG. Deze preview roep ik met ajax op zodat gebruikers een zo actueel mogelijk beeld hebben van wat ze maken.

Om het script te versnellen wil ik het aanmaken van het xml bestand overslaan. Ik wil de xml in een variabele opslaan en vervolgens meegeven aan de importXML functie. Met het stukje javascript dat ik meestuur kan ik de indesignserver aansturen (kan dus zijn dat de importXML functie alleen voor indesign scripting is):

"With InDesign scripting support, you can automate tedious production tasks such as placing and replacing images, correcting errors in text, and preparing files for printing. And it plays an integral role in XML and IDML-based workflows.."


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    public function generateXML($templateID, $tagValues) {
        $xml = '';

        $xml .= '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'.EOL;
        $xml .= '<Root>';

        $tags = $this->getTagsFromTemplate($templateID);

        if (is_array($tags)) {
            $this->writeXML(&$xml, $tags, $tagValues);
        }
        $xml .= '</Root>';

        $fp = fopen('path/test.xml', 'w');
        fwrite($fp, $xml);
        fclose($fp);



        return $filename;
    }


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        $script = 'var myDocument = app.open (File("path/template.indt"), false);';

        $script .= 'var myXMLImportPreferences = myDocument.xmlImportPreferences;';
        $script .= 'with (myXMLImportPreferences) {';
        $script .= '    allowTransform = false;';
        $script .= '    createLinkToXML = false;';
        $script .= '    ignoreUnmatchedIncoming = false;';
        $script .= '    ignoreWhitespace = true;';
        $script .= '    importCALSTables = true;';
        $script .= '    importStyle = XMLImportStyles.mergeImport;';
        $script .= '    importTextIntoTables = false;';
        $script .= '    importToSelected = false;';
        $script .= '    removeUnmatchedExisting = false;';
        $script .= '    repeatTextElements = true;';
        $script .= '}';

        $script .= 'myDocument.xmlElements.item(0).importXML(File("path/test.xml"));';

        $script .= 'app.jpegExportPreferences.resolution = 150;';

        $script .= 'myDocument.exportFile(ExportFormat.jpg, new File("path/preview.jpg"));';
        $script .= 'myDocument.close();';

        $this->phpRunScript('path/IDSP.wsdl', 'http://host:port', '', $script, 'javascript', array(), true);
        die('<img src="path/preview.jpg">');


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    private function phpRunScript($wsdl, $host, $scriptFile, $scriptText,  $scriptLanguage, $scriptArgs, $printDebugInfo) {
        try {
            if ($host != '') {
                $client = new SoapClient($wsdl, array('trace' => $printDebugInfo, 'encoding' => 'utf-8', 'location' => $host));
            } else {
                $client = new SoapClient($wsdl, array('trace' => $printDebugInfo, 'encoding' => 'utf-8'));
            }

            $runScriptParams = array ('runScriptParameters' => array('scriptText' => $scriptText, 'scriptLanguage' => $scriptLanguage, 'scriptFile' => $scriptFile, 'scriptArgs' => $scriptArgs, 'scriptcontent'    => $scriptContent));

            $result = $client->RunScript($runScriptParams);

            unset($client);

        } catch (SoapFault $exception) {
// ..blabla
        }
    }

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
benoni schreef op maandag 29 juni 2009 @ 09:52:
Misschien is het slim om dit topic heen en weer te tikken naar Graphics, meer mensen daar die professioneel met Indesign onder Windows werken.
Hoe kan ik dit heen en weer tikken? Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • beany
  • Registratie: Juni 2001
  • Laatst online: 16:08

beany

Meeheheheheh

Verwijderd schreef op maandag 29 juni 2009 @ 14:31:
[...]


Hoe kan ik dit heen en weer tikken? Alvast bedankt!
Dat kan alleen een moderator. Als je wilt dat dit topic in een ander forum komt(een moderator bepaalt of dat ook zo is) kan je een Topic Report doen(klik op bovenaan het topic op het volgende icoontje: Afbeeldingslocatie: http://tweakimg.net/g/forum/images/icons/icon_hand.gif )

Maar naar mijn idee hoort het hier in Programming thuis, maar het echte oordeel daar over ligt bij een moderator ;)

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua

Pagina: 1