冰蓝科技
|
028-81705109
|
|
微信扫一扫
|

Spire.Cloud 纯前端文档控件

PDF 文档通常会使用多种字体,用来设计排版或者突出关键信息等。但有时,我们需要获取或者替换这些在文件中使用的字体。获取字体可以让您查看字体的详细信息,如字体名称、大小、类型和样式,这在保持设计一致性或遵循特定标准时尤为重要。另一方面,替换字体有助于解决兼容性问题,特别是在原始字体在某些设备或软件上不被支持的情况下。本文将介绍如何使用 Spire.PDF for Python 在 Python 中获取和替换 PDF 文件中使用的字体。

安装 Spire.PDF for Python

本教程需要 Spire.PDF for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows 中。

pip install Spire.PDF

如果您不确定如何安装,请参考此教程: 如何在 Windows 中安装 Spire.PDF for Python

Python 获取在 PDF 中使用的字体

Spire.PDF for Python 提供了 PdfDocument.UsedFonts 属性,用于检索 PDF 中使用的所有字体的列表。通过遍历该列表,您可以轻松访问详细的字体信息,使用 PdfUsedFont.Name、PdfUsedFont.Size、PdfUsedFont.Type 和 PdfUsedFont.Style 属性,您可以获取到诸如字体名称、大小、类型和样式信息。具体步骤如下。

  • Python
from spire.pdf.common import *
from spire.pdf import *
 
# 创建一个 PdfDocument 类的对象
pdf = PdfDocument()
# 加载 PDF 文档
pdf.LoadFromFile("/示例文本.pdf")
 
# 获取文档中使用的字体列表
usedFonts = pdf.UsedFonts
 
# 创建一个文本文件以保存提取的字体信息
with open("/字体信息.txt", "w") as file:
    # 遍历字体列表
    for font in usedFonts:
        # 获取每个字体的信息,如字体名称、大小、类型和样式
        font_info = f"Name: {font.Name}, Size: {font.Size}, Type: {font.Type}, Style: {font.Style}\n"
        file.write(font_info)
 
pdf.Close()

Python 获取 PDF 中使用的字体信息

Python 替换在 PDF 中使用的字体

您可以通过 PdfUsedFont.Replace() 方法将 PDF 中所使用的字体替换成自己所需的字体,方法可以参考下面的详细步骤解析。

  • Python
from spire.pdf.common import *
from spire.pdf import *
 
# 创建一个 PdfDocument 类的对象
pdf = PdfDocument()
# 加载一个 PDF 文件
pdf.LoadFromFile("/示例文本.pdf")
 
# 获取文档中使用的字体列表
usedFonts = pdf.UsedFonts
 
# 创建一个新的字体
newFont = PdfTrueTypeFont("Arial", 13.0, PdfFontStyle.Italic, True)
 
# 遍历字体列表
for font in usedFonts:
    # 用新字体替换每个字体
    font.Replace(newFont)
 
# 将结果文档保存为 PDF
pdf.SaveToFile("/替换字体.pdf")
pdf.Close()

申请临时 License

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。

二维码作为一种高效、便捷的信息载体,在支付、物流、广告等行业中扮演着关键角色。随着二维码在日常生活中广泛应用,如何高效地生成和识别二维码成为了一个重要的技术需求。Python 作为一种灵活的编程语言,是处理二维码生成与识别的理想选择。通过Python,开发者能够轻松实现二维码的自动生成和扫描识别,从而提高工作效率,优化用户体验,满足各种应用场景的需求。本文将介绍如何使用 Spire.Barcode for Python 在 Python 项目中生成与识别二维码。

安装 Spire.Barcode for Python

本教程需要 Spire.Barcode for Python,您可以下载 Spire.Barocde for Python,或通过以下 pip 命令轻松安装:

pip install spire.barcode

用 Python 生成二维码

通过 Spire.Barcode for Python,开发者可以利用 BarcodeSettings 类定制二维码的生成参数。此功能支持设定条码类型、编码内容、颜色方案、边距大小以及图像的水平和垂直分辨率等多项配置。完成设置后,只需实例化 BarcodeGenerator 类,并调用其 GenerateImage() 方法,即可轻松生成所需的条形码图像。

以下是详细操作步骤:

  • Python
from spire.barcode import *

# 应用许可证密钥
License.SetLicenseKey("license key")

# 创建一个 BarcodeSettings 对象
barcodeSettings = BarcodeSettings()

# 设置条码类型为二维码
barcodeSettings.Type = BarCodeType.QRCode

# 设置二维码的数据
barcodeSettings.Data2D = "Hello, World"

# 设置边距
barcodeSettings.LeftMargin = 0.2
barcodeSettings.RightMargin = 0.2
barcodeSettings.TopMargin = 0.2
barcodeSettings.BottomMargin = 0.2

# 设置水平分辨率
barcodeSettings.DpiX = 500

# 设置垂直分辨率
barcodeSettings.DpiY = 500

# 设置错误校正级别
barcodeSettings.QRCodeECL = QRCodeECL.M

# 不在二维码上显示文本
barcodeSettings.ShowText = False

# 在二维码中心添加一个logo
barcodeSettings.SetQRCodeLogoImage("G:/Documents/Image.jpg")

# 使用指定的设置创建 BarCodeGenerator 实例
barCodeGenerator = BarCodeGenerator(barcodeSettings)

# 生成条形码图像
image = barCodeGenerator.GenerateImage()

# 保存二维码图像
with open("output/QRCode.png", "wb") as fp:
    fp.write(image)

用 Python 生成二维码

用 Python 识别二维码

Spire.Barcode for Python 还配备了 BarcodeScanner 类,用于从二维码等条码图像中识别内容。该类提供了多种方法来高效提取条形码中的信息:

下面是使用 BarcodeScanner 类识别二维码的代码示例:

  • Python
from spire.barcode import *

# 应用许可证密钥
License.SetLicenseKey("license key")

# 扫描包含一个条码的图像文件
result = BarcodeScanner.ScanOneFile("output/QRCode.png")

# 扫描包含多个条码的图像文件
# results = BarcodeScanner.ScanFile("output/QRCode.png")

# 打印结果
print(result)

用 Python 识别二维码

申请临时 License

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。

Spire.Presentation for Java 10.1.3 现已正式发布。最新版本增强了幻灯片到图片的转换功能。此外,本次更新还修复了一些已知问题,例如合并 PPTX 文档时,结果文档打开报修复的问题。更多详情请查阅以下内容。

问题修复:


获取 Spire.Presentation for Java 10.1.3 请点击:

https://www.e-iceblue.cn/Downloads/Spire-Presentation-JAVA.html

在 PDF 文档中添加页码增强了其组织性和可读性,使读者更容易浏览内容。不管是报告、操作手册还是电子书,页码都能为文档增添专业感,并帮助保持信息流的连贯性。这个过程涉及确定页码在页脚或页眉中的位置、对齐方式和样式。

本文将介绍如何使用 Spire.PDF for Python 在 PDF 文档的页脚添加页码。

安装 Spire.PDF for Python

