Данные каждый раз корректно вставляются в Excel, но когда они достигают строка преобразования («pdf.ConvertFile(excelFile, pdfFile);»), программа выдает мне исключение («System.Exception: 'Текст не может содержать символы с кодом меньше 32 (пробел). Для этих символов используйте экземпляр SpecialCharacter .'").
Я уже пробовал каждое регулярное выражение или входную строку, оно всегда дает мне один и тот же совет. Когда я запускаю программу, не вставляя что-либо в Excel через EPPlus, преобразование работает нормально.
Я считаю, что способ вставки строк в лист EPPlus использует недопустимые символы, но я этого не делаю. Не знаю, как это исправить.
Я использую EPPlus для вставки данных в лист, SautinSoft для преобразования XLSX2PDF и PdfSharp для удаления пустой страницы PDF-файла. Уже попробовал Aspose, программа заработала так, как я хотел, но водяной знак слишком скандальный.
Код: Выделить всё
using System;
using System.IO;
using PdfSharp.Pdf.IO;
using PdfSharp.Pdf;
using SautinSoft;
using OfficeOpenXml;
using System.Text.RegularExpressions;
using System.Runtime.CompilerServices;
namespace ToPDF
{
class Program
{
static void Main(string[] args)
{
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
string ExcelPath = "/Documents/Planilhas/Plant.xlsx";
Program p = new Program();
using (var package = new ExcelPackage(new FileInfo(ExcelPath)))
{
ExcelWorksheet capa = package.Workbook.Worksheets[0];
ExcelWorksheet UNS = package.Workbook.Worksheets[1];
ExcelWorksheet Sheet1 = package.Workbook.Worksheets[2];
p.InsertInto(Sheet1, "C4", $"{DateTime.Now.Year}/{DateTime.Now.Month}");
package.Save();
}
p.Xlsx2Pdf(ExcelPath);
}
private void InsertInto(ExcelWorksheet worksheet, string celula, string valor)
{
string cleanValor = CleanInput(valor);
worksheet.Cells[celula].Value = cleanValor;
}
private static string CleanInput(string input)
{
return Regex.Replace(input, @"[\x00-\x1F]", "");
}
private void Xlsx2Pdf(string excelFile)
{
ExcelToPdf pdf = new ExcelToPdf();
pdf.OutputFormat = SautinSoft.ExcelToPdf.eOutputFormat.Pdf;
string pdfFile = Path.ChangeExtension(excelFile, ".pdf");
pdf.PageStyle.PageScale.FitByHeight();
pdf.ConvertFile(excelFile, pdfFile);
PdfDocument p = PdfReader.Open(pdfFile, PdfDocumentOpenMode.Modify);
int page = 1;
p.Pages.RemoveAt(page);
p.Save(pdfFile);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/788 ... lsx-to-pdf