本文将介绍如何在PHP中调用 Windows Office 接口将 Word 或 Excel 转为PDF格式。

仅适用于 Windows 系统,如果是 Linux 可通过 Libreoffice 来实现。

配置 PHP 环境

首先开启 PHP 扩展 com_dotnet,编辑 php.ini 文件:

1
2
com.allow_dcom = true
extension=php_com_dotnet.dll

搜索 disable_classes,如果有 com 则移除。

重启 PHP。

Excel 转 PDF

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// 文件路径,函数 realpath 可获取。
$allsheets = 1; // 导出所有sheet or 当前sheet
$inpath = 'D:/abc.xlsx'; // 要转换的 XLSX 文件路径
$outpath = 'D:/abc.pdf'; // 转换后的 PDF 路径

try {
$excel = new \COM('Excel.Application') or die ("Error: Could not windows excel Object.");
$excel->Visible = 0;
$excel->Workbooks->Open($inpath) or die("ERROR: Unable to open $basename");

// 存在就删除
if (file_exists($outpath)) {
unlink($outpath);
}

if ($allsheets) {
$excel->ActiveWorkbook->ExportAsFixedFormat(0, $outpath, 0);
} else {
$excel->ActiveSheet->ExportAsFixedFormat(0, $outpath, 0);
}

$excel->Quit();
unset($excel);

return $outpath;
} catch (\Exception $ex) {
$excel->Quit();
return mb_convert_encoding($ex->getMessage(), 'UTF-8', 'GBK');
}

Word 转 PDF

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 文件路径
$inpath = 'D:/abc.docx'; // 要转换的 WORD 文件路径
$outpath = 'D:/abc.pdf'; // 转换后的 PDF 路径

try {
$word = new \COM('Word.Application') or die ("Error: Could not windows excel Object.");
$word->Visible = 0;
$word->DisplayAlerts = 0;
$word->Documents->Open($inpath) or die("ERROR: Unable to open $basename");

//存在就删除
if (file_exists($outpath)) {
unlink($outpath);
}

$word->ActiveDocument->ExportAsFixedFormat($outpath, 17);
$word->Quit();
unset($word);

return $outpath;
} catch (\Exception $ex) {
$word->Quit();
return mb_convert_encoding($ex->getMessage(), 'UTF-8', 'GBK');
}

重要提示