本教程需要 Spire.PDF for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows 中。

pip install Spire.PDF

如果您不确定如何安装,请参考此教程: 如何在 Windows 中安装 Spire.PDF for Python。

PDF 中的坐标系

在使用 Spire.PDF for Python 修改 PDF 文档时,坐标系的原点位于页面的左上角。x 轴向右延伸,y 轴向下延伸。

页码通常位于页眉或页脚。因此,在确定页码位置时,需要考虑页面的大小和页边距。

PDF 坐标系

创建页码的类和方法

Spire.PDF for Python 提供了 PdfPageNumberField 和 PdfPageCountField 类,用以获取当前页面的页码和 PDF 文档的总页数。它们可以合并成一个 PdfCompositeField,将输出格式化为 "Page X of Y",其中 X 表示当前页码,Y 表示总页数。

要将 PdfCompositeField 定位到页面上,可以使用 Location 属性,并通过 Draw() 方法渲染它。

在 PDF 页脚添加左对齐的页码

要在页脚添加左对齐的页码,需要考虑左侧和底部的页面边距以及页面的高度。例如,可以使用坐标(LeftMargin, PageHeight - BottomMargin + SmallNumber)。这样可以确保页码与文本的左侧对齐,同时与内容和页面边缘保持适当的距离。

以下是在 PDF 页脚中添加左对齐页码的步骤:

  • Python
from spire.pdf.common import *
from spire.pdf import *
 
# 创建一个 PdfDocument 对象
doc = PdfDocument()
 
# 加载一个 PDF 文件
doc.LoadFromFile("/示例文档.pdf")
 
# 创建字体和画笔
font = PdfTrueTypeFont("Times New Roman", 12.0, PdfFontStyle.Regular, True)
brush = PdfBrushes.get_Black()
pen = PdfPen(brush, 1.0)
 
# 创建一个 PdfPageNumberField 对象和一个 PdfPageCountField 对象
pageNumberField = PdfPageNumberField()
pageCountField = PdfPageCountField()

#  创建一个 PdfCompositeField 对象,将页码字段和页数字段合并为一个字符串
compositeField = PdfCompositeField(font, brush, "Page {0} of {1}", [pageNumberField, pageCountField])
 
# 获取页面尺寸
pageSize = doc.Pages.get_Item(0).Size

# 设置页边距
leftMargin = 54.0
rightMargin = 54.0
bottomMargin = 72.0

# 设置组合字段的位置
compositeField.Location = PointF(leftMargin, pageSize.Height - bottomMargin + 18.0)

# 遍历文档内的所有页面
for i in range(doc.Pages.Count):
    # 获取当前页面
    page = doc.Pages.get_Item(i)
 
    # 在页面的指定位置画一条线
    page.Canvas.DrawLine(pen, leftMargin, pageSize.Height - bottomMargin + 15.0, pageSize.Width - rightMargin, pageSize.Height - bottomMargin + 15.0)
 
    # 在页面上绘制组合字段
    compositeField.Draw(page.Canvas, 0.0, 0.0)
 
# 保存修改后的 PDF 文档
doc.SaveToFile("/左对齐页码.pdf")
doc.Dispose()

Python 在 PDF 中添加左对齐页码

在 PDF 页脚添加居中对齐的页码

要将页码定位在页脚的中央,首先需要测量页码本身的宽度。得到这个宽度后,可以通过公式 (PageWidth - PageNumberWidth) / 2 计算合适的 X 坐标。这确保了页码在页脚内水平居中。

将页码居中对齐添加到 PDF 页脚的步骤如下:

  • Python
from spire.pdf.common import *
from spire.pdf import *
 
# 创建一个 PdfDocument 对象
doc = PdfDocument()
 
# 加载一个 PDF 文件
doc.LoadFromFile("/示例文档.pdf")
 
# 创建字体和画笔
font = PdfTrueTypeFont("Times New Roman", 12.0, PdfFontStyle.Regular, True)
brush = PdfBrushes.get_Black()
pen = PdfPen(brush, 1.0)
 
# 创建一个 PdfPageNumberField 对象和一个 PdfPageCountField 对象
pageNumberField = PdfPageNumberField()
pageCountField = PdfPageCountField()

# 创建一个 PdfCompositeField 对象,将页码字段和页数字段合并为一个字符串
compositeField = PdfCompositeField(font, brush, "Page {0} of {1}", [pageNumberField, pageCountField])
 
# 取页面尺寸
pageSize = doc.Pages.get_Item(0).Size
 
# 设置页边距
leftMargin = 54.0
rightMargin = 54.0
bottomMargin = 72.0
 
# 遍历文档内的所有页面
for i in range(doc.Pages.Count):
 
    # 获取当前页面
    page = doc.Pages.get_Item(i)
 
    # 获取页面大小
    pageSize = doc.Pages[i].Size
 
    # 在指定位置绘制一条线
    page.Canvas.DrawLine(pen, leftMargin, pageSize.Height - bottomMargin + 15.0, pageSize.Width - rightMargin, pageSize.Height - bottomMargin + 15.0)
 
    # 获取页码的字符串尺寸
    pageNumberSize = font.MeasureString("Page {} of {}".format(i + 1, doc.Pages.Count))
 
    # 设置组合字段的位置
    compositeField.Location = PointF((pageSize.Width - pageNumberSize.Width)/2, pageSize.Height - bottomMargin + 18.0)
 
    # 在页面上绘制组合字段
    compositeField.Draw(page.Canvas, 0.0, 0.0)
 
# 将结果保存到 PDF 文件中
doc.SaveToFile("/居中页码.pdf")
doc.Dispose()

Python 在 PDF 中添加居中对齐页码

在 PDF 页脚添加右对齐的页码

要将页码右对齐添加到页脚,首先测量页码的宽度。然后,使用公式 PageWidth - PageNumberWidth - RightMargin 计算 X 坐标。这确保了页码与文本的右侧对齐。

将页码右对齐添加到 PDF 页脚的步骤如下:

  • Python
from spire.pdf.common import *
from spire.pdf import *
 
# 创建一个 PdfDocument 对象
doc = PdfDocument()
 
# 加载一个 PDF 文件
doc.LoadFromFile("/示例文档.pdf")
 
# 创建字体和画笔
font = PdfTrueTypeFont("Times New Roman", 12.0, PdfFontStyle.Regular, True)
brush = PdfBrushes.get_Black()
pen = PdfPen(brush, 1.0)
 
# 创建一个 PdfPageNumberField 对象和一个 PdfPageCountField 对象
pageNumberField = PdfPageNumberField()
pageCountField = PdfPageCountField()

#  创建一个 PdfCompositeField 对象,将页码字段和页数字段合并为一个字符串
compositeField = PdfCompositeField(font, brush, "Page {0} of {1}", [pageNumberField, pageCountField])
 
# 获取页面尺寸
pageSize = doc.Pages.get_Item(0).Size
 
# 设置页边距
leftMargin = 54.0
rightMargin = 54.0
bottomMargin = 72.0
 
# 设置组合字段的位置
compositeField.Location = PointF(leftMargin, pageSize.Height - bottomMargin + 18.0)
 
