indesign / php-idml
此包已被废弃,不再维护。未建议替代包。
一个简单的类,用于处理Adobe InDesign IDML文件的文件管理。
dev-master
2018-02-25 19:30 UTC
Requires
- php: >=5.4.0
- ext-zip: *
This package is not auto-updated.
Last update: 2023-03-18 20:43:44 UTC
README
一个简单的类,用于处理Adobe InDesign IDML文件的文件管理。跟踪一个.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):给定一个CharacterStyleRange或ParagraphStyleRange元素,此方法将返回来自Styles.xml文件的关联的CharacterStyle或ParagraphStyle节点。getStyleAttribute($node, $attr):给定一个CharacterStyleRange或ParagraphStyleRange节点和一个属性的名称,此方法将尽可能通过检查节点、其应用样式节点以及其父节点及其父节点的应用样式节点(如果适用)来返回该属性的值。getStyleProperty($node, $prop):与getStyleAttribute()相同,但用于属性而不是属性。getMarkupTag($node):获取与给定元素(DOMNode)或祖先相关的标签。它从$node向上搜索每个元素,并返回它找到的第一个标签。这种逻辑可能与IDML中标签的工作方式不完全一致;它满足我的项目需求,但可能不适合您。它返回的标签是经过urldecode()解码的。saveAll($zip_file_path):保存IDML中的所有文件。有单独的保存方法用于保存不同的部分,但为什么要麻烦呢?只需使用这个方法。
其他一切您需要自己解决。
许可
MIT许可(MIT)