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

Is it possible to grab the css properties of a character style, with extendscript?

Community Beginner ,
May 04, 2022 May 04, 2022

Hello, 

 

I was digging around character styles, related to a task I'm working on, and noticed this:

 

InDesign_rJ9IAlioq0.pngexpand image

The information below 'export details' is perfect for what I need, but I can't find it anywhere on the character style object. I thought it might live in 'styledExportTagMaps' under 'exportAttributes', but I just get an empty string. Am I missing something!?

 

Many thanks,

Olly

TOPICS
EPUB , Import and export , Scripting
737
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 ,
May 04, 2022 May 04, 2022

Hi Olly, There doesn’t seem to be away to get the css from the style object.

 

You might be able to export a temporary HTML file, read back the generated CSS file (which would be IDGeneratedSTyles.css), and get the needed text string from the read file. So, after a temp HMTL export of some selected text get the generated CSS, and search the returned text via regex to get your style:

 

 

//sample on the desktop
var path = File(Folder.desktop + "/Test-web-resources/css/idGeneratedStyles.css");
var myText = readFile(path)
$.writeln(myText)
//returns the idGeneratedStyles.css text

function readFile(p) {
	var f = new File(p);
	f.open("r");  
	var x = f.read();  
	f.close();
	return x; //returns the text in the file
}

 

 

Screen Shot 43.pngexpand image

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 Beginner ,
May 04, 2022 May 04, 2022

Hi Rob!

 

Thanks for this, I did worry it might require something like this. I don't think I will be able to go down this route due to our infrastructure but thanks for letting me know the information is not available on the api - I will likely have to cherry pick from the individual properties on the char style itself.

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 ,
May 04, 2022 May 04, 2022

I don't think I will be able to go down this route due to our infrastructure

 

Do you mean you are not allowed to use the exportFile() method?

 

This writes the CSS to the System’s temp folder and the getStyleCSS() function returns the CSS—you could also go to the desktop or document folder. The advantage of the temp folder is it’s hidden.

 

The document needs to have a character style named "MyStyle" change as needed:

 

var doc = app.documents.item(0);
var styleCSS = getStyleCSS("MyStyle")

alert(styleCSS)


/**
* Gets the emitted CSS for a character style 
* @ param the name of the style to get 
* @ return the CSS string 
* 
*/
function getStyleCSS(n){
    var f = new Folder(Folder.temp + "/getcss")
    f.create();
    //var f = new Folder(Folder.desktop)
    var cs = doc.characterStyles.itemByName(n)
    cs.emitCss = true;
    var tf = doc.textFrames.add({contents:"A"});
    tf.parentStory.appliedCharacterStyle = cs;  
    var exPath = f + "/" +  doc.name + ".html";
    var cssPath = f + "/" +  doc.name + "-web-resources/css/idGeneratedStyles.css";
    tf.exportFile(ExportFormat.HTML, File(exPath));
    var cssText = readFile(cssPath)
    tf.remove();
    var regx = new RegExp("span."+n+"[^\\]]+\\}")
    return cssText.match(regx)
}

/**
* Read a text file 
* @ param file path 
* @ return file’s text 
*/

function readFile(p) {
	var f = new File(p);
	f.open("r");  
	var x = f.read();  
	f.close();
	return x; //returns the text in the file sampletext.txt
}

 

Screen Shot.pngexpand imageScreen Shot 1.pngexpand image

 

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 Beginner ,
May 05, 2022 May 05, 2022

this looks terrific I will give it a go, thank you 🙂

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 ,
May 05, 2022 May 05, 2022
LATEST

You might have to watchout for the temp folder creation. It always works for me on my system, but I’ve seen a few cases where it fails when I share a script that tries to write to it—f.create() returns false if the folder can’t be written, so you might want to include a fallback folder.

 

Also, your default browser might launch when you run the script, so maybe set doc.htmlExportPreferences.viewDocumentAfterExport = false

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 ,
May 04, 2022 May 04, 2022

That's interesting. If the data exists there for the panel, it must be generated/exist somewhere more fundamental. But no?

 

—

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 Beginner ,
May 04, 2022 May 04, 2022

yeah my thoughts exactly - I'm especially interested how it generates the 'font-weight' property, and how it works that out

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 ,
May 04, 2022 May 04, 2022

In my experience, everything 100-400 weight is assigned Regular, and 500-900, bold. Nothing more complicated than that.

 

—

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 ,
May 04, 2022 May 04, 2022

When was the CSS feature implemented? Many features have been implemented in ID that have not been implemented in the ID DOM. Alt Text for hyperlinks being another. 

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