# 遍历文档的所有页面
for i in range(doc.Pages.Count):
 
    # 获取当前页面
    page = doc.Pages.get_Item(i)
 
    # 获取该页面的大小
    pageSize = doc.Pages[i].Size
 
    # 在指定位置绘制一条线
    page.Canvas.DrawLine(pen, leftMargin, pageSize.Height - bottomMargin + 15.0, pageSize.Width - rightMargin, pageSize.Height - bottomMargin + 15.0)
 
    # 测量页码字段的大小
    pageNumberSize = font.MeasureString("Page {} of {}".format(i + 1, doc.Pages.Count))
 
    # 设置组合字段的位置
    compositeField.Location = PointF(pageSize.Width - pageNumberSize.Width - rightMargin, pageSize.Height - bottomMargin + 18.0)
 
    # 页面上绘制组合字段
    compositeField.Draw(page.Canvas, 0.0, 0.0)
 
# 保存修改后的 PDF 文件
doc.SaveToFile("/右对齐页码.pdf")
doc.Dispose()*

Python 在 PDF 中添加右对齐页码

申请临时 License

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。

Spire.Doc 13.1.4 已发布。本次更新新增支持判断和修改图片/形状的超链接。此外,该版本还修复了一些已知问题,如获取段落的项目编号不正确的问题。详情请阅读以下内容。

新功能:

问题修复:


获取 Spire.Doc 13.1.4,请点击:

https://www.e-iceblue.cn/Downloads/Spire-Doc-NET.html

Spire.XLS 15.1.3 现已发布。该版本支持多种新函数,包括 CSCH、RANDARRAY、COTH、SEQUENCE、EXPAND、CHOOSECOLS、CHOOSEROWS 和 DROP。此外,它还修复了一些在将 XLSM 转换为 PDF、Excel 转换为 PDF、计算公式值和设置选项卡颜色时出现的问题。新功能及问题修复详情如下。

新功能:

问题修复:


下载 Spire.XLS 15.1.3,请点击:

https://www.e-iceblue.cn/Downloads/Spire-XLS-NET.html

Spire.Presentation 10.1.1 现已正式发布。最新版本支持获取嵌入 OLE 对象的文件名。此外,本次更新还成功修复了一些已知问题,例如加载 PPTX 文档程序抛 "未将对象引用设置到对象的实例" 异常的问题。详情请查阅以下内容。

新功能:

问题修复:


获取 Spire.Presentation 10.1.1,请点击:

https://www.e-iceblue.cn/Downloads/Spire-Presentation-NET.html

Spire.Presentation for Java 10.1.2 已发布。本次更新增强了幻灯片到图片的转换功能。详情请阅读以下内容。

问题修复:


获取 Spire.Presentation for Java 10.1.2 请点击:

https://www.e-iceblue.cn/Downloads/Spire-Presentation-JAVA.html

在日常办公和数据处理过程中,Excel 文件因其强大的数据存储、分析和可视化功能而被广泛使用。然而,在共享或归档时,Excel 格式可能因设备、版本或平台的不同而导致文件内容显示不一致。因此,将 Excel 转换为 PDF 格式成为一种理想的选择。PDF 以其稳定性和跨平台的兼容性,能够确保文件内容在任何设备上都保持一致,且易于打印和分享。此外,PDF 文件还支持加密和数字签名,进一步增强了文档的安全性和可靠性。这篇文章将介绍如何使用 Spire.XLS for JavaScript 在 React 中将 Excel 文档转换为 PDF 格式。

安装 Spire.XLS for JavaScript

要在 React 应用中实现 Excel 到 PDF 的转换,首先需要下载 Spire.XLS for JavaScript,或者通过 npm 进行安装:

npm i spire.office

下载的产品包整合了Spire.Doc for JavaScript,Spire.XLS for JavaScript,Spire.PDF for JavaScript,Spire.Presentation for JavaScript,使用Spire.XLS for JavaScript的功能需将相应( spire.xls.js,Spire.Xls.Wasm.zip,spire.common.js,Spire.Common.Wasm.zip,_framework 文件复制到项目的 public 文件夹中。同时为了确保文本渲染,相关使用字体文件可自定义路径添加。以下示例中,字体添加路径为:public\static\font。

详细的安装和配置步骤,请参考此教程:如何在 React 项目中集成 Spire.XLS for JavaScript

将整个 Excel 工作簿转换为 PDF

将整个 Excel 工作簿转换为 PDF,可以将所有工作表整合为一个通用的文件格式,方便共享和存档。使用 Spire.XLS for JavaScript 的 Workbook.SaveToFile() 方法,可以将整个工作簿直接保存为 PDF 格式,确保数据和格式的一致性。核心步骤如下:

import React, { useState, useEffect } from 'react';

function App() {
  const [wasmModule, setWasmModule] = useState(null);
  // Load Spire.XLS
  useEffect(() => {
    (async () => {
      try {
        const publicUrl = process.env.PUBLIC_URL || '';
        const spireModule = await import(/* webpackIgnore: true */ `${publicUrl}/spire.xls.js`);
        const rawModule = spireModule.default || spireModule;
        window.wasmModule = typeof rawModule === 'function'
          ? await rawModule({ locateFile: p => p.endsWith('.wasm') ? `${publicUrl}/${p}` : p })
          : rawModule;
        setWasmModule(window.wasmModule);
      } catch (error) {
        console.error('Failed to load spire.xls.js WASM module:', error);
      }
    })();
  }, []);

  // Function convert Excel to PDF
  const ExcelToPDF = async () => {
    const wasmModule = window.wasmModule.spirexls;

    if (wasmModule) {
      // 将字体加载到虚拟文件系统(VFS)中
      await window.spire.FetchFileToVFS('Arial.ttf', '/Library/Fonts/', `${process.env.PUBLIC_URL}/static/font/`);

      // 指定输出PDF文件路径
      const outputFileName = 'out.pdf';

      // 将输入文件加载到虚拟文件系统(VFS)中
      const inputFileName = 'ToPDF.xlsx';
      await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}/static/data/`);

      // 创建一个新的工作簿
      const workbook = new wasmModule.Workbook();

      // 加载现有的Excel文档
      workbook.LoadFromFile({ fileName: inputFileName });
      workbook.ConverterSetting.SheetFitToPage = true;

      // 将工作簿保存为PDF
      workbook.SaveToFile({ fileName: outputFileName, fileFormat: wasmModule.FileFormat.PDF });


      // 读取保存的文件并转换为Blob对象
      const modifiedFileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
      const modifiedFile = new Blob([modifiedFileArray], { type: 'application/pdf' });

      // 为Blob创建一个URL并启动下载
      const url = URL.createObjectURL(modifiedFile);
      const a = document.createElement('a');
      a.href = url;
      a.download = outputFileName;
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
      URL.revokeObjectURL(url);

      // 清理工作簿使用的资源
      workbook.Dispose();
    }
  };

  return (
    <div style={{ textAlign: 'center', height: '300px' }}>
      <h1>使用JavaScript在React中将Excel文件转换为PDF</h1>
      <button onClick={ExcelToPDF} disabled={!wasmModule}>
        转换
      </button>
    </div>
  );
}

export default App;

React 应用程序编译成功后,将在默认网页浏览器中打开,通常是 http://localhost:3000。

React 应用程序编译成功

点击“转换”就能下载转换的 PDF 文件。

将整个 Excel 工作簿转换为 PDF

将特定 Excel 工作表转换为 PDF

若只需将某个特定工作表转换为 PDF,可以使用 Spire.XLS for JavaScript 的 Worksheet.SaveToPdf() 方法。此方法能够高效地导出指定工作表,帮助优化报告生成和数据共享流程。

import React, { useState, useEffect } from 'react';

function App() {
  const [wasmModule, setWasmModule] = useState(null);
  // Load Spire.XLS
  useEffect(() => {
    (async () => {
      try {
        const publicUrl = process.env.PUBLIC_URL || '';
        const spireModule = await import(/* webpackIgnore: true */ `${publicUrl}/spire.xls.js`);
        const rawModule = spireModule.default || spireModule;
        window.wasmModule = typeof rawModule === 'function'
          ? await rawModule({ locateFile: p => p.endsWith('.wasm') ? `${publicUrl}/${p}` : p })
          : rawModule;
        setWasmModule(window.wasmModule);
      } catch (error) {
        console.error('Failed to load spire.xls.js WASM module:', error);
      }
    })();
  }, []);

  // Function convert Excel to PDF
  const ExcelToPDF = async () => {
    const wasmModule = window.wasmModule.spirexls;

    if (wasmModule) {
      // 将字体加载到虚拟文件系统(VFS)中
      await window.spire.FetchFileToVFS('Arial.ttf', '/Library/Fonts/', `${process.env.PUBLIC_URL}/static/font/`);

      // 将输入文件加载到虚拟文件系统(VFS)中
      const inputFileName = 'ToPDF.xlsx';
      await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}/static/data/`);

      // 创建一个新的工作簿
      const workbook = new wasmModule.Workbook();

      // 加载现有的Excel文档
      workbook.LoadFromFile({ fileName: inputFileName });

      // 获取第二个工作表
      let sheet = workbook.Worksheets.get(1);

      // 指定输出PDF文件路径
      const outputFileName = sheet.Name + '.pdf';

      // 将工作簿保存为PDF
      workbook.SaveToFile({ fileName: outputFileName, fileFormat: wasmModule.FileFormat.PDF });


      // 读取保存的文件并转换为Blob对象
      const modifiedFileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
      const modifiedFile = new Blob([modifiedFileArray], { type: 'application/pdf' });

      // 为Blob创建一个URL并启动下载
      const url = URL.createObjectURL(modifiedFile);
      const a = document.createElement('a');
      a.href = url;
      a.download = outputFileName;
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
      URL.revokeObjectURL(url);

      // 清理工作簿使用的资源
      workbook.Dispose();
    }
  };

  return (
    <div style={{ textAlign: 'center', height: '300px' }}>
      <h1>使用JavaScript在React中将Excel文件转换为PDF</h1>
      <button onClick={ExcelToPDF} disabled={!wasmModule}>
        转换
      </button>
    </div>
  );
}

