2013-08-06 31 views
1

我有一些用戶使用Microsoft Word生成的RTF文件。我需要能夠連接這些文件,並且結果文件應該仍然可以被libreoffice讀取。我正在使用libreoffice將結果文件轉換爲PDF文件。使用PHP withouth標題的Concatanate RTF文件

爲了連接兩個文件,我的應用程序刪除了第一個文件的最後一個字符和第一個其他文件。文件頭不會被刪除(我不是在談論頁頭)。

由於某些原因,libreoffice不喜歡由Microsoft Word插入的標頭。但它工作正常,如果我用寫字板打開這些文件並保存它們。

刪除這些頭文件的另一種方法是在將它們連接起來之前將這些文件轉換爲RTF文件。這樣我就可以轉換成PDF,但是當我將我的文件轉換爲RTF時,libreoffice會嚴重影響我的選項卡。

那麼我怎樣才能通過PHP刪除標題沒有搞亂標籤?或者你有另一種方法來達到相同的結果?

編輯:

概括地說,我必須能夠concanate這些文件和LibreOffice的可以打開它。我的標籤頁仍然必須在Microsoft Word中很好地顯示。

正如你所猜測的,用戶不想使用寫字板。我的客戶的IT部門必須遵守這一願望(辦公室政治)。

UPDATE:

我得先做到,因爲業務規則的合併。這些文件被合併,然後我的用戶可以使用Word對其進行修改(這裏沒有問題)。然後他們要求他們的老闆驗證它。如果老闆同意驗證,則RTF文件將成爲PDF文件。

更新2:

我的溶液的begenning。如果RTF文件以純文本或圖片開頭,則必須刪除所有內容,直到獲得\ pard。但是,如果您通過選項卡開始文件,這不起作用。

更新3:

如果你想支持選項卡也在,你,直到你得到\ PARD或\ trowd刪除evrything。一旦我得到一個工作代碼,我將發佈整個解決方案。只要你不需要顏色,並且你的所有文件都使用相同的字體(因爲我們不刪除第一個文件的RTF標頭),這樣就可以正常工作。

+0

您是否必須先進行合併,然後再轉換爲PDF?如果只是連接頁面,並且將單個RTF轉換爲PDF可以正常工作並且不會導致LibreOffice出現問題,那麼可以先執行該操作,然後使用類似['pdftk']的工具(http://www.pdflabs.com/docs/pdftk-man-page /)合併單個PDF文檔。 – Carsten

+0

我已更新我的帖子。我必須先進行合併,因爲業務規則允許用戶在連接後修改文件。一旦它被驗證,它就成爲PDF。 – Perello

回答

0

我成功構建了一個可靠的代碼,可以操縱使用Microsoft Word創建的RTF文件。只要你只需要文字,圖片和標籤,並且不需要花哨的東西作爲顏色,它就可以工作。顏色適用於文本,但旁邊......

 $content = ""; 

     //stristr Returns all of haystack starting from and including the first occurrence of needle to the end. 
     $tmp_pard = stristr($RTFstring, "\pard"); 
     //stristr fail to detect \trowd 
     $tmp_tab = stristr($RTFstring, "trowd"); 

     if($tmp_pard != "" || $tmp_tab != "") { 

      //We pick the longer string. Because we want the first occurence of \pard or \trowd 
      if(strlen($tmp_pard) > strlen($tmp_tab)) 
       // { is added so concatenation code still works. We just remove headers. 
       $content = "{" . substr($RTFstring,-strlen($tmp_pard)) ; 
      else 
       $content = "{" . "\\". substr($RTFstring,-strlen($tmp_tab)) ; 
     } else { 
      $content = $RTFstring; 
     } 

     return $content; 
1

如果與「純RTF」方法的侷限性回來咬你,你可以使用LibreOffice的轉換您的RTF文件,DOCX,然後使用工具合併docx文件。有這樣的.NET和Java工具(比如我們的MergeDocx產品);我不確定你會爲PHP找到什麼。

+0

RTF到DOCX轉換是否在libreoffice上運行良好?我嘗試了RTF到RTF和RTF到DOCX,然後是DOCX到RTF。在這兩種方式下,libreoffice與標籤混淆了。無論如何,我不能這樣。我們使用RTF是因爲它是純文本,所以我們可以輕鬆地在php中進行一些搜索和替換。在文件(已經合併)成爲PDF之前,我必須簽署它。所以它必須是RTF,而libreoffice在將某些東西轉換爲RTF方面做得並不好。 – Perello

+0

'純RTF'方法的侷限性不會回來咬我。至少,我的顧客不會要求選項卡中的顏色或這樣的花哨事物。這是一個政府機構,因此他們對文字,標籤和圖片感到滿意。他們甚至不會使用黑色以外的其他顏色作爲文本。 – Perello