Як перетворити Excel на PDF з .NET
Ця стаття показує, як конвертувати Excel-файли в PDF з одностороннім розташуванням на лист, використовуючи Aspose.Cells LowCode PDF Converter в .NET-прикладах. PDF-конвертер забезпечує ускладнений підхід до перетворення Excel Spreadsheets в професійно форматовані PDF документи без необхідності широкого кодування або глибоких знань про внутрішні структури Excel.
Реальні проблеми світу
Фінансові аналітики часто потребують перетворення багатофайлів Excel фінансових моделей в стандартизовані доповіді PDF, де кожен робочий лист з’являється на своїй сторінці для легкого перегляду і друку. Традиційні методи конверсії або поєднують всі дані на постійних сторінках або вимагають ручної обробки кожного листа. Крім того, в бізнес-середовищах ці трансформації повинні бути автоматизованими, послідовними і інтегрованими в існуючі робочі потоки.
Огляд рішення
Використовуючи Aspose.Cells LowCode PDF Converter, ми можемо ефективно вирішити цю проблему з мінімальним кодом.Це рішення ідеально підходить для фінансових фахівців, розробників звітів та бізнес-аналітиків, які повинні генерувати професійні звіти PDF, зберігаючи при цьому логічне відділення робочих столів від своїх джерел даних Excel.
Передумови
Перед тим, як реалізувати рішення, переконайтеся, що у вас є:
- Visual Studio 2019 або вище
- .NET 6.0 або пізніше (сумісний з .Net Framework 4.6.2+)
- Aspose.Cells для пакету .NET, встановленого через NuGet
- Основні поняття C# програмування
PM> Install-Package Aspose.Cells
Крок за кроком реалізація
Крок 1: Налаштувати і встановити Aspose.Cells
Додайте пакет Aspose.Cells до вашого проекту і включайте необхідні номінаційні простори:
using Aspose.Cells;
using Aspose.Cells.LowCode;
using Aspose.Cells.Rendering;
using System;
using System.IO;
Крок 2: Підготуйте свої вхідні дані
Переконайтеся, що джерело файлу містить кілька робочих сторінок, які ви хочете конвертувати на окремі сторінки в PDF:
// Define the path to your Excel file
string excelFilePath = "financial-report-template.xlsx";
// Ensure the file exists
if (!File.Exists(excelFilePath))
{
throw new FileNotFoundException("The specified Excel file was not found.", excelFilePath);
}
// Create output directory if it doesn't exist
string outputDirectory = "result";
if (!Directory.Exists(outputDirectory))
{
Directory.CreateDirectory(outputDirectory);
}
Крок 3: Налаштування варіантів PDF Converter
Налаштуйте варіанти для процесу PDF Converter, визначивши налаштування однієї сторінки на лист:
// Create the LowCode load options for the source file
LowCodeLoadOptions loadOptions = new LowCodeLoadOptions();
loadOptions.InputFile = excelFilePath;
// Create the LowCode PDF save options
LowCodePdfSaveOptions pdfSaveOptions = new LowCodePdfSaveOptions();
// Configure PDF-specific settings
PdfSaveOptions pdfOptions = new PdfSaveOptions();
pdfOptions.OnePagePerSheet = true; // This is the key setting for our requirement
// Optionally set additional PDF options
pdfOptions.Compliance = PdfCompliance.PdfA1b; // For archival compliance if needed
pdfOptions.AllColumnsInOnePagePerSheet = true; // Ensure all columns fit on one page
// Apply the PDF options to our save options
pdfSaveOptions.PdfOptions = pdfOptions;
// Set the output file path
string outputFilePath = Path.Combine(outputDirectory, "FinancialReport.pdf");
pdfSaveOptions.OutputFile = outputFilePath;
Крок 4: Виконання процесу конверсії PDF
Виконайте функцію PDF Converter з конфігурованими варіантами:
try
{
// Process the conversion using the LowCode PDF Converter
PdfConverter.Process(loadOptions, pdfSaveOptions);
Console.WriteLine($"Conversion completed successfully. PDF saved to: {outputFilePath}");
}
catch (Exception ex)
{
Console.WriteLine($"Error during conversion: {ex.Message}");
// Log the exception or handle it according to your application's requirements
}
Крок 5: Зробіть вихід
Після конвертації, можливо, ви хочете відкрити PDF або продовжити його обробку:
// Check if the output file was created
if (File.Exists(outputFilePath))
{
// Open the file using the default PDF viewer (optional)
try
{
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo
{
FileName = outputFilePath,
UseShellExecute = true
});
}
catch (Exception ex)
{
Console.WriteLine($"The file was created but could not be opened: {ex.Message}");
}
}
else
{
Console.WriteLine("The output file was not created.");
}
Крок 6: Використання помилок
Додайте правильний обробка помилок для забезпечення міцного функціонування:
try
{
// Create the load options
LowCodeLoadOptions loadOptions = new LowCodeLoadOptions();
// Verify input file exists before assigning
if (!File.Exists(excelFilePath))
{
throw new FileNotFoundException("Input Excel file not found", excelFilePath);
}
loadOptions.InputFile = excelFilePath;
// Create and configure PDF save options
LowCodePdfSaveOptions pdfSaveOptions = new LowCodePdfSaveOptions();
PdfSaveOptions pdfOptions = new PdfSaveOptions();
pdfOptions.OnePagePerSheet = true;
pdfSaveOptions.PdfOptions = pdfOptions;
pdfSaveOptions.OutputFile = outputFilePath;
// Execute conversion
PdfConverter.Process(loadOptions, pdfSaveOptions);
// Verify output was created
if (!File.Exists(outputFilePath))
{
throw new Exception("PDF conversion completed but output file was not created");
}
Console.WriteLine("Conversion successful!");
}
catch (CellsException cellsEx)
{
// Handle Aspose.Cells specific exceptions
Console.WriteLine($"Aspose.Cells error: {cellsEx.Message}");
// Consider logging the exception or custom handling based on cellsEx.Code
}
catch (IOException ioEx)
{
// Handle file IO exceptions
Console.WriteLine($"File operation error: {ioEx.Message}");
}
catch (Exception ex)
{
// Handle other exceptions
Console.WriteLine($"General error: {ex.Message}");
}
Крок 7: Оптимізація продуктивності
Розглянемо такі методи оптимізації для виробничих середовищ:
- Використовуйте MemoryStream для обробки високого обсягу:
// For high-volume processing, using memory streams can be more efficient
using (MemoryStream outputStream = new MemoryStream())
{
// Configure save options to use memory stream
LowCodePdfSaveOptions pdfSaveOptions = new LowCodePdfSaveOptions();
pdfSaveOptions.OutputStream = outputStream;
pdfSaveOptions.PdfOptions = new PdfSaveOptions { OnePagePerSheet = true };
// Process the conversion
PdfConverter.Process(loadOptions, pdfSaveOptions);
// Now you can use the stream as needed (save to file, send via network, etc.)
outputStream.Position = 0;
using (FileStream fileStream = File.Create(outputFilePath))
{
outputStream.CopyTo(fileStream);
}
}
- Для обробки штукатур, повторне використання об’єктів, коли це можливо:
// Create PDF options once and reuse
PdfSaveOptions pdfOptions = new PdfSaveOptions { OnePagePerSheet = true };
// Process multiple files
foreach (string excelFile in Directory.GetFiles("input-directory", "*.xlsx"))
{
LowCodeLoadOptions loadOptions = new LowCodeLoadOptions { InputFile = excelFile };
LowCodePdfSaveOptions saveOptions = new LowCodePdfSaveOptions
{
PdfOptions = pdfOptions,
OutputFile = Path.Combine("output-directory", Path.GetFileNameWithoutExtension(excelFile) + ".pdf")
};
PdfConverter.Process(loadOptions, saveOptions);
}
Крок 8: Повний приклад реалізації
Ось повний робочий приклад, який демонструє весь процес:
using Aspose.Cells;
using Aspose.Cells.LowCode;
using Aspose.Cells.Rendering;
using System;
using System.IO;
namespace ExcelToPdfConverter
{
class Program
{
static void Main(string[] args)
{
// Define input and output paths
string inputDirectory = "input-files";
string outputDirectory = "result";
string excelFilePath = Path.Combine(inputDirectory, "financial-report.xlsx");
// Ensure directories exist
Directory.CreateDirectory(outputDirectory);
try
{
Console.WriteLine($"Converting {excelFilePath} to PDF...");
// Simple one-line approach (less customization)
string quickOutputPath = Path.Combine(outputDirectory, "QuickOutput.pdf");
PdfConverter.Process(excelFilePath, quickOutputPath);
Console.WriteLine($"Basic conversion completed: {quickOutputPath}");
// Advanced approach with custom options
// Setup load options
LowCodeLoadOptions loadOptions = new LowCodeLoadOptions
{
InputFile = excelFilePath
};
// Setup PDF save options with specific settings
LowCodePdfSaveOptions pdfSaveOptions = new LowCodePdfSaveOptions();
PdfSaveOptions pdfOptions = new PdfSaveOptions
{
OnePagePerSheet = true,
Compliance = PdfCompliance.PdfA1b,
PrintingPageType = PrintingPageType.ActualSize
};
pdfSaveOptions.PdfOptions = pdfOptions;
string customOutputPath = Path.Combine(outputDirectory, "CustomOutput.pdf");
pdfSaveOptions.OutputFile = customOutputPath;
// Execute the conversion
PdfConverter.Process(loadOptions, pdfSaveOptions);
Console.WriteLine($"Advanced conversion completed: {customOutputPath}");
// Batch processing example
BatchProcessExcelFiles(inputDirectory, outputDirectory);
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
static void BatchProcessExcelFiles(string inputDir, string outputDir)
{
// Get all Excel files
string[] excelFiles = Directory.GetFiles(inputDir, "*.xlsx");
if (excelFiles.Length == 0)
{
Console.WriteLine("No Excel files found for batch processing.");
return;
}
// Create reusable PDF options
PdfSaveOptions pdfOptions = new PdfSaveOptions
{
OnePagePerSheet = true
};
Console.WriteLine($"Batch processing {excelFiles.Length} files...");
foreach (string file in excelFiles)
{
try
{
string fileName = Path.GetFileNameWithoutExtension(file);
string outputPath = Path.Combine(outputDir, $"{fileName}.pdf");
// Configure options
LowCodeLoadOptions loadOptions = new LowCodeLoadOptions
{
InputFile = file
};
LowCodePdfSaveOptions saveOptions = new LowCodePdfSaveOptions
{
PdfOptions = pdfOptions,
OutputFile = outputPath
};
// Process conversion
PdfConverter.Process(loadOptions, saveOptions);
Console.WriteLine($"Converted: {Path.GetFileName(file)} -> {Path.GetFileName(outputPath)}");
}
catch (Exception ex)
{
Console.WriteLine($"Error processing {Path.GetFileName(file)}: {ex.Message}");
}
}
Console.WriteLine("Batch processing completed.");
}
}
}
Використання випадків та додатків
Системи корпоративного звітування
Фінансові інститути можуть автоматизувати генерацію стандартизованих звітів PDF з моделей даних Excel. Кожен робочий лист, що містить різні фінансові метрики (баланси, звіти про прибуток, прогнози потоку грошових коштів) з’являється на своїй сторінці, зберігаючи чіткий розрив даних, а також забезпечуючи консистентну форматування по всьому звіту.
Регулярне дотримання документа покоління
Організації, які повинні подавати стандартизовані фінансові або операційні дані регуляторним органам, можуть конвертувати свої дани на основі Excel у відповідні формати PDF. Опозиція однієї сторінки на лист гарантує, що кожен нормативний формат або набір даних зберігає свою цілісність і правильне розташування, коли вони подаються електронно або в друкованому вигляді, зменшуючи ризик відповідності від помилок у форматі.
Автоматичні системи розповсюдження звітів
Продажі або операційні відділи можуть впроваджувати автоматизовані системи, де дані Excel регулярно конвертуються в професійні PDF-файли для розповсюдження клієнтам або внутрішнім зацікавленим сторонам. Формат однієї сторінки на лист гарантує, що одержувачі отримують добре структуровані документи, в яких кожна бізнес-одиниця, лінія продукту або період часу з’являється на своїй сторінці для полегшення навігації та аналізу.
Спільні виклики та рішення
Виклик 1: Великі робочі листи розширюються за межі сторінки
Рішення: Налаштуйте варіанти PDF для обробки великих робочих сторінок, змінюючи налаштування масштабування:
PdfSaveOptions pdfOptions = new PdfSaveOptions();
pdfOptions.OnePagePerSheet = true;
pdfOptions.AllColumnsInOnePagePerSheet = false; // Let large sheets span multiple pages horizontally
pdfOptions.WidthFitToPagesCount = 2; // Allow up to 2 pages for width if needed
Виклик 2: Налаштування заголовків і футів, які не з’являються в PDF
Рішення: Введення налаштуваних голов і ног в PDF-вихід:
PdfSaveOptions pdfOptions = new PdfSaveOptions();
pdfOptions.OnePagePerSheet = true;
// Add custom header and footer
pdfOptions.IsCustomPrintAreaSet = true;
pdfOptions.CustomPrintPageTopMargin = 50;
pdfOptions.CustomPrintPageBottomMargin = 50;
pdfOptions.HeaderFooterManager.SetHeader(HeaderFooterType.FirstPage, "Company Financial Report");
pdfOptions.HeaderFooterManager.SetFooter(HeaderFooterType.AllPages, "&P of &N");
Виклик 3: Зображення та графіки, що з’являються неправильно в PDF
Рішення: Підвищує якість зображення та графіку за допомогою наступних налаштувань:
PdfSaveOptions pdfOptions = new PdfSaveOptions();
pdfOptions.OnePagePerSheet = true;
pdfOptions.Quality = 100; // Highest quality setting
pdfOptions.DefaultEditLanguage = EditLanguage.Default; // Proper text rendering
pdfOptions.CheckFontCompatibility = true; // Ensure fonts are compatible
Виконання розглядів
- Для мультимедійних робочих книг процес може бути пам’ятно-інтенсивним; розглянемо обробку файлів послідовно, а не паралельно на системах, обмежених пам’яттю.
- При конвертації великих Excel-файлів використовуйте поточні підходи для зменшення використання пам’яті.
- Для повторних конверсій одного і того ж файлу з різними налаштуваннями, завантажити файл один раз в пам’ять і повторно використовувати його.
- Розглянемо можливість впровадження системи квінгування для середовищ високого обсягу для управління використанням ресурсів.
Найкращі практики
- Завжди підтверджуйте вхідні файли перед обробкою, щоб уникнути винятків з робочого часу.
- Впровадження правильного обробки помилок навколо операцій файлу I/O та процесів конверсії.
- Налаштуйте відповідні стандарти дотримання PDF (PDF/A-1b, PDF 1.7) на основі ваших вимог до архіву або розповсюдження.
- Каше часто використовують файли або шаблони для поліпшення продуктивності для повторних операцій.
- Розглянемо реалізацію доповіді про прогрес для довгострокових конверсій.
Розширені сценарії
Для більш складних вимог розглянемо такі передові реалізації:
Сценарій 1: Вибіркова конвертація листівки з персоналізованою ориентацією сторінки
// Create load options
LowCodeLoadOptions loadOptions = new LowCodeLoadOptions();
loadOptions.InputFile = "multi-sheet-report.xlsx";
// Create PDF save options with advanced settings
LowCodePdfSaveOptions pdfSaveOptions = new LowCodePdfSaveOptions();
PdfSaveOptions pdfOptions = new PdfSaveOptions();
pdfOptions.OnePagePerSheet = true;
// Only convert specific sheets
Workbook workbook = new Workbook(loadOptions.InputFile);
pdfOptions.SheetSet = new Aspose.Cells.Rendering.SheetSet(new int[] { 0, 2, 3 }); // Select specific sheets by index
// Set page orientation based on sheet content
foreach (Worksheet sheet in workbook.Worksheets)
{
if (sheet.Cells.MaxColumn > 10) // Wide sheets get landscape orientation
{
PageSetup pageSetup = sheet.PageSetup;
pageSetup.Orientation = PageOrientationType.Landscape;
}
}
pdfSaveOptions.PdfOptions = pdfOptions;
pdfSaveOptions.OutputFile = "selective-sheets-report.pdf";
// Process the conversion
PdfConverter.Process(loadOptions, pdfSaveOptions);
Сценарій 2: Додавання цифрових підписів до генеруваних PDF-файлів
// Standard conversion setup
LowCodeLoadOptions loadOptions = new LowCodeLoadOptions();
loadOptions.InputFile = "financial-statement.xlsx";
LowCodePdfSaveOptions pdfSaveOptions = new LowCodePdfSaveOptions();
PdfSaveOptions pdfOptions = new PdfSaveOptions();
pdfOptions.OnePagePerSheet = true;
// Set up digital signature parameters
pdfOptions.DigitalSignature = new DigitalSignature();
pdfOptions.DigitalSignature.CertificateFilePath = "signature-certificate.pfx";
pdfOptions.DigitalSignature.Password = "certificate-password";
pdfOptions.DigitalSignature.Reason = "Financial approval";
pdfOptions.DigitalSignature.Location = "Finance Department";
pdfOptions.DigitalSignature.SignatureDate = DateTime.Now;
pdfSaveOptions.PdfOptions = pdfOptions;
pdfSaveOptions.OutputFile = "signed-financial-report.pdf";
// Process the conversion with digital signature
PdfConverter.Process(loadOptions, pdfSaveOptions);
Заключення
Завдяки впровадженню Aspose.Cells LowCode PDF Converter, ви можете ефективно перетворити багатофайльні Excel робочі книги в професійно форматировані PDF-документи і підтримувати логічне розділення робочого столу з опцією однієї сторінки на лист. Цей підхід значно стримує фінансові та бізнес-репортажних процесів, зберігаючи цілісність документів і професійний вигляд.
Для отримання додаткової інформації та додаткових прикладів зверніться до Завантажити Aspose.Cells.LowCode API .