indesign/php-idml

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

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

dev-master 2018-02-25 19:30 UTC

This package is not auto-updated.

Last update: 2023-03-18 20:43:44 UTC


README

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

Packagist indesign/php-idml

安装

composer require indesign/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->getStorie("u12a");
$backingStory = $idml->getBackingStory();
// etc

通常,如果您想要Whatever,请使用 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许可(MIT)