1

好的,所以我对可以找到的 PHPWord 类有困难:http: //phpword.codeplex.com

奇怪的是,当我在“示例”文件中使用相同的代码时,它可以正常生成。当我不使用标题强制下载时,文件会很好地打开。尽管使用此代码和标题会导致它在下载时在 word 文件中抛出错误,说文件已损坏且无法打开,但随后它打开就好了。

public function export()
    {
            // Load PHPWORD Library
            $this->load->library('PHPWord');
            $sec = $this->phpword->createSection($secStyle);

            $header = $sec->createHeader();
            $header->addWatermark('images/CC_watermark.png', array('marginTop'=>1015, 'marginLeft'=>-80));

            $resultSelected = $this->input->post('cbox');
            foreach($resultSelected as $row)
            {
               $sec->addText($row);
               echo $row."<br>";
            }

            $fileName = "Plan_Generate_".date('Ymd').".docx";

            // Force Download
            $filePath = $fileName;

               $fileName = basename($filePath);
               // $fileSize = filesize($filePath);

               // Output headers.
               header("Cache-Control: private");
               header("Content-Type: application/stream");
               // header("Content-Length: ".$fileSize);
               header("Content-Disposition: attachment; filename=".$fileName);

               // Output file.
               // readfile ($filePath);
               // exit();


            // Save File
            // $fileName = "files/SomethingNew_".date("Ymd").".docx";
            $objWriter = PHPWord_IOFactory::createWriter($this->phpword, 'Word2007');
            $objWriter->save('php://output');
    }

这是我在尝试生成文件时使用的代码。我遇到的麻烦是它在尝试强制下载时抛出错误。谢谢你的帮助!如果您不完全理解问题,请提出问题。

更新:

这是我收到的错误图像。感谢您的快速回复,我实际上将尝试使用 Codeigniters 的方式进行操作,Tom。早晨。

单词错误

4

3 回答 3

2

您应该通过 CodeIgniters 函数设置标题,这可能会导致您出现问题:

CI 输出类

$this->output->set_header();

允许您手动设置服务器标头,输出类将在输出最终渲染显示时为您发送这些标头。例子:

$this->output->set_header("HTTP/1.0 200 OK");
$this->output->set_header("HTTP/1.1 200 OK");
$this->output->set_header('Last-Modified: '.gmdate('D, d M Y H:i:s', $last_update).' GMT');
$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate");
$this->output->set_header("Cache-Control: post-check=0, pre-check=0");
$this->output->set_header("Pragma: no-cache"); 

我的假设是您正在尝试以 PHP 方式更新标头,但您正在按照 CI 规则进行输出。

于 2011-08-31T16:07:26.753 回答
1

这已通过使用 CI 的$this->download->force_download().

并将数据通过ob_start()ob_get_contents()和传递给ob_end_clean()需要帮助的人。

于 2012-10-12T03:36:16.070 回答
0

你确定你不想

 header("Content-Type: application/octet-stream");

而不仅仅是流?实际错误是什么,是单词还是浏览器或 php 引发了错误?

此外,CodeIgniter 有一个下载帮助程序来发送文件......您可能想尝试一下。 http://codeigniter.com/user_guide/helpers/download_helper.html

于 2011-08-31T17:10:01.833 回答