export default App;

将特定 Excel 工作表转换为 PDF

在转换工作表为 PDF 时适配页面为一页

将工作表内容适配至单页,可以提高 PDF 的可读性,尤其适用于包含大量数据的工作表。Spire.XLS for JavaScript 提供了 Workbook.ConverterSetting.SheetFitToPage 属性,用户可以通过此属性设置是否将工作表内容缩放为适合单页显示。

import React, { useState, useEffect } from 'react';

function App() {
  const [wasmModule, setWasmModule] = useState(null);
  // Load Spire.XLS
  useEffect(() => {
    (async () => {
      try {
        const publicUrl = process.env.PUBLIC_URL || '';
        const spireModule = await import(/* webpackIgnore: true */ `${publicUrl}/spire.xls.js`);
        const rawModule = spireModule.default || spireModule;
        window.wasmModule = typeof rawModule === 'function'
          ? await rawModule({ locateFile: p => p.endsWith('.wasm') ? `${publicUrl}/${p}` : p })
          : rawModule;
        setWasmModule(window.wasmModule);
      } catch (error) {
        console.error('Failed to load spire.xls.js WASM module:', error);
      }
    })();
  }, []);

  // Function convert Excel to PDF
  const ExcelToPDF = async () => {
    const wasmModule = window.wasmModule.spirexls;

    if (wasmModule) {
      // 将字体加载到虚拟文件系统(VFS)中
      await window.spire.FetchFileToVFS('Arial.ttf', '/Library/Fonts/', `${process.env.PUBLIC_URL}/static/font/`);

      // 将输入文件加载到虚拟文件系统(VFS)中
      const inputFileName = 'ToPDF.xlsx';
      await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}/static/data/`);

      // 创建一个新的工作簿
      const workbook = new wasmModule.Workbook();

      // 加载现有的Excel文档
      workbook.LoadFromFile({ fileName: inputFileName });

      // 将工作表调整为适合一页显示
      workbook.ConverterSetting.SheetFitToPage = true;

      // 获取第一个工作表
      let sheet = workbook.Worksheets.get(0);

      // 指定输出PDF文件路径
      const outputFileName = '适配一页.pdf';

      // 将工作簿保存为PDF
      workbook.SaveToFile({ fileName: outputFileName, fileFormat: wasmModule.FileFormat.PDF });


      // 读取保存的文件并转换为Blob对象
      const modifiedFileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
      const modifiedFile = new Blob([modifiedFileArray], { type: 'application/pdf' });

      // 为Blob创建一个URL并启动下载
      const url = URL.createObjectURL(modifiedFile);
      const a = document.createElement('a');
      a.href = url;
      a.download = outputFileName;
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
      URL.revokeObjectURL(url);

      // 清理工作簿使用的资源
      workbook.Dispose();
    }
  };

  return (
    <div style={{ textAlign: 'center', height: '300px' }}>
      <h1>使用JavaScript在React中将Excel文件转换为PDF</h1>
      <button onClick={ExcelToPDF} disabled={!wasmModule}>
        转换
      </button>
    </div>
  );
}

export default App;

在转换工作表为 PDF 时自定义页面边距

自定义页面边距能有效确保工作表内容在 PDF 中的对齐和排版,提升文件的视觉效果。通过使用 Worksheet.PageSetup.TopMargin、Worksheet.PageSetup.BottomMargin、Worksheet.PageSetup.LeftMargin 和 Worksheet.PageSetup.RightMargin 属性,用户可以根据需要调整或去除页面的边距设置。

import React, { useState, useEffect } from 'react';

function App() {
  const [wasmModule, setWasmModule] = useState(null);
  // Load Spire.XLS
  useEffect(() => {
    (async () => {
      try {
        const publicUrl = process.env.PUBLIC_URL || '';
        const spireModule = await import(/* webpackIgnore: true */ `${publicUrl}/spire.xls.js`);
        const rawModule = spireModule.default || spireModule;
        window.wasmModule = typeof rawModule === 'function'
          ? await rawModule({ locateFile: p => p.endsWith('.wasm') ? `${publicUrl}/${p}` : p })
          : rawModule;
        setWasmModule(window.wasmModule);
      } catch (error) {
        console.error('Failed to load spire.xls.js WASM module:', error);
      }
    })();
  }, []);

  // Function convert Excel to PDF
  const ExcelToPDF = async () => {
    const wasmModule = window.wasmModule.spirexls;

    if (wasmModule) {
      // 将字体加载到虚拟文件系统(VFS)中
      await window.spire.FetchFileToVFS('Arial.ttf', '/Library/Fonts/', `${process.env.PUBLIC_URL}/static/font/`);

      // 将输入文件加载到虚拟文件系统(VFS)中
      const inputFileName = 'ToPDF.xlsx';
      await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}/static/data/`);

      // 创建一个新的工作簿
      const workbook = new wasmModule.Workbook();

      // 加载现有的Excel文档
      workbook.LoadFromFile({ fileName: inputFileName });

      // 获取第一个工作表
      let sheet = workbook.Worksheets.get(0);

      // 调整页面边距
      sheet.PageSetup.TopMargin = 0.5;
      sheet.PageSetup.BottomMargin = 0.5;
      sheet.PageSetup.LeftMargin = 0.3;
      sheet.PageSetup.RightMargin = 0.3;

      // 指定输出PDF文件路径
      const outputFileName = '自定义页边距.pdf';

      // 将工作簿保存为PDF
      workbook.SaveToFile({ fileName: outputFileName, fileFormat: wasmModule.FileFormat.PDF });


      // 读取保存的文件并转换为Blob对象
      const modifiedFileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
      const modifiedFile = new Blob([modifiedFileArray], { type: 'application/pdf' });

      // 为Blob创建一个URL并启动下载
      const url = URL.createObjectURL(modifiedFile);
      const a = document.createElement('a');
      a.href = url;
      a.download = outputFileName;
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
      URL.revokeObjectURL(url);

      // 清理工作簿使用的资源
      workbook.Dispose();
    }
  };

  return (
    <div style={{ textAlign: 'center', height: '300px' }}>
      <h1>使用JavaScript在React中将Excel文件转换为PDF</h1>
      <button onClick={ExcelToPDF} disabled={!wasmModule}>
        转换
      </button>
    </div>
  );
}

