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)