报社利用自己的历史数据,印刷专题性质的纸质刊物,就需要利用indesign进行排版,而在手动排版之前,需要生成原始的模板,从而让后期的工作减少。
环境搭建
1. 从indesign的官网上下载indesign的sdk。下载地址在这里,我用的是Adobe InDesign CS5.5 Products SDK,解压。我的放在G:\indesign\Adobe InDesign CS5.5 SDK\
2. 配置环境变量。G:\indesign\Adobe InDesign CS5.5 SDK\devtools\sdktools\idmltools配置到环境变量的path。具体G:\indesign\Adobe InDesign CS5.5 SDK\docs\guides\idml-cookbook.pdf里有详细的说明。
这样的我们的环境就算搭建完成
概念
首先来说几个概念,完全是自己领悟的,肯定有不对的地方。
MasterSpread---spread---page---stroy---textframe,image
page当然就是最好理解的,就是一页,如果打印idml,就是一张纸
一个spread可以包含多个page,如果需要做程对页的,一个spread包含2个page
MasterSpread是spread的模板,简单的在indesign里可以定义MasterSpread,在添加spread的时候,直接用定义好的MasterSpread
stroy是包含一些基本单位(文字,图片)
xsl文件用途
designmap.xsl,indesign读取的入口就是它了。负责生成designmap.xml。这个的变化不大,在我的开发过程中基本上没动过。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.1"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/package/designmap"> <xsl:document href="{$workingdir}{$filesep}designmap.xml" method="xml" indent="yes"> <xsl:processing-instruction name="aid">style="50" type="document" readerVersion="6.0" featureSet="257" product="6.0(285)"</xsl:processing-instruction> <Document xmlns:idPkg="http://ns.adobe.com/AdobeInDesign/idml/1.0/packaging" DOMVersion="6.0" Self="d"> <Language Self="Language/$ID/[No Language]" Name="$ID/[No Language]" SingleQuotes="''" DoubleQuotes="""" PrimaryLanguageName="$ID/[No Language]" SublanguageName="$ID/[No Language]" Id="0" HyphenationVendor="$ID/" SpellingVendor="$ID/"/> <idPkg:Graphic src="Resources/Graphic.xml"/> <idPkg:Fonts src="Resources/Fonts.xml"/> <idPkg:Styles src="Resources/Styles.xml"/> <idPkg:Preferences src="Resources/Preferences.xml"/> <Layer Self="ub3" Name="Layer 1" Visible="true" Locked="false" IgnoreWrap="false" ShowGuides="true" LockGuides="false" UI="true" Expendable="true" Printable="true"> <Properties> <LayerColor type="enumeration">LightBlue</LayerColor> </Properties> </Layer> <idPkg:MasterSpread src="MasterSpreads/MasterSpread_A.xml"/> <xsl:for-each select="/package/pagebuilder/spread"> <idPkg:Spread src="Spreads/Spread_{@id}.xml"/> </xsl:for-each> <xsl:for-each select="/package/pagebuilder/story"> <idPkg:Story src="Stories/Story_{@id}.xml"/> </xsl:for-each> </Document> </xsl:document> </xsl:template> </xsl:stylesheet>
MasterSpreads/MasterSpreads.xsl,负责生成Master-page,主要是配置页面信息。比如说纸张大小,样式等
Resources/Fonts.xls,定义模板中需要要的字体
Resources/styles.xls,定义样式
Spreads/Spread.xls,生成spread.xml
Stroies/Stroy.xls,生成stroy.xml
以上这些就是我在开发种用到的。
开发流程
1. 既然是要做模板,那么就需要事先生成一个模块,要做成什么样子,一般也是由客户提供一个idml模板文件(jianbao.idml)。
2. 创建自己的xls文件夹。直接从G:\indesign\Adobe InDesign CS5.5 SDK\devtools\sdktools\idmltools\samples\pagebuilder里把xsl复制到自己的项目里。
3. 反解idml
package.bat -d G:\模板\jianbao.idml G:\模板\decompress
这样就会在G:\模板\decompress下生成一堆文件,MasterSpreads,META-INF,Resources,Spreads,Stories,XML,designmap.xml
4. 生成自己的数据xml。G:\indesign\Adobe InDesign CS5.5 SDK\devtools\sdktools\idmltools\samples\pagebuilder里有一个pagebuilder.xml。这个xml是为indesgin提供基本的数据。xsl里的文件负责解析xml
5. 根据要求修改xsl和xml,用下面代码生成idml文件,文件名和xml的名字是一样的。
pagebuilder.bat G:\模板\pagebuilder.xml
具体案例
1. 修改字体,字体颜色,字号,行距。
在indesign是先定义样式,再将样式应用到indesign中,下面的例子,样式名词都是AlbumName
修改Resources/Fonts.xls和Resources/Style.xls。确保需要的用到的字体在Resources/Fonts.xls里有定义,如
<FontFamily Self="di33a" Name="方正细黑一_GBK"> <Font Self="di33aFontn方正细黑一_GBK Regular" FontFamily="方正细黑一_GBK" Name="方正细黑一_GBK Regular" PostScriptName="$ID/FZXH1K--GBK1-0" Status="Substituted" FontStyleName="Regular" FontType="TrueType" WritingScript="25" FullName="FZXiHei I-Z08" FullNameNative="方正细黑一_GBK" FontStyleNameNative="Regular" PlatformName="$ID/" Version="3.00" /> </FontFamily>
这些都能在反解的Fonts.xml里都能找的到。然后在Resources/Style.xls为样式名字体,字体颜色,字号,行距
<ParagraphStyle Self="ParagraphStyle/AlbumName" Name="AlbumName" Imported="false" NextStyle="ParagraphStyle/AlbumName" KeyboardShortcut="0 0" PointSize="48" FontStyle="Regular" Justification="RightAlign"> <Properties> <Leading type="unit">26</Leading> #行距,PointSize表示字号 <AppliedFont type="string">方正细黑一_GBK</AppliedFont> #字体 <BasedOn type="string">$ID/[No paragraph style]</BasedOn> <PreviewColor type="enumeration">Nothing</PreviewColor> </Properties> </ParagraphStyle>
2. 修改页面大小。这个改动算是最大,不仅仅只是改变一个页面大小,而且需要调整页面上元素的坐标。
首先在MasterSpreads/MasterSpread.xls里修改GeometricBounds="0 0 841.889763778 595.275590551"
然后是页面上现有的元素坐标,工程量浩大,是个体力活
3. 修改元素的位置。
拿到反解后的文件,找到对应spread.xml里的元素,PathPointType里分别1,3对应的是左上右下2个点x,y坐标。修改程你需要就行,另外还需要修改ItemTransform。
<TextFrame ItemTransform="1 0 0 1 -928.3464566919686 -424.06299212522083" ParentStory="u460"> <Properties> <PathGeometry> <GeometryPathType PathOpen="false"> <PathPointArray> <PathPointType RightDirection="420.944881889 108" LeftDirection="420.944881889 108" Anchor="420.944881889 108"/> <PathPointType RightDirection="420.944881889 125.00787401574804" LeftDirection="420.944881889 125.00787401574804" Anchor="420.944881889 125.00787401574804"/> <PathPointType RightDirection="837.6377952748268 125.00787401574804" LeftDirection="837.6377952748268 125.00787401574804" Anchor="837.6377952748268 125.00787401574804"/> <PathPointType RightDirection="837.6377952748268 108" LeftDirection="837.6377952748268 108" Anchor="837.6377952748268 108"/> </PathPointArray> </GeometryPathType> </PathGeometry> </Properties> </TextFrame>
3. 对齐方式,换行等问题,在stroy.xls里修改。indesign用<Br/>换行
<ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/AlbumName" Justification="RightAlign"> <CharacterStyleRange AppliedCharacterStyle="CharacterStyle/$ID/[No character style]"> <xsl:for-each select="AlbumName"> <Content><xsl:value-of select="./text()"/></Content> <Br/> </xsl:for-each> </CharacterStyleRange> </ParagraphStyleRange>