DeepIDML is a parser focus on grabbing information from IDML file.
import { DeepIDML } from 'deep-idml';
const paraXml: string = `<ParagraphStyle
FillColor="Color/Black"
FontStyle="Regular"
PointSize="12">
</ParagraphStyle>`
const deeper: DeepIDML = new DeepIDML();
deeper.setXML(paraXml);
console.log(deeper.getJSON());
console.log(deeper.getCss());
$ npm i deep-idml
In most situations, any information about styles are in the Resources/Styles.xml which unzip from IDML file. And the snippet shows as below:
<idPkg:Styles>
...
<RootParagraphStyleGroup Self="u74">
<ParagraphStyle Self="ParagraphStyle/Table%3a12-13w table (7/9 80%25)" Name="Table:12-13w table (7/9 80%)">
<Properties>
<BasedOn type="object">ParagraphStyle/Table%3a12-13 table (7/9 80%25)</BasedOn>
</Properties>
</ParagraphStyle>
</RootParagraphStyleGroup>
...
</idPkg:Styles>
With DeepIDML, people can simply set Resources/Style.xml file as parameter into function, and it will return parsed css property
const deeper: DeepIDML = new DeepIDML();
const parsedCssProps = deeper.getTraversaledParagraphStyleGroups(paraXml);
console.log(parsedCssProps);
// Result
'Table:12-13w table (7/9 80%)': {
transform: 'skewX(0)',
'font-style': 'Regular',
'text-indent': '0px',
color: 'Black',
letterSpacing: '0',
textDecoration: 'underline',
fontSize: '7',
textAlign: 'left',
marginLeft: '0',
marginRight: '0',
'@_BasedOn': 'Table:12-13 table (7/9 80%)'
},
import { DeepIDML } from 'deep-idml';
const styleXMLString: string = fs.readFileSync('./Resources/styles.xml', 'utf8');
const deeper: DeepIDML = new DeepIDML();
const css = deeper.getCSSFromXML(styleXMLString);
// Result
.Table:10-11 table 03 DL (7/9 90%) {
transform:skewX(0);
font-style:Regular;
text-indent:0px;
color:Black;
letter-spacing:0;
text-decoration:underline;
font-size:7;
text-align:left;
margin-left:0;
margin-right:0;
font-family:CompositeFont/$ID/宋+Times;
margin-top:0;margin-bottom:0;
}