export default App;

在转换工作表为 PDF 时指定页面大小

在将工作表转换为 PDF 时,选择合适的页面大小对于符合特定的打印和提交标准至关重要。Spire.XLS for JavaScript 提供了 Worksheet.PageSetup.PaperSize 属性,允许用户选择预定义的页面大小或自定义页面尺寸,以满足不同需求。

import React, { useState, useEffect } from 'react';

function App() {
  const [wasmModule, setWasmModule] = useState(null);
  // Load Spire.XLS
  useEffect(() => {
    (async () => {
      try {
        const publicUrl = process.env.PUBLIC_URL || '';
        const spireModule = await import(/* webpackIgnore: true */ `${publicUrl}/spire.xls.js`);
        const rawModule = spireModule.default || spireModule;
        window.wasmModule = typeof rawModule === 'function'
          ? await rawModule({ locateFile: p => p.endsWith('.wasm') ? `${publicUrl}/${p}` : p })
          : rawModule;
        setWasmModule(window.wasmModule);
      } catch (error) {
        console.error('Failed to load spire.xls.js WASM module:', error);
      }
    })();
  }, []);

  // Function convert Excel to PDF
  const ExcelToPDF = async () => {
    const wasmModule = window.wasmModule.spirexls;

    if (wasmModule) {
      // 将字体加载到虚拟文件系统(VFS)中
      await window.spire.FetchFileToVFS('Arial.ttf', '/Library/Fonts/', `${process.env.PUBLIC_URL}/static/font/`);

      // 将输入文件加载到虚拟文件系统(VFS)中
      const inputFileName = 'ToPDF.xlsx';
      await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}/static/data/`);

      // 创建一个新的工作簿
      const workbook = new wasmModule.Workbook();

      // 加载现有的Excel文档
      workbook.LoadFromFile({ fileName: inputFileName });

      // 获取第一个工作表
      let sheet = workbook.Worksheets.get(0);

      // 设置工作表的页面大小
      sheet.PageSetup.PaperSize = wasmModule.PaperSizeType.PaperA3;

      // 指定输出PDF文件路径
      const outputFileName = '指定页面大小.pdf';

      // 将工作簿保存为PDF
      workbook.SaveToFile({ fileName: outputFileName, fileFormat: wasmModule.FileFormat.PDF });


      // 读取保存的文件并转换为Blob对象
      const modifiedFileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
      const modifiedFile = new Blob([modifiedFileArray], { type: 'application/pdf' });

      // 为Blob创建一个URL并启动下载
      const url = URL.createObjectURL(modifiedFile);
      const a = document.createElement('a');
      a.href = url;
      a.download = outputFileName;
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
      URL.revokeObjectURL(url);

      // 清理工作簿使用的资源
      workbook.Dispose();
    }
  };

  return (
    <div style={{ textAlign: 'center', height: '300px' }}>
      <h1>使用JavaScript在React中将Excel文件转换为PDF</h1>
      <button onClick={ExcelToPDF} disabled={!wasmModule}>
        转换
      </button>
    </div>
  );
}

export default App;

将特定单元格区域转换为 PDF

将选定的单元格区域转换为 PDF 可精确导出工作表中的关键数据,非常适合重点报告或数据共享。通过设置 Worksheet.PageSetup.PrintArea 属性,用户可以指定需要转换的单元格区域,确保输出内容简洁而精准。

import React, { useState, useEffect } from 'react';

function App() {
  const [wasmModule, setWasmModule] = useState(null);
  // Load Spire.XLS
  useEffect(() => {
    (async () => {
      try {
        const publicUrl = process.env.PUBLIC_URL || '';
        const spireModule = await import(/* webpackIgnore: true */ `${publicUrl}/spire.xls.js`);
        const rawModule = spireModule.default || spireModule;
        window.wasmModule = typeof rawModule === 'function'
          ? await rawModule({ locateFile: p => p.endsWith('.wasm') ? `${publicUrl}/${p}` : p })
          : rawModule;
        setWasmModule(window.wasmModule);
      } catch (error) {
        console.error('Failed to load spire.xls.js WASM module:', error);
      }
    })();
  }, []);

  // Function convert Excel to PDF
  const ExcelToPDF = async () => {
    const wasmModule = window.wasmModule.spirexls;

    if (wasmModule) {
      // 将字体加载到虚拟文件系统(VFS)中
      await window.spire.FetchFileToVFS('Arial.ttf', '/Library/Fonts/', `${process.env.PUBLIC_URL}/static/font/`);

      // 将输入文件加载到虚拟文件系统(VFS)中
      const inputFileName = 'ToPDF.xlsx';
      await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}/static/data/`);

      // 创建一个新的工作簿
      const workbook = new wasmModule.Workbook();

      // 加载现有的Excel文档
      workbook.LoadFromFile({ fileName: inputFileName });

      // 获取第一个工作表
      let sheet = workbook.Worksheets.get(0);

      // 设置工作表的打印区域
      sheet.PageSetup.PrintArea = "B5:E17";

      // 指定输出PDF文件路径
      const outputFileName = '单元格区域.pdf';

      // 将工作簿保存为PDF
      workbook.SaveToFile({ fileName: outputFileName, fileFormat: wasmModule.FileFormat.PDF });


      // 读取保存的文件并转换为Blob对象
      const modifiedFileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
      const modifiedFile = new Blob([modifiedFileArray], { type: 'application/pdf' });

      // 为Blob创建一个URL并启动下载
      const url = URL.createObjectURL(modifiedFile);
      const a = document.createElement('a');
      a.href = url;
      a.download = outputFileName;
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
      URL.revokeObjectURL(url);

      // 清理工作簿使用的资源
      workbook.Dispose();
    }
  };

  return (
    <div style={{ textAlign: 'center', height: '300px' }}>
      <h1>使用JavaScript在React中将Excel文件转换为PDF</h1>
      <button onClick={ExcelToPDF} disabled={!wasmModule}>
        转换
      </button>
    </div>
  );
}

