PDF 文档通常会使用多种字体,用来设计排版或者突出关键信息等。但有时,我们需要获取或者替换这些在文件中使用的字体。获取字体可以让您查看字体的详细信息,如字体名称、大小、类型和样式,这在保持设计一致性或遵循特定标准时尤为重要。另一方面,替换字体有助于解决兼容性问题,特别是在原始字体在某些设备或软件上不被支持的情况下。本文将介绍如何使用 Spire.PDF for Python 在 Python 中获取和替换 PDF 文件中使用的字体。
本教程需要 Spire.PDF for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.PDF
如果您不确定如何安装,请参考此教程: 如何在 Windows 中安装 Spire.PDF for Python
Spire.PDF for Python 提供了 PdfDocument.UsedFonts 属性,用于检索 PDF 中使用的所有字体的列表。通过遍历该列表,您可以轻松访问详细的字体信息,使用 PdfUsedFont.Name、PdfUsedFont.Size、PdfUsedFont.Type 和 PdfUsedFont.Style 属性,您可以获取到诸如字体名称、大小、类型和样式信息。具体步骤如下。
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()

您可以通过 PdfUsedFont.Replace() 方法将 PDF 中所使用的字体替换成自己所需的字体,方法可以参考下面的详细步骤解析。
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()
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
二维码作为一种高效、便捷的信息载体,在支付、物流、广告等行业中扮演着关键角色。随着二维码在日常生活中广泛应用,如何高效地生成和识别二维码成为了一个重要的技术需求。Python 作为一种灵活的编程语言,是处理二维码生成与识别的理想选择。通过Python,开发者能够轻松实现二维码的自动生成和扫描识别,从而提高工作效率,优化用户体验,满足各种应用场景的需求。本文将介绍如何使用 Spire.Barcode for Python 在 Python 项目中生成与识别二维码。
本教程需要 Spire.Barcode for Python,您可以下载 Spire.Barocde for Python,或通过以下 pip 命令轻松安装:
pip install spire.barcode
通过 Spire.Barcode for Python,开发者可以利用 BarcodeSettings 类定制二维码的生成参数。此功能支持设定条码类型、编码内容、颜色方案、边距大小以及图像的水平和垂直分辨率等多项配置。完成设置后,只需实例化 BarcodeGenerator 类,并调用其 GenerateImage() 方法,即可轻松生成所需的条形码图像。
以下是详细操作步骤:
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)

Spire.Barcode for Python 还配备了 BarcodeScanner 类,用于从二维码等条码图像中识别内容。该类提供了多种方法来高效提取条形码中的信息:
下面是使用 BarcodeScanner 类识别二维码的代码示例:
from spire.barcode import *
# 应用许可证密钥
License.SetLicenseKey("license key")
# 扫描包含一个条码的图像文件
result = BarcodeScanner.ScanOneFile("output/QRCode.png")
# 扫描包含多个条码的图像文件
# results = BarcodeScanner.ScanFile("output/QRCode.png")
# 打印结果
print(result)

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.Presentation for Java 10.1.3 现已正式发布。最新版本增强了幻灯片到图片的转换功能。此外,本次更新还修复了一些已知问题,例如合并 PPTX 文档时,结果文档打开报修复的问题。更多详情请查阅以下内容。
问题修复:
https://www.e-iceblue.cn/Downloads/Spire-Presentation-JAVA.html
在 PDF 文档中添加页码增强了其组织性和可读性,使读者更容易浏览内容。不管是报告、操作手册还是电子书,页码都能为文档增添专业感,并帮助保持信息流的连贯性。这个过程涉及确定页码在页脚或页眉中的位置、对齐方式和样式。
本文将介绍如何使用 Spire.PDF for Python 在 PDF 文档的页脚添加页码。
本教程需要 Spire.PDF for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.PDF
如果您不确定如何安装,请参考此教程: 如何在 Windows 中安装 Spire.PDF for Python。
在使用 Spire.PDF for Python 修改 PDF 文档时,坐标系的原点位于页面的左上角。x 轴向右延伸,y 轴向下延伸。
页码通常位于页眉或页脚。因此,在确定页码位置时,需要考虑页面的大小和页边距。

Spire.PDF for Python 提供了 PdfPageNumberField 和 PdfPageCountField 类,用以获取当前页面的页码和 PDF 文档的总页数。它们可以合并成一个 PdfCompositeField,将输出格式化为 "Page X of Y",其中 X 表示当前页码,Y 表示总页数。
要将 PdfCompositeField 定位到页面上,可以使用 Location 属性,并通过 Draw() 方法渲染它。
要在页脚添加左对齐的页码,需要考虑左侧和底部的页面边距以及页面的高度。例如,可以使用坐标(LeftMargin, PageHeight - BottomMargin + SmallNumber)。这样可以确保页码与文本的左侧对齐,同时与内容和页面边缘保持适当的距离。
以下是在 PDF 页脚中添加左对齐页码的步骤:
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()

