【发布时间】:2012-11-01 14:49:56
【问题描述】:
我正在尝试实现一个c# idml 到 html 的转换器。我设法生成了一个类似于 indesign 导出生成的单个平面 html 文件。
我想做的是生成与 indesign 视图尽可能相似的 html,例如 html idml 查看器。为此,我需要找到适合文本框架的文本,我可以提取故事文本内容,但我真的找不到将这些内容拆分为框架/页面的方法。
有什么方法可以实现吗?
【问题讨论】:
我正在尝试实现一个c# idml 到 html 的转换器。我设法生成了一个类似于 indesign 导出生成的单个平面 html 文件。
我想做的是生成与 indesign 视图尽可能相似的 html,例如 html idml 查看器。为此,我需要找到适合文本框架的文本,我可以提取故事文本内容,但我真的找不到将这些内容拆分为框架/页面的方法。
有什么方法可以实现吗?
【问题讨论】:
仅从故事中提取文本是不够的。文本的布局方式由Spread 文档中的TextFrames 控制。每个TextFrame 都有一个ParentStory 属性,显示它从哪个故事加载文本,每个框架都有决定布局的尺寸。对于无线程的文本框架(即一个故事 一个框架),这就是您所需要的。
对于线程框架,您需要使用PreviousTextFrame 和NextTextFrame 属性来创建链。 IDML 中没有任何内容可以告诉您在线程链中的每个帧中适合多少文本,您需要根据计算出的文本尺寸自己进行计算(或使用蛮力试错法)。
您可以在主 designmap.xml 中找到价差:
<idPkg:Spread src="Spreads/Spread_udd.xml" />
并且传播将包含一个或多个 TextFrame 节点:
<Spread Self="udd" ...>
<TextFrame Self="uf7" ParentStory="ue5" PreviousTextFrame="n" NextTextFrame="n" ContentType="TextType">...</>
...
</Spread>
这又会链接到特定的故事:
<Story Self="ue5" AppliedTOCStyle="n" TrackChanges="false" StoryTitle="$ID/" AppliedNamedGrid="n">...</>
(在此示例中,帧没有线程化,因此 'n' 值。
所有这些都在 IDML 文档中,您可以在此处与其他 InDesign 开发人员文档一起找到该文档:http://www.adobe.com/devnet/indesign/documentation.html
【讨论】:
Microsoft 和 Adobe 提出了一个名为 Regions 的新 css 模块,它允许您将 tekst 流式传输到多个容器中。请记住,您永远无法创建与 Indesign 文档完全相同的 html 页面。
http://www.w3.org/TR/css3-regions/
目前只有 IE10 和 webkit nightly 支持:http://caniuse.com/#feat=css-regions
【讨论】: