2

我将如何将 Excel 工作表上的可打印区域保存为 PDF?

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

4

3 回答 3

2

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

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

于 2017-01-30T01:25:22.767 回答
1

dompdf 中唯一可用的打印选项是纸张大小和方向。此外,可打印区域是一个特定于 excel 的指令,不会影响导出到其他格式。将可打印区域视为专门的标记,仅此而已。

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

于 2017-01-26T16:37:27.117 回答
1
  1. Xlsx 文件 - ZIP包(链接
  2. 有关文件'xl/workbook.xml'中包含的可打印区域的信息。使用 php ZipArchive 类及其ZipArchive::getFromName方法获取“xl/workbook.xml”的内容
  3. 包含可打印区域的元素是<definedName name='_xlnm.Print_Area'> </definedName>使用 PHP SimpleXMLElement类及其方法SimpleXMLElement::xpath从此标签中提取信息
  4. 提取有关可打印区域的信息时:
    • 复制 xlsx 文件
    • 提取名为“xl/worksheets/sheet1”(或类似文件)的文件
    • 循环遍历“sheetData”部分中的文件元素并删除不包含在可打印区域中的单元格
    • 将修改后的xml压缩到xlsx的副本
  5. 使用PHPExcel或其他库转换 xlsx 文件。
于 2017-01-31T08:08:16.557 回答