Spire.XLS is a professional Excel API that enables developers to create, manage, manipulate, convert and print Excel worksheets. Get free and professional technical support for Spire.XLS for .NET, Java, Android, C++, Python.

Mon Nov 25, 2024 6:06 am

This is my method:
public async Task<IActionResult> ConvertToPdf([FromQuery] Shop_Menu_Nutrition_Bom entity)
{
try
{
var rootPath = ConfigHelper.GetValue<string>("rootPath");
Directory.CreateDirectory(rootPath + "/Upfile/Temporary/Tempfile");
string p = ("/Upfile/Temporary/Tempfile");
var uploadPath = rootPath + p;
var tempPath = rootPath + "/Upfile/Template/";

var list = await _shopMenuBormBll.GetBormList(entity);
foreach (var item in list)
{
List<TemplateDataModel> templateDataModels = new List<TemplateDataModel>();
ExcelConfig excelconfig = new ExcelConfig();
excelconfig.Title = "导出";
excelconfig.TitleFont = "微软雅黑";
excelconfig.TitlePoint = 25;
excelconfig.FileName = "数据.xlsx";
excelconfig.IsAllSizeColumn = true;
////每一列的设置,没有设置的列信息,系统将按datatable中的列名导出

templateDataModels.Add(new TemplateDataModel { cell = 1, row = 1, value = item.MenuInfo.Menu_Name });
//体重
if (item.EatRed.body_weight == 1)
{
templateDataModels.Add(new TemplateDataModel { cell = 1, row = 6, datatype = "backgroundColor", backgroundColor = "green" });
}
else if (item.EatRed.body_weight == 2)
{
templateDataModels.Add(new TemplateDataModel { cell = 2, row = 6, datatype = "backgroundColor", backgroundColor = "yellow" });
}
else if (item.EatRed.body_weight == 3)
{
templateDataModels.Add(new TemplateDataModel { cell = 3, row = 6, datatype = "backgroundColor", backgroundColor = "red" });
}

//血糖
if (item.EatRed.blood_sugar == 1)
{
templateDataModels.Add(new TemplateDataModel { cell = 1, row = 7, datatype = "backgroundColor", backgroundColor = "green" });
}
else if (item.EatRed.blood_sugar == 2)
{
templateDataModels.Add(new TemplateDataModel { cell = 2, row = 7, datatype = "backgroundColor", backgroundColor = "yellow" });
}
else if (item.EatRed.blood_sugar == 3)
{
templateDataModels.Add(new TemplateDataModel { cell = 3, row = 7, datatype = "backgroundColor", backgroundColor = "red" });
}

//血脂
if (item.EatRed.blood_lipids == 1)
{
templateDataModels.Add(new TemplateDataModel { cell = 1, row = 8, datatype = "backgroundColor", backgroundColor = "green" });
}
else if (item.EatRed.blood_lipids == 2)
{
templateDataModels.Add(new TemplateDataModel { cell = 2, row = 8, datatype = "backgroundColor", backgroundColor = "yellow" });
}
else if (item.EatRed.blood_lipids == 3)
{
templateDataModels.Add(new TemplateDataModel { cell = 3, row = 8, datatype = "backgroundColor", backgroundColor = "red" });
}

//血尿酸
if (item.EatRed.blood_uric_acid == 1)
{
templateDataModels.Add(new TemplateDataModel { cell = 1, row = 9, datatype = "backgroundColor", backgroundColor = "green" });
}
else if (item.EatRed.blood_uric_acid == 2)
{
templateDataModels.Add(new TemplateDataModel { cell = 2, row = 9, datatype = "backgroundColor", backgroundColor = "yellow" });
}
else if (item.EatRed.blood_uric_acid == 3)
{
templateDataModels.Add(new TemplateDataModel { cell = 3, row = 9, datatype = "backgroundColor", backgroundColor = "red" });
}

//血压
if (item.EatRed.blood_pressure == 1)
{
templateDataModels.Add(new TemplateDataModel { cell = 1, row = 10, datatype = "backgroundColor", backgroundColor = "green" });
}
else if (item.EatRed.blood_pressure == 2)
{
templateDataModels.Add(new TemplateDataModel { cell = 2, row = 10, datatype = "backgroundColor", backgroundColor = "yellow" });
}
else if (item.EatRed.blood_pressure == 3)
{
templateDataModels.Add(new TemplateDataModel { cell = 3, row = 10, datatype = "backgroundColor", backgroundColor = "red" });
}

templateDataModels.Add(new TemplateDataModel { cell = 14, row = 4, value = Math.Round((decimal)item.Gram.energyKcal, 0) + "千卡(Kcal)" });
templateDataModels.Add(new TemplateDataModel { cell = 16, row = 4, value = item.Gram.energyKcalNRV });

templateDataModels.Add(new TemplateDataModel { cell = 14, row = 5, value = item.Gram.protein.ToString() + "克(g)" });
templateDataModels.Add(new TemplateDataModel { cell = 16, row = 5, value = item.Gram.proteinNRV });

templateDataModels.Add(new TemplateDataModel { cell = 14, row = 6, value = item.Gram.fat.ToString() + "克(g)" });
templateDataModels.Add(new TemplateDataModel { cell = 16, row = 6, value = item.Gram.fatNRV });

templateDataModels.Add(new TemplateDataModel { cell = 14, row = 7, value = item.Gram.cho.ToString() + "克(g)" });
templateDataModels.Add(new TemplateDataModel { cell = 16, row = 7, value = item.Gram.choNRV });

templateDataModels.Add(new TemplateDataModel { cell = 14, row = 8, value = item.Gram.sugar.ToString() + "克(g)" });
templateDataModels.Add(new TemplateDataModel { cell = 16, row = 8, value = item.Gram.sugarNRV });

templateDataModels.Add(new TemplateDataModel { cell = 14, row = 9, value = Math.Round((decimal)item.Gram.na) + "毫克(mg)/" + item.Gram.salt.ToString() + "克(g)" });
templateDataModels.Add(new TemplateDataModel { cell = 16, row = 9, value = item.Gram.naNRV });

templateDataModels.Add(new TemplateDataModel { cell = 0, row = 15, value = item.TotalElement.energyKcal.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 1, row = 15, value = item.TotalElement.protein.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 2, row = 15, value = item.TotalElement.proteinAnima.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 3, row = 15, value = item.TotalElement.proteinBeans.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 4, row = 15, value = item.TotalElement.proteinOther.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 5, row = 15, value = item.TotalElement.fat.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 6, row = 15, value = item.TotalElement.cho.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 8, row = 15, value = item.TotalElement.dietaryFiber.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 10, row = 15, value = item.TotalElement.cholesterol.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 11, row = 15, value = item.TotalElement.ash.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 12, row = 15, value = item.TotalElement.vitaminA.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 13, row = 15, value = item.TotalElement.cartotene.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 14, row = 15, value = item.TotalElement.retinol.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 15, row = 15, value = item.TotalElement.thiamin.ToString() });

templateDataModels.Add(new TemplateDataModel { cell = 0, row = 19, value = item.TotalElement.riboflavin.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 1, row = 19, value = item.TotalElement.niacin.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 2, row = 19, value = item.TotalElement.vitaminC.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 3, row = 19, value = item.TotalElement.vitaminE_total.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 4, row = 19, value = item.TotalElement.vitaminE_α.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 5, row = 19, value = item.TotalElement.vitaminE_β_γ.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 6, row = 19, value = item.TotalElement.vitaminE_δ.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 7, row = 19, value = item.TotalElement.ca.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 8, row = 19, value = item.TotalElement.p.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 9, row = 19, value = item.TotalElement.k.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 10, row = 19, value = item.TotalElement.na.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 11, row = 19, value = item.TotalElement.mg.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 12, row = 19, value = item.TotalElement.fe.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 13, row = 19, value = item.TotalElement.zn.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 14, row = 19, value = item.TotalElement.se.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 15, row = 19, value = item.TotalElement.cu.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 16, row = 19, value = item.TotalElement.mn.ToString() });

var fileName = "餐饮食品红绿灯营养标识信息_" + item.MenuInfo.Menu_Name + "_" + DateTime.Now.ToString("yyyyMMdd") + "_" + GetRealName() + ".xls";
var pdfName = "餐饮食品红绿灯营养标识信息_" + item.MenuInfo.Menu_Name + "_" + DateTime.Now.ToString("yyyyMMdd") + "_" + GetRealName() + ".pdf";
var memoryStream = ExcelHelper.ExportListByTempale(templateDataModels, tempPath + "餐饮食品红绿灯营养标识信息.xls");
using (FileStream file = new FileStream(uploadPath + "/" + fileName, FileMode.Create, System.IO.FileAccess.Write))
memoryStream.CopyTo(file);
string pdfPath = Path.ChangeExtension(uploadPath + "/" + fileName, ".pdf");


try
{
if (System.IO.File.Exists(uploadPath + "/" + fileName))
{
Workbook workbook = new Workbook();
workbook.LoadFromFile(uploadPath + "/" + fileName);
//设置内容适应页面宽度
workbook.ConverterSetting.SheetFitToWidth = true;

workbook.SaveToFile(pdfPath, Spire.Xls.FileFormat.PDF);
}
}
catch (NullReferenceException ex)
{
_logger.LogError("发生 NullReferenceException: " + ex.Message);
_logger.LogError(ex.StackTrace);
}
catch (FileNotFoundException ex)
{
_logger.LogError("发生 FileNotFoundException: " + ex.Message);
_logger.LogError(ex.StackTrace);
}
catch (Exception ex)
{
_logger.LogError("发生未知异常: " + ex.Message);
_logger.LogError(ex.StackTrace);
}

}
string[] files = Directory.GetFiles(rootPath + "/Upfile/Temporary/Tempfile", "*.xls");
foreach (string file in files)
{
System.IO.File.Delete(file);
}
var sourthPath = uploadPath;//需要压缩的文件夹
var zipPath = string.Format("BormPdf_{0:yyyyMMdd_HHmmss}", DateTime.Now) + ".zip";
var zipFile = rootPath + "/Upfile/Zip/";//压缩需要创建的文件夹

SharpZipHelper.PackFiles(zipFile, zipPath, sourthPath);

Directory.Delete(rootPath + "/Upfile/Temporary/Tempfile", true); // 删除临时文件夹
return Success("/Upfile/Zip/" + zipPath);

}
catch (Exception ex)
{
return StatusCode(500, ex.Message);
}
}
The error information is as follows:
[2024-11-25 13:52:52,481 ][.NET ThreadPool Worker]发生未知异常: The type initializer for 'Spire.Xls.Core.Spreadsheet.XlsPageSetupBase' threw an exception.
[2024-11-25 13:52:52,498 ][.NET ThreadPool Worker] at Spire.Xls.Core.Spreadsheet.XlsPageSetupBase..ctor(Object A_0)
at Spire.Xls.Core.Spreadsheet.XlsPageSetup..ctor(Object A_0)
at Spire.Xls.PageSetup..ctor(Object A_0)
at Spire.Xls.Core.Spreadsheet.XlsWorksheet.InitializeCollections()
at Spire.Xls.Core.Spreadsheet.XlsWorksheetBase..ctor(Object A_0)
at Spire.Xls.Core.Spreadsheet.XlsWorksheet..ctor(Object A_0)
at Spire.Xls.Worksheet..ctor(Object A_0)
at Spire.Xls.Core.Spreadsheet.Collections.XlsWorksheetsCollection.Add(String sheetName)
at Spire.Xls.Core.Spreadsheet.XlsWorkbook.帰(Int32 A_0)
at Spire.Xls.Core.Spreadsheet.XlsWorkbook..ctor(Object A_0)
at Spire.Xls.Workbook..ctor()
at somal.api.Areas.Shop.Controllers.ShopMenuBormController.ConvertToPdf(Shop_Menu_Nutrition_Bom entity) in E:\MyWork\ctms.nutrition\webapi\somal.api\Areas\Shop\Controllers\ShopMenuBormController.cs:line 844