要将页码定位在页脚的中央,首先需要测量页码本身的宽度。得到这个宽度后,可以通过公式 (PageWidth - PageNumberWidth) / 2 计算合适的 X 坐标。这确保了页码在页脚内水平居中。
将页码居中对齐添加到 PDF 页脚的步骤如下:
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()

要将页码右对齐添加到页脚,首先测量页码的宽度。然后,使用公式 PageWidth - PageNumberWidth - RightMargin 计算 X 坐标。这确保了页码与文本的右侧对齐。
将页码右对齐添加到 PDF 页脚的步骤如下:
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()*

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.Doc 13.1.4 已发布。本次更新新增支持判断和修改图片/形状的超链接。此外,该版本还修复了一些已知问题,如获取段落的项目编号不正确的问题。详情请阅读以下内容。
新功能:
foreach (Section section in doc.Sections)
{
foreach (Paragraph paragraph in section.Paragraphs)
{
foreach (DocumentObject documentObject in paragraph.ChildObjects)
{
if (documentObject is DocPicture)
{
DocPicture pic=documentObject as DocPicture;
if (pic.HasHyperlink)
{
pic.HRef = "";
}
}
if (documentObject is ShapeObject)
{
ShapeObject shape = documentObject as ShapeObject;
if (shape.HasHyperlink)
{
shape.HRef = "";
}
}
}
}
}问题修复:
Spire.XLS 15.1.3 现已发布。该版本支持多种新函数,包括 CSCH、RANDARRAY、COTH、SEQUENCE、EXPAND、CHOOSECOLS、CHOOSEROWS 和 DROP。此外,它还修复了一些在将 XLSM 转换为 PDF、Excel 转换为 PDF、计算公式值和设置选项卡颜色时出现的问题。新功能及问题修复详情如下。
新功能:
PrstGeomShapeCollection prstGeomShapeType = worksheet.PrstGeomShapes;
for (int i = 0; i < prstGeomShapeType.Count; i++)
{
XlsPrstGeomShape shape = (XlsPrstGeomShape)prstGeomShapeType[i];
shape.HyLink.Address = "https://www.baidu.com/";
}问题修复:
Spire.Presentation 10.1.1 现已正式发布。最新版本支持获取嵌入 OLE 对象的文件名。此外,本次更新还成功修复了一些已知问题,例如加载 PPTX 文档程序抛 "未将对象引用设置到对象的实例" 异常的问题。详情请查阅以下内容。
新功能:
IOleObject oleObject = shape as IOleObject;
oleObject.EmbeddedFileName问题修复:
https://www.e-iceblue.cn/Downloads/Spire-Presentation-NET.html
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 格式。
要在 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,可以将所有工作表整合为一个通用的文件格式,方便共享和存档。使用 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。

点击“转换”就能下载转换的 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;

将工作表内容适配至单页,可以提高 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 中的对齐和排版,提升文件的视觉效果。通过使用 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 时,选择合适的页面大小对于符合特定的打印和提交标准至关重要。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 可精确导出工作表中的关键数据,非常适合重点报告或数据共享。通过设置 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;
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
在日常办公和数据处理过程中,Excel 文件因其强大的数据存储、分析和可视化功能而被广泛使用。然而,在共享或归档时,Excel 格式可能因设备、版本或平台的不同而导致文件内容显示不一致。因此,将 Excel 转换为 PDF 格式成为一种理想的选择。PDF 以其稳定性和跨平台的兼容性,能够确保文件内容在任何设备上都保持一致,且易于打印和分享。此外,PDF 文件还支持加密和数字签名,进一步增强了文档的安全性和可靠性。这篇文章将介绍如何使用 Spire.XLS for JavaScript 在 React 中将 Excel 文档转换为 PDF 格式。
要在 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,可以将所有工作表整合为一个通用的文件格式,方便共享和存档。使用 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。

点击“转换”就能下载转换的 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;

将工作表内容适配至单页,可以提高 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 中的对齐和排版,提升文件的视觉效果。通过使用 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 时,选择合适的页面大小对于符合特定的打印和提交标准至关重要。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 可精确导出工作表中的关键数据,非常适合重点报告或数据共享。通过设置 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;
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。