我一直在尝试使链接在 openTBS 生成的文档中起作用。到目前为止没有运气:(
- 我能做什么:通过一些技巧,我可以创建一个带有链接的模板,并通过我的变量更改链接标题和 href。
- 我不能做的:创建一个带有链接的块,用 MergeBlock 填充它并使其与我的 php 对象数组一起使用。
我完全迷路了,花了几天时间试图弄清楚如何做到这一点。这让我很烦恼,因为这似乎是 openTBS 可以自己处理的事情,没有问题。
我这是我的 php 代码:
<?
include_once('tbs/tbs_class.php');
include_once('tbs/plugins/tbs_plugin_opentbs_1.8.1/tbs_plugin_opentbs.php');
$TBS = new clsTinyButStrong('!-,-!');
//the special pattern is needed because
//word replaces [] brackets when put in link's href.
$TBS -> Plugin(TBS_INSTALL, OPENTBS_PLUGIN);
//some variables for mergeing with the template
$tmpl_headname='Sarah';
$tmpl_headlink='http://example.com/?user=sarah';
$tmpl_items = array(
array('title'=>'My title', 'url'=>'http://myurl.com/firstarticle'),
array('title'=>'My second title', 'url'=>'http://myurl.com/secondarticle'),
array('title'=>'My third title', 'url'=>'http://myurl.com/thirdarticle')
);
$TBS->LoadTemplate('sampledoc.docx');
$TBS->MergeBlock('item',$tmpl_items);
$TBS->Show(OPENTBS_DOWNLOAD, 'sample_filename_doc');
?>
我的Word模板:
This is your unique link, !-onload.tmpl_headname-! (points to: !- onload.tmpl_headlink-!)
!-item;block=begin;tbs:page-!
!-item.title-!
Link to the website (points to: !-item.url-!)
***
!-item;block=end;tbs:page-!
在我的 Word 模板中,链接指向!-item.url-!
,并且在其上运行 openTBS 后保持不变。问题是,在 Docx zip 存档中word/_rels/document.xml.rels˙
,它们看起来没有变化:
<Relationship TargetMode="External" Target="!-item.url-!" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" Id="rId8"/>
非常感谢任何帮助!:)
此外,对于那些想用 openTBS 更改链接 url(但不是在合并块模式下!)的人,我找到了一种解决方法:打开 document.xml.rels 作为模板,并在其上运行 openTBS:
$TBS->LoadTemplate('tbs/sampledoc.docx#word/_rels/document.xml.rels');
这个 hack 不适用于 mergeblock,因为 !-item.url-! 成为每个资源的目标,你无法分辨哪个块迭代是哪一个:(
编辑:
OpenTBS 生成带有rId
前缀:rId1
、rId2
等的 id。资源文件中的每个其他项目都与rId[x]
模式链接。运行 openTBS 后,我在 document.xml 中得到了这个 xml 代码,代表以下 Word 部分:
***
My second title
Link to the website
在“网站链接”位上有一个链接。...
<w:p w:rsidRDefault="00886D12" w:rsidP="00886D12">
<w:r>
<w:t xml:space="preserve">
***
</w:t>
</w:r>
<w:r>
<w:br/>
</w:r>
<w:r>
<w:t>
My second title
</w:t>
</w:r>
<w:r>
<w:br/>
</w:r>
<w:hyperlink r:id="rId7" w:history="1">
<w:r>
<w:rPr>
<w:rStyle w:val="Hyperlink"/>
</w:rPr>
<w:t xml:space="preserve">
Link to the website
</w:t>
</w:r>
</w:hyperlink>
</w:p>
...
document.xml.rels 文件如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId8" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable" Target="fontTable.xml"/>
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings" Target="settings.xml"/>
<Relationship Id="rId7" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" Target="!-item.url-!" TargetMode="External"/>
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml" Target="../customXml/item1.xml"/>
<Relationship Id="rId6" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes" Target="endnotes.xml"/>
<Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes" Target="footnotes.xml"/>
<Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings" Target="webSettings.xml"/>
<Relationship Id="rId9" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/>
</Relationships>
我也许可以使用放在 Target 属性中的特殊 openTBS 代码来复制超链接资源项,但是我也必须在 document.xml 上使用新的 rID。
谢谢你的帮助!