Explosion
 
Posts: 5
Joined: Mon Nov 25, 2024 6:02 am

Mon Nov 25, 2024 6:52 am

Hi,

Thank you for your message.
To better assist you in resolving your issue, please provide the following information for our further investigation. We appreciate your cooperation.

1. Your Excel file
2. System information (e.g., Windows 11)
3. Your framework information (e.g., .NET 6)

Sincerely,
Doris
E-iceblue support team
User avatar

Doris.Liu
 
Posts: 460
Joined: Mon Nov 07, 2022 8:10 am

Mon Nov 25, 2024 6:56 am

Attached is the excel template I used in the code
.net version is 6.0
The local system is windows10,The project is deployed on debian12
Attachments
餐饮食品红绿灯营养标识信息.zip
(8.36 KiB) Downloaded 972 times

Explosion
 
Posts: 5
Joined: Mon Nov 25, 2024 6:02 am

Mon Nov 25, 2024 8:57 am

Hi,

Thank you for your reply.
Could you please specify whether this error occurs on Windows 10 or Debian 12, or if it occurs on both? If it's Debian 12, the error seems to be caused by the unsupported System.Drawing.Common library in .NET 6 and later frameworks on Linux. In this case, it is recommended to use the version for "for.NETStandard".
Additionally, since the code you provided contains custom Class, I cannot directly use all of it for testing. I tested the PDF conversion part using the latest version of Spire.XLS 14.10.2, but did not encounter any errors. Based on the above, please test again using Spire.XLSfor.NETStandard 14.10.2 and install the dependency SkiaSharp.NativeAssets.Linux.NoDependencies version 2.88.9. If you encounter issues when using the latest version or testing on Windows, please pinpoint the exact code where the error occurs so that we can further investigate and provide you with a solution. Thanks in advance.

