为啥 DITA Open Toolkit PDF 插件重命名图像 href 属性?

Posted

技术标签:

【中文标题】为啥 DITA Open Toolkit PDF 插件重命名图像 href 属性?【英文标题】:Why does DITA Open Toolkit PDF plugin rename image href attributes?为什么 DITA Open Toolkit PDF 插件重命名图像 href 属性? 【发布时间】:2020-07-06 13:27:09 【问题描述】:

如果这里没有足够的信息,我很抱歉。我通常不会像这样在网上寻求帮助。

我在 Windows 上使用 DITA Open Toolkit 3.4。我使用 Jarno(非常优秀和有用)的 PDF 插件生成器生成了一个名为“vcr2”的插件,然后进行了一些自定义。该插件使用 pdf2 插件作为基础。当我尝试使用 vcr2 插件时,我的图像无法正常工作。我已将问题追溯到图像的 href 属性中格式错误的图像文件名。

例如:

在我的源文件(DITA 任务)中,我的一张图片的标记如下所示:

<image href="MyRemindersChooseReminder.png"/>


如果我使用 pdf2 插件运行转换,图像可以正常工作。在 Temp 文件夹中合并的 stage1.xml 文件中,同一图像的 XML 如下所示:

<image class="- topic/image " href="df2d132af27436c59c5c8c4282e112d62bec8201.png" placement="inline" xtrc="image:1;10:66" xtrf="file:/V:/Vasont/Extract/t12340879-minimal/t12340879.xml"/>

处理成Topic.fo文件,如下所示:

<fo:external-graphic
 src="url('file:/V:/Vasont/Extract/t12340879-minimal/MyRemindersChooseReminder.png')"/>

一切正常,图像看起来也很好。

如果我通过我的 'vcr2' 插件运行相同的文件,它只是调用相同的 pdf2 插件并进行一些覆盖,所有图像都会损坏:

stage1.xml <image class="- topic/image " href="df2d132af27436c59c5c8c4282e112d62bec8201.png" placement="inline" xtrc="image:1;10:66" xtrf="file:/V:/Vasont/Extract/t12340879-minimal/t12340879.xml"/>

Topic.fo <fo:external-graphic
 src="url('file:/V:/Vasont/Extract/t12340879-minimal/df2d132af27436c59c5c8c4282e112d62bec8201.png')"
/>

随着我进一步追查,似乎在地图阅读器 Ant 任务的某个地方,这个文件名被更改为那个神秘的伪十六进制字符串。我认为稍后它应该被改回或解析为完整的 URI 或其他东西。

所以,问题分为两部分:为什么 Open Toolkit 会更改我的文件名,应该如何将它们改回来?

【问题讨论】:

【参考方案1】:

DITA-OT 的预处理使用哈希作为临时文件名,因为它允许代码不处理目录结构。这使得预处理可以在所谓的"map-first" mode 中工作,它首先处理所有 DITA 映射资源,然后才开始处理 DITA 主题和图像资源。

预处理有一个称为clean-preprocess的步骤,它可以重写临时文件名以匹配源资源文件名。但是,对于 PDF 输出禁用此重写操作,因为原始文件名不用于该输出类型中的任何内容。

【讨论】:

非常感谢您的回复。我对一件事感到困惑:您说原始文件名不用于 PDF 输出类型中的任何内容。怎么会这样?在“工作”PDF 示例中,生成的 .FO 文件恢复了原始文件名。在“损坏”的 PDF 示例中,文件名仍然是散列的,当然,具有这些名称的文件不存在,因此 Antenna House 无法找到它们以将它们包含在 PDF 中。 在之前的评论中回答我自己的问题:“原始文件名如何不用于 PDF 输出类型中的任何内容?”在预处理期间创建散列文件名时,散列和原始文件名存储在“.job”文件中。稍后,在 PDF2 插件的“topic.xsl”中的主题/图像模板中,哈希用于查找该“.job”文件中的文件名,并输出原始文件名而不是哈希。 (就我而言,由于 DITA 自定义,此步骤无法正常工作,我不得不稍微更改逻辑来修复它。)

以上是关于为啥 DITA Open Toolkit PDF 插件重命名图像 href 属性?的主要内容,如果未能解决你的问题,请参考以下文章

调整 Dita-OT 插件以输出 PDF 线框所有块实线边框

如何在通过dita-ot生成pdf时使用父topicref中的navtitle而不是child one

使用 DITA OT 和 FOP 生成的 PDF 中链接的替代文本

DITA OT 中的主题编号更简单?

将表格保存在 PDF 的单页中

OWT Server整体架构分析 [Open WebRTC Toolkit]