4

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"/>

どんな助けでも大歓迎です!:)


また、リンクの URL を openTBS で変更したい (マージブロック モードではない) 人のために、回避策を見つけました: document.xml.rels をテンプレートとして開き、openTBS を実行します。

$TBS->LoadTemplate('tbs/sampledoc.docx#word/_rels/document.xml.rels');

!-item.url-! のため、このハックはマージブロックでは機能しません。はすべてのリソースのターゲットになり、どのブロックの反復に対してどれがどれであるかはわかりません:(


編集:

OpenTBS は、 、 などのrIdプレフィックスを持つ ID を生成します。リソース ファイル内の他のすべての項目は、パターンでリンクされています。openTBS を実行した後、次の Word セクションを表すこの xml コードを document.xml に取得します。rId1rId2rId[x]

***
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 を使用する必要があります。

ご協力いただきありがとうございます!

4

2 に答える 2

0

これをコメントで表示するのは難しすぎます。

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 タグを開くのではなく、をいじることができます。このようなもの(実際にはテストされていません):

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

これにより、ブロックがすべて 1 つのターゲット属性にグループ化されないように、ブロックを適切に繰り返すことができますか?

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-!

「Web サイトへのリンク」にはハイパーリンクがあり、その内容は (次のようなものです):

!-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>

rIds のリンクを維持するための単なるアイデアです。構文が正しいかどうか、単一のタグの複数の属性の変更に関する規則が何であるかはわかりません...ここで間違ったツリーを吠えている場合、Skrol29 がより良い解決策を提供してくれることを願っています。

于 2013-10-28T15:57:29.503 に答える