2012-02-16 8 views
0

私はOpenTbs、http://www.tinybutstrong.com/plugins/opentbs/tbs_plugin_opentbs.htmlを使用しています。OpenTbsはhtmlタグをMS Wordタグに変換します

私はtemplate.docxを持っており、コンテンツにフィールドを交換することができる午前けど内容はhtmlコードを持っている場合には、テンプレートで作成した文書に表示されます。

First list <br /> Second Line 

は、私が使用しようとしました:これは私は、MSオフィスのタグを持つ私のhtmlタグを置き換えることが可能だろうと考え

$TBS->LoadTemplate('document.docx', OPENTBS_ALREADY_XML); 

が、それはだけではなく、ドキュメント内のMS Officeのタグを示した:

私はMS OfficeのXML同等にHTMLタグを変換するにはどうすればよい
First Line<w:br/> Second Line 

+0

私はここで私の髪を引っ張っていますが、これは非常に一般的なテキストです。[b。thetext]は、太字や斜体のようなMS Wordのスタイルに変えたいと思うHTMLスタイリングを持っています。私はMS Wordと同等ですが、テキストとしてテンプレートに出力されるコードとして機能させることはできません。あなたのお手伝いは本当に感謝しています。 –

答えて

1

あなたはDOCXへのHTMLのための変換機能を持っているので、あなたは、カスタムPHP関数とパラメータ「ます。OnFormat」を使用してOpenTBSでそれを実装することができます。

次の関数のみ改行変換:DOCXテンプレートの

function f_html2docx($FieldName, &$CurrVal) { 
    $CurrVal= str_replace('<br />', '<w:br/>', $CurrVal); 
} 

用途:

[b.thetext;onformat=f_html2docx] 

をDOCXにHTMLを変換について:他にフォーマットさのテキストを変換する

形作られたテキストは、しばしば悪夢である。そのため、整形されたデータの代わりに純粋なデータを格納するのが賢明です。整形が同じように構造化されていないため、DOCXへ

変換HTMLは本当の悪夢です。

は例えば、HTMLタグで私はこのように、ネストされたことがあります。

<i> hello <b> this is important </b> to know </i> 
DOCXで

このように、交差点として提示されます。

<w:r> 
    <w:rPr><w:b/></w:rPr> 
    <w:t>hello</w:t> 
    </w:r> 

    <w:r> 
    <w:rPr><w:b/><w:i/></w:rPr> 
    <w:t>this is important</w:t> 
    </w:r> 

    <w:r> 
    <w:rPr><w:i/></w:rPr> 
    <w:t>to know</w:t> 
    </w:r> 

私は変換タグのためのソリューションを持っていません今のところ改行以外。そのために残念。 そして、私はそれをコード化するのはかなり難しいと思います。

+0

私はこの解決策を見つけることになったのだろうか?私は似たようなものを探しています。 HTMLの太字、下線、斜体などの基本的な書式設定しか行いません。 – sluggerdog

+0

私はそのような解決策に取り組んでいない、私は他の解決策だけを報告している。 – Skrol29

+0

ありがとう、私はこれが動作することを知っているので、代わりにPDFを使用してこれを行うつもりだと思う。ありがとうございました – sluggerdog

1

私がopenTBSのすべての問題についてあなたの意見を聞いてくれてありがとうございました。あなたがその作成者であり、素晴らしいクラスであり、上記のことが、MS Word Format私は今あなたが上で指定したフォーマットを作り出すことができ、私が必要とする太字のイタリック体と下線を付けることができます。これはあなたに改善の基礎を与えることを願っています。

私は基本的に、スタイルの配列から削除する終了タグを見つけたときにスタイルの配列が必要になることに気付きました。 <w:r>を閉じて新しいタグを作成する必要があるタグが見つかるたびに、私はそれをテストしたところ、素晴らしく機能します。

class printClass { 
    private static $currentStyles = array();  

    public function __construct() {} 

    public function format($string) { 
      if($string !=""){ 
      return preg_replace_callback("#<b>|<u>|<i>|</b>|</u>|</i>#", 
             'printClass::replaceTags', 
             $string); 
     }else{ 
      return false; 
     } 
    } 


    private static function applyStyles() { 

     if(count(self::$currentStyles) > 0) { 

      foreach(self::$currentStyles as $value) { 

       if($value == "b") { 
        $styles .= "<w:b/>"; 
       } 

       if($value == "u") { 
        $styles .= "<w:u w:val=\"single\"/>"; 
       } 

       if($value == "i") { 
        $styles .= "<w:i/>"; 
       } 
      } 

      return "<w:rPr>" . $styles . "</w:rPr>"; 
     }else{ 
      return false; 
     } 
    } 



    private static function replaceTags($matches) { 

     if($matches[0] == "<b>") { 
      array_push(self::$currentStyles, "b"); 
     } 

     if($matches[0] == "<u>") { 
      array_push(self::$currentStyles, "u"); 
     } 

     if($matches[0] == "<i>") { 
      array_push(self::$currentStyles, "i"); 
     } 

     if($matches[0] == "</b>") { 
      self::$currentStyles = array_diff(self::$currentStyles, array("b")); 
     } 

     if($matches[0] == "</u>") { 
      self::$currentStyles = array_diff(self::$currentStyles, array("u")); 
     } 

     if($matches[0] == "</i>") { 
      self::$currentStyles = array_diff(self::$currentStyles, array("i")); 
     } 

     return "</w:t></w:r><w:r>" . self::applyStyles() . "<w:t xml:space=\"preserve\">"; 
    } 
} 
関連する問題