【问题标题】:php docx template modification [closed]php docx模板修改[关闭]
【发布时间】:2011-12-14 01:58:07
【问题描述】:

有没有人有编辑 docx 模板的经验。我的 php 管理区需要修改 docx 模板的功能,这个功能会被大量使用,所以内存很重要。

我发现 phpword 处于测试阶段,它可以工作但不是 100%

我一直在谷歌上搜索,找到了phpdocx,有人用过这个吗?可以给我一些反馈吗?

是否有任何其他解决方案,我需要的只是更改文本的能力,也许是 docx 模板中的图像。

我将准备为一项服务而不是大众支付费用,并且最好一次性支付许可证费用。

【问题讨论】:

    标签: php templates docx phpdocx


    【解决方案1】:

    PHP DOCX 模板

    http://www.phpclasses.org/package/8247-PHP-Create-Microsoft-Word-documents-from-templates.html

    include( 'docxtemplate.class.php' );
    
    $docx = new DOCXTemplate( 'invoice.tpl.php' );
    
    $docx->set(array(
        'org' => 'MyCompany LLC',
        'addr' => 'Green Street, 82'
    ));
    
    $docx->downloadAs('invoice.docx');
    

    编辑:修正了正确的方法名称 downloadAs() 而不是 download()

    【讨论】:

    • 嗨@Sergey Shuchkin。 saveAs 方法对我有用,但不是 downloadAs 方法。是否有任何已知问题或要求才能正常工作(浏览器等)?
    • $docx->downloadAs('invoice.docx');退出();
    【解决方案2】:
    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Employee Details</title>
      </head>
      <body>
        <form method="post" action="#">
          <input type="text" name="e_name" />        
          <input type="text" name="e_email" />
          <input type="submit" name="e_submit" />
        </form>
      </body>
      <?php
        if(isset($_POST["e_submit"]))
        {
            $name=(string) $_POST["e_name"];
            $email=(string) $_POST["e_email"];
    
            $source='template1.docx';
            $destination='template_'.$name.'.docx';
            $temp='template_'.$name.'.docx';
    
            copy($source,$temp);
    
            $zip=new ZipArchive;
    
            $fileXml='word/document.xml';
            if($zip->open($temp) === TRUE)
            {
                $old=$zip->getFromName($fileXml);
    
                $new=str_replace('{{Name}}',$name,$old);
                $new=str_replace('{{Email}}',$email,$new);
    
                $zip->deleteName($fileXml);
                $zip->addFromString($fileXml,$new);
                $zip->close();
    
                header("Content-Type: application/force-download");
                header('Content-Type: application/msword');
                header('Content-Disposition: attachment; filename="'.$destination.'"');
    
                readfile($destination);
                 unlink($destination);
               exit();
            }
        }
      ?>
    </html>
    

    【讨论】:

    • 请解释你的答案。
    • zuluk... Docx 文件基本上是 zip 文件。要理解,请将“.docx”更改为“.zip”并使用您喜欢的存档程序打开它。该用户的脚本试图做的是打开包含文本的存档部分。然后使用 PHP 用你真正想要的动态替换分隔符,然后再次存档为传播的 .docx 文件
    【解决方案3】:

    你应该试试OpenTBS

    它是一个使用模板技术构建 DOCX 的开源 PHP 库。

    没有临时目录,不需要额外的 exe。首先使用 Ms Office 创建您的 DOCX、XLSX、PPTX,(ODT、ODS、ODP 也支持,即 OpenOffice 文件)。然后您使用 OpenTBS 加载模板并使用模板引擎更改内容(简单,参见演示)。最后,您将结果保存在您需要的地方。它可以是一个新文件、一个下载流、一个 PHP 二进制字符串。

    OpenTBS 还可以更改文档中的图片图表

    【讨论】:

    • 我正要回来说我发现了你们的想法。该网站可以重新设计以使阅读文档更容易,但我想我终于找到了我所追求的,谢谢。
    • OpenTbs 做了我需要的,但我遇到了一个障碍,我将如何替换模板中具有特定名称、picture1.jpg、picture2.jpg 等的图像,而无需在之后插入 [] 标记他们每个人。我已经搜索过,这篇文章涉及到它,但只为开放式办公室文档类型找到了解决方案。 stackoverflow.com/questions/1780130/…
    • 您好,在文档中使用 [] 标签可以让您无需任何技术考虑即可更改图像。更不用说使用 Ms Office 时图片没有名称或没有可见的 id。 OpenTBS 让您可以直接在 Docx 中添加或删除内部文件。但尚未用于更改现有的内部文件。
    • 所以当您将图片添加到 ms word 中时,您会丢失文件名吗?那么在docx zip文件中picture1.jpg不会被称为picture1.jpg?
    • 没错。图片在里面重命名。
    【解决方案4】:

    Phpdocx 适合您的需求。在 docx 文档上使用基于 $variable$ 的非常简单的模板格式,因此使用该库非常容易。我已经使用了几个月,对我来说是一个很好的工具。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多