在Joomla中生成MS Word文档

时间:2011-08-20 22:22:53

标签: joomla ms-word

我尝试完成的任务:

  1. 管理员创建带有占位符的MS Word文档,该占位符将填充Joomla数据库中的数据
  2. 管理员将MS Word文件上传到Joomla并将其与SQL语句连接
  3. 用户执行“生成MS Word”功能,并从数据库中获取填充数据的MS Word文档。
  4. Joomla是否有任何组件可以做到这一点? 我在使用Interop库的应用程序中完成了这个。

1 个答案:

答案 0 :(得分:0)

最近我使用phpdocx和pclzip库为joomla组件做了这个,其中 a * .docx文件是从模板文件生成的。

配置:

$params         = Object with form data;    // data from requeest
$template       = 'xml_file_name';          // jfrom xml file name and *.docx template file name
$pl             = '#';                      // place holder prefix & suffix: (example: #PLACEHOLDER#)
$date_placehold = '#DATE#';                 // will be replaced with current date
$date_formt     = 'F j, Y';                 // php date format
$template_path  = JPATH_COMPONENT_SITE .DS.'templates'.DS.$template.'.docx';
$temp_dir       = JPATH_ROOT.DS.'tmp'.DS.'phpdocx-temp-dir';    // + write access
$output_mime    = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
$filename       = $params->first_name .' - '. $params->second_name.'.docx';

// get names of all form fields of type 'list' from xml file
$lists      = (array) ComponentHelper::getJFormLists($template);
// get all field names from the xml file
$fields = (array) ComponentHelper::getJFormFieldsNames($template);

初始化变量:

$doc =& JFactory::getDocument();
$doc->setMimeEncoding($output_mime); 

// require phpdocx class
require_once(JPATH_COMPONENT_ADMINISTRATOR . DS . 'helpers'.DS.'pclzip.lib.php');
require_once(JPATH_COMPONENT_ADMINISTRATOR . DS . 'helpers'.DS.'phpdocx.php');

$phpdocx = new phpdocx($template_path, $temp_dir);

使用用户参数绑定表单字段:

foreach($params as $field => $value)
{
    if(array_key_exists($field,$lists) && is_array($lists[$field]) && array_key_exists($value, $lists[$field]) )
    {
        // if the field is JFormInput with type "list" its value is not important but its label
        $var = $lists[$field][$value];
    } else {
        $var = $value;
    }

    // use openxml carriage return on new lines
    if(strpos($var, "\n")) {
        $var = str_replace("\n", '<w:br/>', $var);
    }

    $fields[$field] = $var;
}

foreach申请表格字段:

foreach($fields as $field => $value)
{
        // replace placeholder with form value
        $phpdocx->assign($pl.strtoupper($field).$pl, $value);
}

// assign date for filled-in applications
if(!empty($date_placehold)
{
    $phpdocx->assign($date_placehold, date($date_formt));
}

输出文件:

$phpdocx->stream($filename, $output_mime);

return true;