通过文档 API 改进用户体验






4.56/5 (3投票s)
在本文中,我们将探讨一些用例,以展示 GrapeCity 文档 API 可以解决的问题。
开发人员在桌面和 Web 应用程序中需要执行许多涉及文档操作的任务。例如:
- 生成一个 PDF 表单以输入数据
- 以 Excel 格式导出表格数据
- 以 PDF 格式导出输入的数据
为了完成这些任务,我们可能会使用 Microsoft Office Interop 库。但它存在一些缺点。例如,运行应用程序的每个客户端机器都需要 Microsoft Office 许可证,并且所有客户端机器都必须安装相同版本的 Microsoft Excel。此外,Microsoft Office 应用程序是用户界面 (UI) 应用程序,并且该 API 仅在 Windows 操作系统上运行(即使在工作时,它也很慢)。
GrapeCity 文档 API 是专为企业应用程序设计的超快速、低占用的 API,可帮助我们快速高效地创建 Excel 电子表格、Word 文档和 PDF 文档,而*无需*使用 Microsoft Excel、Word 或 Adobe Acrobat。这些 API 还支持多平台上的 C# 和 Java 应用程序。
让我们探讨一些用例,以展示 GrapeCity 文档 API 可以解决的问题。此处,代码示例出于演示目的使用 C#,但我们也可以使用 Java 编写相同的功能。
用例一
在这个用例中,我们将弥合传统文档管理与我们新应用程序之间的差距。
假设我们的客户多年来一直使用 Excel 电子表格来创建和存储发票。他们最近购买了我们的新发票 Web 应用程序,并希望将他们所有的历史数据导入我们的系统。
我们想找到一个文档 API,该 API 可以以编程方式解析 Excel 电子表格并将 Excel 转换为 PDF。 GrapeCity Documents for Excel (GcExcel) 是解决我们电子表格挑战的完美解决方案。我们可以在服务器或桌面应用程序中使用 GcExcel 来创建、操作、转换和共享与 Microsoft Excel 兼容的电子表格。此外,几乎可以从任何应用程序和平台调用它。
解析 Excel 到 JSON
假设我们的客户的旧 Excel 格式发票如下所示
我们使用 GcExcel .NET 导入工作簿并从中收集数据。以下显示了如何操作
- 将单元格 F1 中的发票号设为字符串数据类型
- 将单元格范围 B5 到 B9 中的“账单对象”信息设为一个数组
- 确保单元格范围 E7 到 F16 中的项目是一个 JSON 数组对象
一旦我们获取了这些单元格中的所有值,我们就将它们包装成一个 JSON 对象
Workbook workbook = new Workbook();
string source = "SimpleInvoice.xlsx";
workbook.Open (source);
IWorksheet worksheet = workbook.Worksheets[0];
Workbook workbook = new Workbook();
workbook.Open("SimpleInvoice.xlsx");
IWorksheet worksheet = workbook.Worksheets[0];
var invoice = new Invoice()
var invoiceNumberRange = worksheet.Range["F1:F1"];
invoice.invoice_number = $"{invoiceNumberRange.Cells[0].Value}";
var billToRange = worksheet.Range["B5:B9"];
int rowCount = billToRange.Rows.Count;
String billTo = "";
for (int i = 0; i < rowCount; i++)
{
billTo = billTo + billToRange.Cells[i].Value + " ";
}
invoice.bill_to = billTo;
var items = new List<InvoiceItem>();
var itemsRange = worksheet.Range["E7:H16"];
int columnCount = itemsRange.Columns.Count;
rowCount = itemsRange.Rows.Count;
for (int i = 0; i < rowCount; i++)
{
if (itemsRange.Cells[i, 0].Value == null)
{
break;
}
var item = new InvoiceItem();
item.item_number = (string) itemsRange.Cells[i, 0].Value;
item.description = (string) itemsRange.Cells[i, 1].Value;
item.price = (double) itemsRange.Cells[i, 2].Value;
item.quantity = (double) itemsRange.Cells[i, 3].Value;
items.Add (item);
}
invoice.items = (List<InvoiceItem>)items;
String jsonString = JsonSerializer.Serialize(invoice);
File.WriteAllText("invoice.json", jsonString);</pre>
我们可以将数据保存到我们的数据库,或者轻松地将其转换为任何格式的 JSON 文件。
将 Excel 保存到 PDF
导入 Excel 文件后,您的客户可能希望为原始 Excel 文件生成 PDF 版本以供存档。
使用 GcExcel,将 Excel 转换为 PDF 非常轻松。我们只需要创建一个工作簿,打开 Excel 文件,然后将其保存为 PDF
Workbook workbook = new Workbook();
string source = "SimpleInvoice.xlsx";
workbook.Open (source);
workbook.Save("SimpleInvoice.pdf");
用例二
在这个用例中,让我们构建 PDF 输入表单,供用户随时填写。
在这里,我们正在构建一个应用程序来管理网球俱乐部的会员资格。用户在使用我们的应用程序申请会员资格时需要提供个人信息。
如果我们能构建可编辑的 PDF 表单,那将非常有用。有了它们,用户就可以在有或没有互联网连接的情况下下载并填写表单。完成数据输入后,他们就可以在线上传文档。我们可以解析表单条目并将其保存到我们的应用程序中。然后,俱乐部管理员可以生成一份包含所有会员信息的 Excel 报告。
使用 GrapeCity 文档 API,我们可以快速构建一个可填写的 PDF 表单,并将 PDF 表单中的条目解析到 Excel 电子表格中。我们只需要两个 模板
- 我们需要一个带有各种字段的表单模板来创建 PDF 表单。有关如何使用表单字段创建 Excel 模板的信息,请参阅 GrapeCity 的文档。
- 我们需要一个带有数据绑定字段的数据源模板,用于绑定从 PDF 表单解析的数据。有关如何使用数据绑定字段创建 Excel 模板的信息,请参阅 GrapeCity 的文档。
构建 PDF 表单
要构建 PDF 表单,我们创建一个 Excel 表单模板,如下所示
在应用程序中,我们打开 Excel 文件,处理模板,然后将 Excel 保存为 PDF
var workbook = new GrapeCity.Documents.Excel.Workbook();
workbook.Open("Template_MemberInfo.xlsx");
workbook.ProcessTemplate();
workbook.Save("MemberInfo.pdf");
解析 PDF 表单到 JSON
在俱乐部会员下载并填写 PDF 文件后,他们会将表单上传到应用程序。然后,我们可以解析所有会员的表单条目,并将信息保存到 JSON 对象。
要获取表单条目,我们必须为模板中的每个字段命名。例如,我们将名字和姓氏的表单字段定义为
{{(form={"name":"first_name","type":"text", "required": true})}}
{{(form={"name":"last_name","type":"text", "required": true})}}
此代码允许我们按字段名称读取表单字段值
var member = new MemberInfos();
foreach (Field field in doc.AcroForm.Fields)
{
switch (field.Name)
{
case "first_name":
member.first_name = (String) field.Value;
break;
case "last_name":
member.last_name = (String) field.Value;
break;
...
default:
break;
}
}
然后,我们可以将字段值写入 JSON 文件
var billPayList = new ArrayList();
foreach (string
inputFile
in
Directory
.EnumerateFiles(Path.Combine("Resources", "Uploads"),
"*.pdf")
)
{
billPayList.Add(GatherData.getDataFromPdf(inputFile));
}
string jsonString = JsonSerializer.Serialize(billPayList);
生成 Excel 电子表格
要生成包含所有会员表单条目的 Excel 电子表格,我们创建一个 Excel 数据源模板,如下所示
在模板中,我们将数据绑定字段定义为 {{ds.FieldName}},其中 FieldName 必须与我们在上一步创建的 JSON 文件中的键匹配。例如,如果 JSON 文件有一个键值对 {"first_name":"Jone"},那么数据绑定字段必须是 {{ds.first_name}}。
在第一个数据绑定字段中,我们将单元格范围定义为 R=A3:C8,它扩展了第一个俱乐部会员信息从单元格 A3 到单元格 C8 的数据。下一个会员的信息从 A9 开始,到 C14 结束,依此类推。
我们通过以下步骤生成 Excel 电子表格。首先打开模板文件
var workbook = new GrapeCity.Documents.Excel.Workbook();
workbook.Open (Path.Combine("Resources", "Templates","Template_MemberReport.xlsx"));
接下来,使用 AddDataSource
方法将 JSON 数据添加到数据源对象
var datasource =
JsonSerializer.Deserialize<List<BillPayInfos>>(File.ReadAllText(dataSourceFile));
workbook.AddDataSource("ds", datasource);
然后,处理模板并将其保存为 Excel 电子表格
workbook.ProcessTemplate();
workbook.Save(Path.Combine("Output", "MemberReport.xlsx"));
此代码生成一个会员报告,如下所示
用例三
在这个用例中,我们将整合不同的数据输入方法。
假设我们正在为一家提供零件维修、系统恢复等的笔记本电脑服务店构建一个多租户业务应用程序。当客户将笔记本电脑送去维修时,该店会将软件服务订单外包给一个分包商,并将硬件服务订单外包给另一个分包商。
笔记本电脑服务店需要分包商下载 Excel 费用表单来填写他们的工作和成本。一旦填写完费用文件并上传回来,我们的应用程序就会为每个客户生成 PDF 发票。
使用 GrapeCity 文档 API,我们可以以编程方式为每个分包商生成自定义的 Excel 费用表单。然后,当每个分包商返回填写好的表单时,我们可以将数据从表单提取到 JSON 数组中。使用数据源模板,我们可以快速为数组中的每个 JSON 对象生成 Excel 电子表格,并将 Excel 文件保存为 PDF 发送给客户。
生成自定义 Excel
假设我们有一个 JSON 文件来存储服务订单信息(为了实际起见,您会使用数据库)。我们首先创建一个 Excel 数据源模板
我们在应用程序中打开模板文件,将 JSON 文件中的数据加载到此模板,并为分包商生成一个 Excel 费用表单供下载。以下代码片段显示了如何操作
workbook
.Open(Path
.Combine("Resources",
"Templates",
"Template_Service_Cost.xlsx"));
workbook.AddDataSource("ds", softwareOrderList);
workbook.ProcessTemplate();
workbook
.Save(Path.Combine("Downloads", "subcontract_software_cost.xlsx"));
一旦分包商填写并上传了他们的 Excel 费用表单,我们就可以像在用例一中那样,将数据从 Excel 解析到 JSON。
生成 PDF 发票
要为客户生成 PDF 发票,我们创建另一个 Excel 数据源模板,如下所示
我们使用从费用表单中提取的 JSON 数据填充模板,生成工作簿,并将工作簿保存为 PDF
var workbook = new GrapeCity.Documents.Excel.Workbook();
var invoiceList =
JsonSerializer
.Deserialize<List<ServiceOrder>>(File
.ReadAllText(Path
.Combine("Resources", "DataSource", "serviceOrders.json")));
foreach (var invoice in invoiceList)
{
workbook
.Open(Path
.Combine("Resources",
"Templates",
"Template_Invoice.xlsx"));
workbook.AddDataSource("ds", invoice);
workbook.ProcessTemplate();
workbook
.Save(Path
.Combine("Downloads", $"Invoice_{invoice.order_id}.pdf"));
此代码为每个客户生成发票
结论
我们回顾了三个用例,以展示如何使用 GrapeCity 文档 API 以编程方式从 Excel 文件生成 PDF,如何将数据从 Excel 或 PDF 文件表单解析到 JSON,如何使用模板从 Excel 文件创建 PDF 表单,以及如何将数据从 PDF 表单传输到 Excel。
在产品开发过程中,Excel、Word 和 PDF 的文档支持常常被忽视和低估。 GrapeCity 文档 API 提供了您所需的所需功能。这些 API 将您的应用程序提升到一个新的水平,并为您未来的成功奠定基础。GrapeCity 为开发人员设计了 API,并且易于使用。
要探索和尝试本文中所有用例的 C# 代码,请访问此 GitHub 仓库。
要了解文档 API 还能做什么,请查看以下链接