gpt4 book ai didi

docx - 合并/修改 openTBS 中的超链接

转载 作者:行者123 更新时间:2023-12-04 16:36:10 27 4
gpt4 key购买 nike

我一直在尝试使链接在 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(但不是在合并块模式下!)更改链接网址的人,我找到了一个解决方法:
    打开 document.xml.rels 作为模板,并在其上运行 openTBS:
    $TBS->LoadTemplate('tbs/sampledoc.docx#word/_rels/document.xml.rels');

    这个 hack 不适用于 mergeblock,因为 !-item.url-!成为每个资源的目标,你无法分辨哪个块迭代:(

    编辑:

    OpenTBS 使用 rId 生成 ID前缀: rId1 , rId2等。资源文件中的所有其他项目都与 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。

    谢谢你的帮助!

    最佳答案

    这太难在评论中显示了。

    您可能需要使用 att参数:http://www.tinybutstrong.com/manual.php#html_field_prm

    类似的东西(未经测试):

    <Relationship TargetMode="External" Target="" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" Id="rId8">
    !-block=item;att=Target;item.url-!
    </Relationship>

    你可以玩弄 att=Relationship#Target而不是像我一样打开关系标签。像这样的东西(真的未经测试):
    <Relationship TargetMode="External" Target="" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" Id="rId8"/>
    !-block=item;att=Relationship#Target;item.url-!

    这是否允许块正确重复,以便您不会将块全部分组到单个 Target 属性中?

    您还需要为每个 rId 提供一个唯一的 ID。属性,很明显。您可能希望在此处遵循 OpenTBS 的示例并使用与 Word 不同的结构以避免冲突。类似 rId=mytbs1而不仅仅是 rId=1 (OpenTBS 使用 opentbs1 作为图片,但您也不想在那里发生冲突)。

    我相信 Skrol29 会阅读这篇文章,并会考虑更新 OpenTBS 来处理这个问题是否可能/合理。

    编辑:

    看到 XML 输出后,我最好的猜测是添加一个唯一的 rId,您想将其用于填充块的数组。就像是:
    $items = array(
    array('title' => 'My Title1', 'url' => 'http://my.url', 'rId' => 'myTBS1'),
    array('title' => 'My Title2', 'url' => 'http://my.url', 'rId' => 'myTBS2'),
    );

    然后,在您的模板中:
    !-item;block=begin;tbs:page-!
    !-item.title-!
    Link to the website
    ***
    !-item;block=end;tbs:page-!

    其中“链接到网站”有一个超链接,其内容是(类似于):
    !-block=item;item.url-!!-item.rId;att=rId-!

    然后在您的 rels模板:
    <Relationship TargetMode="External" Target="" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" Id="rId8">
    !-block=item;att=Target;item.url-!
    !-item.rId;att=rId-!
    </Relationship>

    只是一个保持 rId 链接的想​​法。我不确定我的语法是否正确,以及单个标签上的多个属性更改的规则是什么...希望 Skrol29 会提供更好的解决方案,如果我们在这里吠叫错误的树。

    关于docx - 合并/修改 openTBS 中的超链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19637390/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com