Як перетворити Excel на PDF з .NET

Як перетворити 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 .

 Українська