如何使用 PHPExcel 将 xlsx 文件上的可打印区域保存为 PDF

How to save the Printable Area on an xlsx file to a PDF with PHPExcel

我如何将 excel sheet 上的可打印区域保存为 PDF?

如果我需要使用不同的库,那么我可以使用它,但我需要它尽可能接近从 excel 打印时的相同外观,我知道这很难一般。

dompdf 中唯一可用的打印选项是 paper size and orientation. Further, printable area is an excel-specific directive that does not affect export to other formats。将可打印区域视为专门的标记,仅此而已。

在这种情况下,最好的选择是在转换为 pdf 之前通过循环清空或隐藏可打印区域之外的所有单元格。

假设您在 Windows 服务器上工作,我将建议一种不同的方法:使用 PHP 中可用的 COM 或 DOTNET class 库 Windows(http://php.net/manual/en/book.com.php)。如果不是,请无视我的回答,因为它不起作用。

我的想法是使用本机 Excel 宏功能 select 打印区域并使用 built-in 导出为 PDF 功能。这样,单元格格式应该保持不变。因此,您的 .xlsw 成为一个 .xlsm 文件,将所需的 VBA 代码添加到 select 适当的范围(打印区域)并导出为 PDF。然后 COM 或 DOTNET class 库将用于实例化电子表格并访问公开的对象(包括宏)。如果您无法控制电子表格本身,您也许还可以通过 COM/DOTNET 自动化来驱动导出,而不使用宏。

  1. Xlsx 文件 - ZIP 包 (link)
  2. 有关文件 'xl/workbook.xml' 中包含的可打印区域的信息。使用 php ZipArchive class 及其 ZipArchive::getFromName 方法获取 'xl/workbook.xml' 的内容
  3. 包含可打印区域的元素是 。使用 PHP SimpleXMLElement class 及其方法 SimpleXMLElement::xpath
  4. 从该标签中提取信息
  5. 何时提取有关可打印区域的信息:
    • 复制 xlsx 文件
    • 提取名为 'xl/worksheets/sheet1'(或类似名称)的文件
    • 遍历'sheetData'部分的文件元素,删除不在可打印区域
    • 的单元格
    • 将修改后的 xml 压缩到 xlsx
    • 的副本
  6. 使用 PHPExcel 或其他库转换 xlsx 文件。