Spire.XLSfor.NETStandard 14.10.2: https://www.nuget.org/packages/Spire.Xlsfor.NETStandard

Sincerely,
Doris
E-iceblue support team
User avatar

Doris.Liu
 
Posts: 460
Joined: Mon Nov 07, 2022 8:10 am

Mon Nov 25, 2024 9:34 am

Hello, this problem appears on debian system, there is no problem on windows system,Just tried the method you provided,Replaced the package,
However, it does not work on debian systems, indicating that the file is corrupt,And PDFS on windows systems also have watermarks,I would like to ask if there is a free version that can solve my problem,thanks

Explosion
 
Posts: 5
Joined: Mon Nov 25, 2024 6:02 am

Tue Nov 26, 2024 2:49 am

Hi,

Thank you for reply.
If the error only occurs on Debian 12, it is due to the fact that the Linux platform no longer supports the System.Drawing.Common library from .NET 6 onwards. Please download and unzip the free version from the link below, and then install the .msi file inside. After installation, please navigate to the Bin directory under the installation path, import the dll for netstandard2.0, and follow the instructions in the "Readme.txt" file in the Bin directory to install additional dependencies, including the SkiaSharp.NativeAssets.Linux.NoDependencies version 2.88.9 mentioned yesterday.
Please note that the free version has limitations of 5 worksheets per document and 200 rows per worksheet. Additionally, we rarely maintain the free version and do not provide any technical support for free version customers. If you encounter any issues, it is recommended to first verify using the latest commercial version.

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

Sincerely,
Doris
E-iceblue support team
User avatar

Doris.Liu
 
Posts: 460
Joined: Mon Nov 07, 2022 8:10 am

Tue Nov 26, 2024 3:54 am

Hello, I have replaced the dll file, and according to the Readme.txt file, Imports System. Text. Encoding. CodePages9.0.0, System. Security. Cryptography. Xml9.0.0, System. Security. Permissions9.0.0, System. The Sec Urity. Cryptography. Pkcs9.0.0, System. Buffers4.6.0, System. Memory4.6.0, the question now is in the PDF font display not to come out, and assess the warning, for details please see the attachment, the attachment is my PDF export
Attachments
BormPdf_20241126_114643.zip
(25.85 KiB) Downloaded 1005 times

Explosion
 
Posts: 5
Joined: Mon Nov 25, 2024 6:02 am

Tue Nov 26, 2024 9:31 am

Hello,

I tested the free version and did not encounter any watermark issues. Please check if the DLL you are using is the free version and consider cleaning up your VS project. Regarding the issue of text not being output correctly, please note that when converting to PDF, you need to have the fonts used in the Excel file installed in your environment. Please install the corresponding fonts and test again. If you encounter any further problems, welcome to get back to us.

Sincerely,
Doris
E-iceblue support team
User avatar

Doris.Liu
 
Posts: 460
Joined: Mon Nov 07, 2022 8:10 am

Wed Nov 27, 2024 1:57 am

Thank you. The problem has been solved

Explosion
 
Posts: 5
Joined: Mon Nov 25, 2024 6:02 am

Wed Nov 27, 2024 6:24 am

Hi,

You're welcome~ Thank you for your feedback.

Sincerely,
Doris
E-iceblue support team
User avatar

Doris.Liu
 
Posts: 460
Joined: Mon Nov 07, 2022 8:10 am

Return to Spire.XLS