export default App;

申请临时 License

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。

在日常办公和数据处理过程中,Excel 文件因其强大的数据存储、分析和可视化功能而被广泛使用。然而,在共享或归档时,Excel 格式可能因设备、版本或平台的不同而导致文件内容显示不一致。因此,将 Excel 转换为 PDF 格式成为一种理想的选择。PDF 以其稳定性和跨平台的兼容性,能够确保文件内容在任何设备上都保持一致,且易于打印和分享。此外,PDF 文件还支持加密和数字签名,进一步增强了文档的安全性和可靠性。这篇文章将介绍如何使用 Spire.XLS for JavaScript 在 React 中将 Excel 文档转换为 PDF 格式。

安装 Spire.XLS for JavaScript

要在 React 应用中实现 Excel 到 PDF 的转换,首先需要下载 Spire.XLS for JavaScript,或者通过 npm 进行安装:

npm i spire.office

下载的产品包整合了Spire.Doc for JavaScript,Spire.XLS for JavaScript,Spire.PDF for JavaScript,Spire.Presentation for JavaScript,使用Spire.XLS for JavaScript的功能需将相应( spire.xls.js,Spire.Xls.Wasm.zip,spire.common.js,Spire.Common.Wasm.zip,_framework 文件复制到项目的 public 文件夹中。同时为了确保文本渲染,相关使用字体文件可自定义路径添加。以下示例中,字体添加路径为:public\static\font。

详细的安装和配置步骤,请参考此教程:如何在 React 项目中集成 Spire.XLS for JavaScript

将整个 Excel 工作簿转换为 PDF

将整个 Excel 工作簿转换为 PDF,可以将所有工作表整合为一个通用的文件格式,方便共享和存档。使用 Spire.XLS for JavaScript 的 Workbook.SaveToFile() 方法,可以将整个工作簿直接保存为 PDF 格式,确保数据和格式的一致性。核心步骤如下:

import React, { useState, useEffect } from 'react';

function App() {
  const [wasmModule, setWasmModule] = useState(null);
  // Load Spire.XLS
  useEffect(() => {
    (async () => {
      try {
        const publicUrl = process.env.PUBLIC_URL || '';
        const spireModule = await import(/* webpackIgnore: true */ `${publicUrl}/spire.xls.js`);
        const rawModule = spireModule.default || spireModule;
        window.wasmModule = typeof rawModule === 'function'
          ? await rawModule({ locateFile: p => p.endsWith('.wasm') ? `${publicUrl}/${p}` : p })
          : rawModule;
        setWasmModule(window.wasmModule);
      } catch (error) {
        console.error('Failed to load spire.xls.js WASM module:', error);
      }
    })();
  }, []);

  // Function convert Excel to PDF
  const ExcelToPDF = async () => {
    const wasmModule = window.wasmModule.spirexls;

    if (wasmModule) {
      // 将字体加载到虚拟文件系统(VFS)中
      await window.spire.FetchFileToVFS('Arial.ttf', '/Library/Fonts/', `${process.env.PUBLIC_URL}/static/font/`);

      // 指定输出PDF文件路径
      const outputFileName = 'out.pdf';

      // 将输入文件加载到虚拟文件系统(VFS)中
      const inputFileName = 'ToPDF.xlsx';
      await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}/static/data/`);

      // 创建一个新的工作簿
      const workbook = new wasmModule.Workbook();

      // 加载现有的Excel文档
      workbook.LoadFromFile({ fileName: inputFileName });
      workbook.ConverterSetting.SheetFitToPage = true;

      // 将工作簿保存为PDF
      workbook.SaveToFile({ fileName: outputFileName, fileFormat: wasmModule.FileFormat.PDF });


      // 读取保存的文件并转换为Blob对象
      const modifiedFileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
      const modifiedFile = new Blob([modifiedFileArray], { type: 'application/pdf' });

      // 为Blob创建一个URL并启动下载
      const url = URL.createObjectURL(modifiedFile);
      const a = document.createElement('a');
      a.href = url;
      a.download = outputFileName;
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
      URL.revokeObjectURL(url);

      // 清理工作簿使用的资源
      workbook.Dispose();
    }
  };

  return (
    <div style={{ textAlign: 'center', height: '300px' }}>
      <h1>使用JavaScript在React中将Excel文件转换为PDF</h1>
      <button onClick={ExcelToPDF} disabled={!wasmModule}>
        转换
      </button>
    </div>
  );
}

export default App;

React 应用程序编译成功后,将在默认网页浏览器中打开,通常是 http://localhost:3000。

React 应用程序编译成功

点击“转换”就能下载转换的 PDF 文件。

将整个 Excel 工作簿转换为 PDF

将特定 Excel 工作表转换为 PDF

若只需将某个特定工作表转换为 PDF,可以使用 Spire.XLS for JavaScript 的 Worksheet.SaveToPdf() 方法。此方法能够高效地导出指定工作表,帮助优化报告生成和数据共享流程。

  • JavaScript
Copy
import React, { useState, useEffect } from 'react';

function App() {
  const [wasmModule, setWasmModule] = useState(null);
  // Load Spire.XLS
  useEffect(() => {
    (async () => {
      try {
        const publicUrl = process.env.PUBLIC_URL || '';
        const spireModule = await import(/* webpackIgnore: true */ `${publicUrl}/spire.xls.js`);
        const rawModule = spireModule.default || spireModule;
        window.wasmModule = typeof rawModule === 'function'
          ? await rawModule({ locateFile: p => p.endsWith('.wasm') ? `${publicUrl}/${p}` : p })
          : rawModule;
        setWasmModule(window.wasmModule);
      } catch (error) {
        console.error('Failed to load spire.xls.js WASM module:', error);
      }
    })();
  }, []);

  // Function convert Excel to PDF
  const ExcelToPDF = async () => {
    const wasmModule = window.wasmModule.spirexls;

    if (wasmModule) {
      // 将字体加载到虚拟文件系统(VFS)中
      await window.spire.FetchFileToVFS('Arial.ttf', '/Library/Fonts/', `${process.env.PUBLIC_URL}/static/font/`);

      // 将输入文件加载到虚拟文件系统(VFS)中
      const inputFileName = 'ToPDF.xlsx';
      await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}/static/data/`);

      // 创建一个新的工作簿
      const workbook = new wasmModule.Workbook();

      // 加载现有的Excel文档
      workbook.LoadFromFile({ fileName: inputFileName });

      // 获取第二个工作表
      let sheet = workbook.Worksheets.get(1);

      // 指定输出PDF文件路径
      const outputFileName = sheet.Name + '.pdf';

      // 将工作簿保存为PDF
      workbook.SaveToFile({ fileName: outputFileName, fileFormat: wasmModule.FileFormat.PDF });


      // 读取保存的文件并转换为Blob对象
      const modifiedFileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
      const modifiedFile = new Blob([modifiedFileArray], { type: 'application/pdf' });

      // 为Blob创建一个URL并启动下载
      const url = URL.createObjectURL(modifiedFile);
      const a = document.createElement('a');
      a.href = url;
      a.download = outputFileName;
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
      URL.revokeObjectURL(url);

      // 清理工作簿使用的资源
      workbook.Dispose();
    }
  };

  return (
    <div style={{ textAlign: 'center', height: '300px' }}>
      <h1>使用JavaScript在React中将Excel文件转换为PDF</h1>
      <button onClick={ExcelToPDF} disabled={!wasmModule}>
        转换
      </button>
    </div>
  );
}

