我的一个项目需要将DOCX转换为PDF。我遇到了phpdocx项目,一切都转换得很好,但它将文件提供给浏览器,提示用户在转换后下载。我需要保留文件,只需读取MySQL存储的数据。有任何想法吗?
以下是我正在使用的代码:
$docx = new TransformDoc();
$docx ->setStrFile($tmpName);
$docx ->generatePDF();
使用Tim的修改会产生以下错误:
i
Warning: session_start() [function.session-start]:
Cannot send session cache limiter - headers already sent
(output started at /home/zbtech/public_html/DocCon/classes/TransformDoc.inc:1)
in /home/zbtech/public_html/scribpub.php on line 5
Unable to generate PDF file string. exception 'DOMPDF_Exception' with message
'Unknown image type: files/files_/tmp/phpNQFatu/media/word/.'
in /home/zbtech/public_html/DocCon/pdf/include/image_cache.cls.php:175 Stack trace:
#0 /home/zbtech/public_html/DocCon/pdf/include/image_frame_decorator.cls.php(88):
Image_Cache::resolve_url('files/files_/tm...', NULL, '', '')
#1 /home/zbtech/public_html/DocCon/pdf/include/frame_factory.cls.php(173): Image_Frame_Decorator-
>__construct(Object(Frame), Object(DOMPDF))
#2 /home/zbtech/public_html/DocCon/pdf/include/dompdf.cls.php(499): Frame_Factory::decorate_frame
(Object(Frame), Object(DOMPDF)) #3 /home/zbtech/public_html/DocCon/classes/TransformDoc.inc
(282): DOMPDF->render() #4 /home/zbtech/public_html/scribpub.php(68): TransformDoc->generatePDF
() #5 {main}
答案 0 :(得分:4)
这就是我要做的事。
phpdocx库执行此操作以将pdf流式传输到浏览器。
它位于第275行或第275行的类/ TransformDoc.inc中(截至2012年9月17日我下载的版本)
public function generatePDF()
{
$this->generateXHTML();
$this->cleanXHTML();
try {
$domPDF = new DOMPDF();
$domPDF->load_html($this->_xhtml);
$domPDF->render();
$fileName = $this->getFileName() . '.pdf';
$domPDF->stream($fileName);
}
catch (Exception $err) {
echo 'Unable to generate PDF file. ';
echo $err;
}
}
查看来源显示您可以编写自己的函数来执行类似的操作。 这是一个基于上述函数的未经测试的示例函数。
/**
* Convert DOCX to PDF, using dompdf. DOCX->XHTML->PDF and returns in a string
*
* @access public
*/
public function generatePDF()
{
$this->generateXHTML();
$this->cleanXHTML();
try {
$domPDF = new DOMPDF();
$domPDF->load_html($this->_xhtml);
$domPDF->render();
$out = $domPDF->output();
}
catch (Exception $err) {
echo 'Unable to generate PDF file string. ';
echo $err;
}
return $out;
}
答案 1 :(得分:2)
如果您在PHP Docx的文件中搜索“未知图像类型:”,您可以在pdf / include / image_cache.cls.php中找到它。
// line 81
static function resolve_url($url, $proto, $host, $base_path) {
...
// line 168
$resolved_url = build_url($proto, $host, $base_path, $url);
if ($DEBUGPNG) print 'build_url('.$proto.','.$host.','.$base_path.','.$url.')('.$resolved_url.')';
if ( !preg_match("/.*\.(\w+)/",$url,$match) ) {
//debugpng
if ($DEBUGPNG) print '[resolve_url exception '.$url.']';
throw new DOMPDF_Exception("Unknown image type: $url.");
}
....
代码抛出此错误,因为它无法在网址上找到扩展来猜测图像类型。我不知道为什么使用 - >输出方法而不是原始代码的新代码会发生这种情况 - 您认为无论我们使用哪种方式,生成pdf都会有效。
现在有两个选择:注释掉(或删除)上面引用的抛出新DOMPDF_Exception行,或者使用原始函数的输出缓冲。
答案 2 :(得分:0)
实现此目的的一个明确方法是编辑提供的文件:
/ phpdocx / examples / easy / create PDF.php
public function generatePDF($outputFileName)
{
$this->generateXHTML();
$this->cleanXHTML();
try {
$domPDF = new DOMPDF();
$domPDF->load_html($this->_xhtml);
$domPDF->render();
//
// ADD THIS: (dont forget the outputFileName method argument)
//
$handler = fopen($outputFileName,'w');
fwrite($handler, $domPDF->output());
fclose($handler);
}
catch (Exception $err) {
echo 'Unable to generate PDF file string. ';
echo $err;
}
return $out;
}