Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

Script for Illustrator 25.0

New Here ,
Jan 15, 2025 Jan 15, 2025

Hello there,

I need hel creating the script for templet file in Illustrator where some text field need to fill automatically. Please see below:

Date: xyzxyz (auto fill based on the date of creation)

Customer: xyzxyz (drop down menu based on path wher the file is)

Part#: KG12345 (it gets from template file name)

Description: Beef Sausage 400g (it gets from template file name)

 

Template file name example: KG12345_Beef Sausage 400g-PROOF

 

TOPICS
How-to , Scripting
326
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe
Community Expert ,
Jan 16, 2025 Jan 16, 2025

Hi @bosko_5014 there are many, many ways of approaching this type of need, but here is a fairly simple one: you put your text frames into a group called "info" and name the text frames "partNumber", "description", "date" and "client". The script finds them, collects the data you need, and populates those frames' contents.

 

To test it out, first run it with the attached demo document so you can see it in its most simplest case. Let me know how it goes. Note that it assumes the "client" is the name of the document's parent folder.

- Mark

/**
 * @file Populate Text From Filename.js
 *
 * Finds a group called "Info" and textframes inside that group
 * and populates their contents as follows:
 *   - PartNumber: from document file name
 *   - Description: from document file name
 *   - Date: the document's file's creation date, as YYYY-MM-DD
 *   - Customer: The document's file's parent's (folder) name
 * 
 * @author m1b
 * @version 2025-01-16
 * @discussion https://community.adobe.com/t5/illustrator-discussions/script-for-illustrator-25-0/m-p/15091263
 */
(function () {

    var settings = {

        // extract the part number and description from the filename
        matchFilename: /([A-Z]+\d+)_([^\-]+)-/,

        // a GroupItem in the document must be named this
        INFO_GROUP_NAME: 'info',

        // the names of the target text frames
        FRAME_NAMES: [
            'partNumber',
            'description',
            'date',
            'client',
        ],

    };

    var doc = app.activeDocument;

    if (!doc.fullName)
        return alert('Please save the document and try again.');

    var match = doc.name.match(settings.matchFilename);

    if (!match || 3 !== match.length)
        return alert('Could not parse the filename "+doc.name+".');

    // collect the info
    var partNumber = match[1],
        description = match[2],
        date = doc.fullName.created.toJSON().slice(0, 10),
        client = doc.fullName.parent.name;

    // collect the text frames from the "info group"
    var infoGroup = getThing(doc.groupItems, 'name', settings.INFO_GROUP_NAME);

    if (!infoGroup)
        return alert('Could not find the group item named "' + settings.INFO_GROUP_NAME + '".');

    // find the text frames
    var infoTexts = {
        partNumber: getThing(infoGroup.textFrames, 'name', settings.FRAME_NAMES[0]),
        description: getThing(infoGroup.textFrames, 'name', settings.FRAME_NAMES[1]),
        date: getThing(infoGroup.textFrames, 'name', settings.FRAME_NAMES[2]),
        client: getThing(infoGroup.textFrames, 'name', settings.FRAME_NAMES[3]),
    };

    // set the info
    if (infoTexts.partNumber)
        infoTexts.partNumber.contents = partNumber;

    if (infoTexts.description)
        infoTexts.description.contents = description;

    if (infoTexts.date)
        infoTexts.date.contents = date;

    if (infoTexts.client)
        infoTexts.client.contents = client;

})();

/**
 * Returns a thing with matching property.
 * If `key` is undefined, evaluate the object itself.
 * @author m1b
 * @version 2024-04-21
 * @param {Array|Collection} things - the things to look through.
 * @param {String} [key] - the property name (default: undefined).
 * @param {*} value - the value to match.
 */
function getThing(things, key, value) {

    for (var i = 0, obj; i < things.length; i++)
        if ((undefined == key ? things[i] : things[i][key]) == value)
            return things[i];

};

 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jan 17, 2025 Jan 17, 2025

Hi Mark,

Thank you for your response. I don't know anything about scripting and I wouldn't know how to use what you sent me. If I snd you my template file would you be able to make it work and send it back to me? I'm willing to pay for your service.

Regards,

Bosko

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jan 17, 2025 Jan 17, 2025
LATEST

Hi @bosko_5014, sure i'd be happy to help—click on my username and send me a message that way.

- Mark

 

P.S. here is a good tutorial on using scripts in Illustrator.

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines