目录
用例一
将Excel保存为PDF
用例二
构建PDF表单
将PDF表单解析为JSON
生成Excel电子表格
用例三
生成自定义Excel
生成PDF发票
结论
开发人员需要在涉及文档操作的桌面和Web应用程序中执行许多任务。示例包括:
- 生成PDF表单以输入数据
- 以Excel格式导出表格数据
- 以PDF格式导出输入的数据
为了完成这些任务,我们可能会使用Microsoft Office Interop库。但它有一些缺点。例如,每台运行应用程序的客户端计算机都需要Microsoft Office许可证,并且所有客户端计算机都必须安装相同版本的Microsoft Excel。此外,Microsoft Office应用程序是用户界面(UI)应用程序,该API仅适用于Windows操作系统(而且即使在工作时也很缓慢)。
GrapeCity Document API是用于企业应用程序的超快速、低占用空间的API,可帮助我们快速高效地创建Excel电子表格、Word文档和PDF文档,而无需使用Microsoft Excel、Word或Adobe Acrobat。这些API还支持多个平台上的C#和Java应用程序。
让我们来看看一些用例,这些用例展示了我们可以使用GrapeCity Document API解决的问题。此处,代码示例使用C#进行演示,但我们可以使用Java编写相同的函数。
用例一在这个用例中,我们将在遗留文档管理和新应用程序之间架起一座桥梁。
假设我们的客户多年来一直使用Excel电子表格来创建和存储发票。他们最近为他们的发票购买了我们的新Web应用程序,他们希望将所有历史数据导入我们的系统。
我们希望找到一个可以解析Excel电子表格并以编程方式将Excel转换为PDF的文档API。GrapeCity Documents for Excel (GcExcel)是应对电子表格挑战的完美解决方案。我们可以在我们的服务器或桌面应用程序中使用GcExcel来创建、操作、转换和共享与Microsoft Excel兼容的电子表格。此外,我们几乎可以从任何应用程序和平台调用它。
将Excel解析为JSON
假设我们客户的旧Excel格式发票如下所示:
我们使用GcExcel .NET导入工作簿并从中收集数据。下面向您展示如何:
- 将单元格F1中的发票编号设为字符串数据类型
- 将单元格区域B5到B9中的“Bill To”信息设为数组
- 确保单元格范围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();
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)items;
String jsonString = JsonSerializer.Serialize(invoice);
File.WriteAllText("invoice.json", jsonString);
我们可以将数据保存到我们的数据库中,或者使用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 Document API,我们可以快速构建一个可填写的PDF表单,并将PDF表单中的条目解析为Excel电子表格。我们只需要两个模板:
- 我们需要一个包含各种字段的表单模板来创建PDF表单。有关如何使用表单域创建Excel模板的信息,请参阅GrapeCity的文档。
- 我们需要一个带有数据绑定字段的数据源模板来绑定从PDF表单解析的数据。有关如何创建带有数据绑定字段的Excel模板的信息,请参阅GrapeCity的文档。
要构建 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对象。
要获取表单条目,我们必须命名模板中的每个字段。例如,我们应该将名字和姓氏的表单字段定义为:
{{(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数据源模板,如下所示:
在模板中,我们将数据绑定字段定义为{{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(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(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存储库。
要了解Document API的其他功能,请查看以下链接:
- SpreadJS 查看器
- 创建时间表模板,填写并保护它
- 使用 GcWord API 创建有趣的文档
https://www.codeproject.com/Articles/5320317/Improving-User-Experience-with-Document-APIs