prometee/php-idml

此包已被放弃,不再维护。未建议替代包。

一个简单的类,用于处理Adobe InDesign IDML文件的文件管理。

dev-master 2018-01-12 15:54 UTC

This package is auto-updated.

Last update: 2020-03-27 09:29:57 UTC


README

一个简单的类,用于处理Adobe InDesign IDML文件的文件管理。跟踪一个.idml包内所有单个文件是一项繁琐的工作。这可以帮您稍微简化一些。(一点。)

安装

composer require prometee/php-idml    

用法

实例化对象

require __DIR__.'/../vendor/autoload.php';
$idml = new \IDML\Package();
$idml->setZip("filename.idml")
$idml->load();

这将解压缩filename.idml到名为.filename.idml的目录。当对象被垃圾回收时,此目录将被删除(请参阅__destruct()方法)。或者,如果您保持IDML文件未解压存储,也可以将目录传递给构造函数

require __DIR__.'/../vendor/autoload.php';
$idml = new \IDML\Package();
$idml->setDirectory("/path/to/idml/");
$idml->load();

此目录在对象销毁时不会被删除。(虽然这不是一个典型的用例,但这是我正在工作的项目中存储数据的方式。)

IDML\Package对象本质上是所有内部文件的DOMDocument对象的文件管理器/服务器。这就是这个类所做的大部分工作。

$spreads = $idml->getSpreads();
$storyu12a = $idml->getStory("u12a");
$backingStory = $idml->getBackingStory();
// etc

通常,如果您想获取任何内容,请使用getWhatever()。您可能不需要使用任何设置器,但如果您想做一些奇怪的事情,它们都在那里。注意getSpread()是一个便利方法,它获取第一个版面,假设只有一个版面。这适用于这个类诞生的项目,但可能不适用于您的项目。此方法也用于addElementToSpread()方法,如果未显式提供版面。请谨慎使用。

著名方法

这些只是项目中特定版本的这个类中存在的最通用的方法。我没有投入任何努力来使其成为一个通用的类。

  • getLayers($selfsOnly, $visibleOnly):从IDML的designmap.xml返回一个层数组。它可以返回层元素(DOMNodes)或层的自我属性(例如“u12a”)。$visibleOnly标志确定是否应包括不可见层。
  • getElementBySelfAttribute($self):返回从任何文件中标识为$self的元素。所以如果您正在寻找<Rectangle Self="u12a">但不知道它在版面还是故事中,请使用此方法。如果失败则抛出异常,但我无法想象您会通过使用任意的自我属性来查找元素。如果您这样做,请将此调用包装在try/catch块中。
  • addStoryToDesignMap($val):如果您已创建一个新的故事,这是一个快速方法,可以将故事添加到包中,并将其放入designmap.xml中,以便InDesign可以找到它。$val需要是DOMDocument
  • getAppliedStyle($node):给定一个CharacterStyleRangeParagraphStyleRange元素,此方法将返回从Styles.xml文件中关联的CharacterStyleParagraphStyle节点。
  • getStyleAttribute($node, $attr):给定一个CharacterStyleRangeParagraphStyleRange节点和属性的名称,此方法将通过检查节点、其应用样式节点及其父节点和父节点应用样式节点(如果适用)尽可能详细地返回该属性的值。
  • getStyleProperty($node, $prop):与getStyleAttribute()相同,但用于属性而不是属性。
  • getMarkupTag($node):获取与给定元素(DOMNode)或其祖先关联的标签。它从$node开始向上搜索,并返回找到的第一个标签。这种逻辑可能与IDML中标签的预期工作方式不完全一致;它为我项目所需的功能服务,但可能不适合您。返回的标签经过urldecode()解码。
  • saveAll($zip_file_path):保存IDML中的所有文件。有针对保存不同部分的个别保存方法,但为什么麻烦呢?只需使用这个方法。

其他所有内容您将不得不自己解决。

许可

MIT