1

我有一些用户使用 Microsoft Word 生成的 RTF 文件。我需要能够连接这些文件,并且 libreoffice 应该仍然可以读取结果文件。我正在使用 libreoffice 将结果文件转换为 PDF 文件。

为了连接两个文件,我的应用程序删除了第一个文件的最后一个字符和另一个文件的第一个字符。文件标题没有被删除(我不是在谈论页眉)。

出于某种原因,libreoffice 不喜欢 Microsoft Word 插入的标题。但是如果我用写字板打开这些文件并保存它们,它就可以正常工作。

删除这些标题的另一种方法是在连接它们之前将这些文件转换为 RTF。这样我可以转换为 PDF,但是当我将文件转换为 RTF 时,libreoffice 会严重混淆我的选项卡。

那么如何通过 PHP 删除标题而不弄乱标签呢?还是您有其他方法可以达到相同的结果?

编辑 :

简而言之,我必须能够合并这些文件并且 libreoffice 可以打开它。而且我的标签仍然必须在 Microsoft Word 中很好地显示。

您可以猜到,用户不想使用写字板。我客户的 IT 部门必须遵守这个愿望(办公室政治)。

更新 :

由于业务规则,我必须先进行合并。文件被合并,然后我的用户可以使用 Word 修改它(这里没有问题)。然后他们要求他们的老板进行验证。如果老板同意验证,则 RTF 文件变成 PDF 文件。

更新 2:

我有一个解决方案的开始。如果 RTF 文件以纯文本或图片开头,则必须删除所有内容,直到获得 \pard。但是,如果您以选项卡开头文件,这将不起作用。

更新 3:

如果你也想支持 tab,你必须删除所有的东西,直到你得到 \pard 或 \trowd。一旦我得到一个工作代码,我将发布完整的解决方案。只要您不需要颜色并且您的所有文件都使用相同的字体(因为我们不删除第一个文件的 RTF 标题),这将正常工作。

4

2 回答 2

1

如果“纯 RTF”方法的限制再次困扰您,您可以使用 LibreOffice 将您的 RTF 文件转换为 docx,然后使用工具合并 docx 文件。

.NET 和 Java 都有这样的工具(例如我们的 MergeDocx 产品);我不确定你会为 PHP 找到什么。

于 2013-08-08T03:40:27.020 回答
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;
于 2013-08-07T09:30:21.557 回答