如何使用IDMLlib从IDML文件中提取图像

时间:2013-07-22 15:47:12

标签: adobe-indesign idml

我需要解析一个IDML文件,并以Web格式将图像与该文件分开保存。我能做那个IDMLlib吗?如果有可能那么你能告诉我一些例子吗?附:该库的文档很糟糕,例子很糟糕。

2 个答案:

答案 0 :(得分:4)

是的,您可以使用IDMLlib,或者编写自己的IDML解析器(这就是我所做的)。

IDML中的图像可以嵌入或链接。要提取嵌入的图像,您需要找到内容节点,正如Jongware所描述的那样。

以下是未嵌入图像的IDML示例:

<Image ItemTransform="1 0 0 1 -32.04 -35.04" Self="uf4" Name="$ID/" Visible="true" AppliedObjectStyle="ObjectStyle/$ID/[None]" GradientFillHiliteAngle="0" GradientFillHiliteLength="0" LocalDisplaySetting="Default" GradientFillAngle="0" GradientFillLength="0" GradientFillStart="0 0" VerticalLayoutConstraints="FlexibleDimension FixedDimension FlexibleDimension" HorizontalLayoutConstraints="FlexibleDimension FixedDimension FlexibleDimension" OverriddenPageItemProps="" LastUpdatedInterfaceChangeCount="" TargetInterfaceChangeCount="" ParentInterfaceChangeCount="" ImageTypeName="$ID/JPEG" ImageRenderingIntent="UseColorSettings" EffectivePpi="300 300" ActualPpi="300 300" Space="$ID/#Links_RGB">
<Properties>
    <Profile type="string">$ID/None</Profile>
    <GraphicBounds Right="64.08" Left="0" Bottom="70.08" Top="0"/>
</Properties>
<TextWrapPreference TextWrapMode="None" TextWrapSide="BothSides" ApplyToMasterPageOnly="false" Inverse="false">
    <Properties>
        <TextWrapOffset Right="0" Left="0" Bottom="0" Top="0"/>
    </Properties>
    <ContourOption ContourPathName="$ID/" IncludeInsideEdges="false" ContourType="SameAsClipping"/>
</TextWrapPreference>
<Link Self="uf7" LinkResourceSize="0~6561" LinkImportTime="2012-09-03T15:23:30" LinkImportModificationTime="2012-05-22T15:25:15" LinkImportStamp="file 129821703152428740 25953" ExportPolicy="NoAutoExport" ImportPolicy="NoAutoImport" CanPackage="true" CanUnembed="true" CanEmbed="true" ShowInUI="true" LinkObjectModified="false" LinkResourceModified="false" LinkClientID="257" LinkClassID="35906" StoredState="Normal" LinkResourceFormat="$ID/JPEG" LinkResourceURI="file:D:/Pictures/hkp.jpg" AssetID="$ID/" AssetURL="$ID/"/>
<ClippingPathSettings IncludeInsideEdges="false" Index="-1" AppliedPathName="$ID/" InsetFrame="0" Tolerance="2" Threshold="25" UseHighResolutionImage="true" RestrictToFrame="false" InvertPath="false" ClippingType="None"/>
<ImageIOPreference AlphaChannelName="$ID/" AllowAutoEmbedding="true" ApplyPhotoshopClippingPath="true"/>
</Image>

要查找图像,您需要找到Link节点的子节点Image节点,并提取LinkResourceURI属性的值,该属性是图片。这是一个本地路径,因此您需要在IDML创作的同一台机器上完成所有这些操作。

要使IDML文档可在计算机之间移植,您需要使用InDesign中的“链接”面板嵌入图像。

答案 1 :(得分:1)

非常着名的IDML文件不包含链接图像的base-64编码图像数据,仅用于嵌入图像。对于链接图像,仅存储原始计算机上的物理位置。

嵌入图像位于“Spread_uXX.xml”文件内的标记<Image>中。此标记包含图像维度和一些其他元信息,以及在Base-64中列出CDATA的子标记<Contents>。请注意:每张图片可能有多个CDATA块。

嵌入图像的类型可能与原始图像相同或不同; Image标签应该在属性ImageTypeName中声明类型。如果文件格式不是您可以使用'为网络',您需要自己转换它。

我不使用IDMLlib,因此我无法对其示例样式发表评论。