export default App;

将特定 Excel 工作表转换为 PDF

在转换工作表为 PDF 时适配页面为一页

将工作表内容适配至单页,可以提高 PDF 的可读性,尤其适用于包含大量数据的工作表。Spire.XLS for JavaScript 提供了 Workbook.ConverterSetting.SheetFitToPage 属性,用户可以通过此属性设置是否将工作表内容缩放为适合单页显示。

  • JavaScript
Copy
import React, { useState, useEffect } from 'react';

function App() {
  const [wasmModule, setWasmModule] = useState(null);
  // Load Spire.XLS
  useEffect(() => {
    (async () => {
      try {
        const publicUrl = process.env.PUBLIC_URL || '';
        const spireModule = await import(/* webpackIgnore: true */ `${publicUrl}/spire.xls.js`);
        const rawModule = spireModule.default || spireModule;
        window.wasmModule = typeof rawModule === 'function'
          ? await rawModule({ locateFile: p => p.endsWith('.wasm') ? `${publicUrl}/${p}` : p })
          : rawModule;
        setWasmModule(window.wasmModule);
      } catch (error) {
        console.error('Failed to load spire.xls.js WASM module:', error);
      }
    })();
  }, []);

  // Function convert Excel to PDF
  const ExcelToPDF = async () => {
    const wasmModule = window.wasmModule.spirexls;

    if (wasmModule) {
      // 将字体加载到虚拟文件系统(VFS)中
      await window.spire.FetchFileToVFS('Arial.ttf', '/Library/Fonts/', `${process.env.PUBLIC_URL}/static/font/`);

      // 将输入文件加载到虚拟文件系统(VFS)中
      const inputFileName = 'ToPDF.xlsx';
      await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}/static/data/`);

      // 创建一个新的工作簿
      const workbook = new wasmModule.Workbook();

      // 加载现有的Excel文档
      workbook.LoadFromFile({ fileName: inputFileName });

      // 将工作表调整为适合一页显示
      workbook.ConverterSetting.SheetFitToPage = true;

      // 获取第一个工作表
      let sheet = workbook.Worksheets.get(0);

      // 指定输出PDF文件路径
      const outputFileName = '适配一页.pdf';

      // 将工作簿保存为PDF
      workbook.SaveToFile({ fileName: outputFileName, fileFormat: wasmModule.FileFormat.PDF });


      // 读取保存的文件并转换为Blob对象
      const modifiedFileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
      const modifiedFile = new Blob([modifiedFileArray], { type: 'application/pdf' });

      // 为Blob创建一个URL并启动下载
      const url = URL.createObjectURL(modifiedFile);
      const a = document.createElement('a');
      a.href = url;
      a.download = outputFileName;
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
      URL.revokeObjectURL(url);

      // 清理工作簿使用的资源
      workbook.Dispose();
    }
  };

  return (
    <div style={{ textAlign: 'center', height: '300px' }}>
      <h1>使用JavaScript在React中将Excel文件转换为PDF</h1>
      <button onClick={ExcelToPDF} disabled={!wasmModule}>
        转换
      </button>
    </div>
  );
}

export default App;

在转换工作表为 PDF 时自定义页面边距

自定义页面边距能有效确保工作表内容在 PDF 中的对齐和排版,提升文件的视觉效果。通过使用 Worksheet.PageSetup.TopMargin、Worksheet.PageSetup.BottomMargin、Worksheet.PageSetup.LeftMargin 和 Worksheet.PageSetup.RightMargin 属性,用户可以根据需要调整或去除页面的边距设置。

  • JavaScript
Copy
import React, { useState, useEffect } from 'react';

function App() {
  const [wasmModule, setWasmModule] = useState(null);
  // Load Spire.XLS
  useEffect(() => {
    (async () => {
      try {
        const publicUrl = process.env.PUBLIC_URL || '';
        const spireModule = await import(/* webpackIgnore: true */ `${publicUrl}/spire.xls.js`);
        const rawModule = spireModule.default || spireModule;
        window.wasmModule = typeof rawModule === 'function'
          ? await rawModule({ locateFile: p => p.endsWith('.wasm') ? `${publicUrl}/${p}` : p })
          : rawModule;
        setWasmModule(window.wasmModule);
      } catch (error) {
        console.error('Failed to load spire.xls.js WASM module:', error);
      }
    })();
  }, []);

  // Function convert Excel to PDF
  const ExcelToPDF = async () => {
    const wasmModule = window.wasmModule.spirexls;

    if (wasmModule) {
      // 将字体加载到虚拟文件系统(VFS)中
      await window.spire.FetchFileToVFS('Arial.ttf', '/Library/Fonts/', `${process.env.PUBLIC_URL}/static/font/`);

      // 将输入文件加载到虚拟文件系统(VFS)中
      const inputFileName = 'ToPDF.xlsx';
      await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}/static/data/`);

      // 创建一个新的工作簿
      const workbook = new wasmModule.Workbook();

      // 加载现有的Excel文档
      workbook.LoadFromFile({ fileName: inputFileName });

      // 获取第一个工作表
      let sheet = workbook.Worksheets.get(0);

      // 调整页面边距
      sheet.PageSetup.TopMargin = 0.5;
      sheet.PageSetup.BottomMargin = 0.5;
      sheet.PageSetup.LeftMargin = 0.3;
      sheet.PageSetup.RightMargin = 0.3;

      // 指定输出PDF文件路径
      const outputFileName = '自定义页边距.pdf';

      // 将工作簿保存为PDF
      workbook.SaveToFile({ fileName: outputFileName, fileFormat: wasmModule.FileFormat.PDF });


      // 读取保存的文件并转换为Blob对象
      const modifiedFileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
      const modifiedFile = new Blob([modifiedFileArray], { type: 'application/pdf' });

      // 为Blob创建一个URL并启动下载
      const url = URL.createObjectURL(modifiedFile);
      const a = document.createElement('a');
      a.href = url;
      a.download = outputFileName;
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
      URL.revokeObjectURL(url);

      // 清理工作簿使用的资源
      workbook.Dispose();
    }
  };

  return (
    <div style={{ textAlign: 'center', height: '300px' }}>
      <h1>使用JavaScript在React中将Excel文件转换为PDF</h1>
      <button onClick={ExcelToPDF} disabled={!wasmModule}>
        转换
      </button>
    </div>
  );
}

