prometee / php-idml
此包已被放弃,不再维护。未建议替代包。
一个简单的类,用于处理Adobe InDesign IDML文件的文件管理。
dev-master
2018-01-12 15:54 UTC
Requires
- php: >=5.4.0
- ext-zip: *
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)
:给定一个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