2012-11-15 21 views
1

我使用COM将动态创建的word docx转换为PDF。一切正常,但我们的c:\ windows \ temp \目录变得非常大(我们的C盘上的磁盘空间有限)。以下是我用来生成PDF的代码。有没有办法删除临时文件在文件关闭后被添加到系统的临时目录中?另外,doc单词转换为pdf之后,我们不再需要它(因此,删除tmp文件是否会破坏单词doc并不重要)。使用COM和Word删除系统tmp文件

/Word Doc to PDF using Com 
ini_set("com.allow_dcom","true"); 

try{ 
    $word = new com('word.application'); 
} 
catch (com_exception $e) 
{ 
    $nl = "<br />"; 
    echo $e->getMessage() . $nl; 
    echo $e->getCode() . $nl; 
    echo $e->getTraceAsString(); 
    echo $e->getFile() . " LINE: " . $e->getLine(); 
    $word->Quit(); 
    $word = null; 
    die; 

} 

$word->Visible = 0; //don't open word gui on server 
$word->DisplayAlerts = 0; //don't allow any alerts to open 
//open doc 
try{ 
    $doc = $word->Documents->Open(DOC_LOCATION . "temp_doc/" . $filename . ".docx"); 
} 
catch (com_exception $e) 
{ 
    $nl = "<br />"; 
    echo $e->getMessage() . $nl; 
    echo $e->getCode() . $nl; 
    echo $e->getFile() . " LINE: " . $e->getLine(); 
    $word->Quit(); 
    $word = null; 
    die; 
} 
try{ 
    $doc->ExportAsFixedFormat(DOC_LOCATION . "temp_pdf/" . $filename . ".pdf", 17, false, 0, 0, 0, 0, 7, true, true, 2, true, true, false); 

} 
catch (com_exception $e) 
{ 
    $nl = "<br />"; 
    echo $e->getMessage() . $nl; 
    echo $e->getCode() . $nl; 
    echo $e->getTraceAsString(); 
    echo $e->getFile() . " LINE: " . $e->getLine(); 
    $word->Quit(); 
    $word = null; 
    die; 
} 
$word->Quit(); 
$word = null; 

回答

0

不要说什么版本,但对于XP的,你可以用一个简单的批处理文件来删除\的Documents and Settings \用户\本地设置\ TEMP \的文件。示例:

C: 
cd \Documents and Settings\USER\Local Settings\Temp 
attrib -R -S -H *.* /S /D 
DEL /S /F /Q *.* 

相应地进行修改。

+0

感谢您的回复。 IT经理希望它在我们完成后尽快删除文件,并且我们无法清除整个临时目录(显然有些会话数据存储在那里) – Mike

+0

但是看起来您知道临时文件的名称文件($ doc-> ExportAsFixedFormat(DOC_LOCATION。“temp_pdf /”。$ filename。“.pdf”,...),为什么不用** unlink('TempFile')**; –

+0

删除它们? $ doc-> ExportAsFixedFormat()返回临时文件名或者其他东西?如果不是,那么所有这一行都会在我们命名为temp_pdf的目录中创建pdf(不会对tempfile执行任何操作)在你的语句中(unlink(' TempFile');你不需要定义'TempFile'吗? – Mike

相关问题