export default App;

在转换工作表为 PDF 时指定页面大小

在将工作表转换为 PDF 时,选择合适的页面大小对于符合特定的打印和提交标准至关重要。Spire.XLS for JavaScript 提供了 Worksheet.PageSetup.PaperSize 属性,允许用户选择预定义的页面大小或自定义页面尺寸,以满足不同需求。

  • JavaScript
Copy
import React, { useState, useEffect } from 'react';

function App() {
  const [wasmModule, setWasmModule] = useState(null);
  // Load Spire.XLS
  useEffect(() => {
    (async () => {
      try {
        const publicUrl = process.env.PUBLIC_URL || '';
        const spireModule = await import(/* webpackIgnore: true */ `${publicUrl}/spire.xls.js`);
        const rawModule = spireModule.default || spireModule;
        window.wasmModule = typeof rawModule === 'function'
          ? await rawModule({ locateFile: p => p.endsWith('.wasm') ? `${publicUrl}/${p}` : p })
          : rawModule;
        setWasmModule(window.wasmModule);
      } catch (error) {
        console.error('Failed to load spire.xls.js WASM module:', error);
      }
    })();
  }, []);

  // Function convert Excel to PDF
  const ExcelToPDF = async () => {
    const wasmModule = window.wasmModule.spirexls;

    if (wasmModule) {
      // 将字体加载到虚拟文件系统(VFS)中
      await window.spire.FetchFileToVFS('Arial.ttf', '/Library/Fonts/', `${process.env.PUBLIC_URL}/static/font/`);

      // 将输入文件加载到虚拟文件系统(VFS)中
      const inputFileName = 'ToPDF.xlsx';
      await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}/static/data/`);

      // 创建一个新的工作簿
      const workbook = new wasmModule.Workbook();

      // 加载现有的Excel文档
      workbook.LoadFromFile({ fileName: inputFileName });

      // 获取第一个工作表
      let sheet = workbook.Worksheets.get(0);

      // 设置工作表的页面大小
      sheet.PageSetup.PaperSize = wasmModule.PaperSizeType.PaperA3;

      // 指定输出PDF文件路径
      const outputFileName = '指定页面大小.pdf';

      // 将工作簿保存为PDF
      workbook.SaveToFile({ fileName: outputFileName, fileFormat: wasmModule.FileFormat.PDF });


      // 读取保存的文件并转换为Blob对象
      const modifiedFileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
      const modifiedFile = new Blob([modifiedFileArray], { type: 'application/pdf' });

      // 为Blob创建一个URL并启动下载
      const url = URL.createObjectURL(modifiedFile);
      const a = document.createElement('a');
      a.href = url;
      a.download = outputFileName;
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
      URL.revokeObjectURL(url);

      // 清理工作簿使用的资源
      workbook.Dispose();
    }
  };

  return (
    <div style={{ textAlign: 'center', height: '300px' }}>
      <h1>使用JavaScript在React中将Excel文件转换为PDF</h1>
      <button onClick={ExcelToPDF} disabled={!wasmModule}>
        转换
      </button>
    </div>
  );
}

export default App;

将特定单元格区域转换为 PDF

将选定的单元格区域转换为 PDF 可精确导出工作表中的关键数据,非常适合重点报告或数据共享。通过设置 Worksheet.PageSetup.PrintArea 属性,用户可以指定需要转换的单元格区域,确保输出内容简洁而精准。

  • JavaScript
Copy
import React, { useState, useEffect } from 'react';

function App() {
  const [wasmModule, setWasmModule] = useState(null);
  // Load Spire.XLS
  useEffect(() => {
    (async () => {
      try {
        const publicUrl = process.env.PUBLIC_URL || '';
        const spireModule = await import(/* webpackIgnore: true */ `${publicUrl}/spire.xls.js`);
        const rawModule = spireModule.default || spireModule;
        window.wasmModule = typeof rawModule === 'function'
          ? await rawModule({ locateFile: p => p.endsWith('.wasm') ? `${publicUrl}/${p}` : p })
          : rawModule;
        setWasmModule(window.wasmModule);
      } catch (error) {
        console.error('Failed to load spire.xls.js WASM module:', error);
      }
    })();
  }, []);

  // Function convert Excel to PDF
  const ExcelToPDF = async () => {
    const wasmModule = window.wasmModule.spirexls;

    if (wasmModule) {
      // 将字体加载到虚拟文件系统(VFS)中
      await window.spire.FetchFileToVFS('Arial.ttf', '/Library/Fonts/', `${process.env.PUBLIC_URL}/static/font/`);

      // 将输入文件加载到虚拟文件系统(VFS)中
      const inputFileName = 'ToPDF.xlsx';
      await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}/static/data/`);

      // 创建一个新的工作簿
      const workbook = new wasmModule.Workbook();

      // 加载现有的Excel文档
      workbook.LoadFromFile({ fileName: inputFileName });

      // 获取第一个工作表
      let sheet = workbook.Worksheets.get(0);

      // 设置工作表的打印区域
      sheet.PageSetup.PrintArea = "B5:E17";

      // 指定输出PDF文件路径
      const outputFileName = '单元格区域.pdf';

      // 将工作簿保存为PDF
      workbook.SaveToFile({ fileName: outputFileName, fileFormat: wasmModule.FileFormat.PDF });


      // 读取保存的文件并转换为Blob对象
      const modifiedFileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
      const modifiedFile = new Blob([modifiedFileArray], { type: 'application/pdf' });

      // 为Blob创建一个URL并启动下载
      const url = URL.createObjectURL(modifiedFile);
      const a = document.createElement('a');
      a.href = url;
      a.download = outputFileName;
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
      URL.revokeObjectURL(url);

      // 清理工作簿使用的资源
      workbook.Dispose();
    }
  };

  return (
    <div style={{ textAlign: 'center', height: '300px' }}>
      <h1>使用JavaScript在React中将Excel文件转换为PDF</h1>
      <button onClick={ExcelToPDF} disabled={!wasmModule}>
        转换
      </button>
    </div>
  );
}

export default App;

申请临时 License

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。