Jak převést Excel Worksheet do PDF s .NET

Jak převést Excel Worksheet do PDF s .NET

Tento článek ukazuje, jak konverzi souborů Excel do PDF s jednorázovým rozložení na straně pomocí aplikace Aspose.Cells LowCode PDF Converter v aplikacích .NET. PDF Konvertor poskytuje zjednodušený přístup k přeměně spreadsheets Excel na profesionálně formátované PDF dokumenty, aniž by vyžadovaly rozsáhlé kódování nebo hluboké znalosti interních struktur Excelu.

Reálný světový problém

Finanční analytici často potřebují převést víceúčelové finanční modely Excel do standardizovaných zpráv PDF, kde se každá pracovní deska zobrazí na vlastní stránce pro snadnější přezkum a tisk. Tradiční metody konverze buď kombinují všechny údaje na nepřetržitých stránkách nebo vyžadují ruční zpracování každého desky.

Řešení přehled

Pomocí programu Aspose.Cells LowCode PDF Converter můžeme tuto výzvu efektivně vyřešit s minimálním kódem. Toto řešení je ideální pro finanční profesionály, vývojáře zpráv a obchodní analytiky, kteří potřebují generovat profesionální zprávy PDF při zachování logického oddělení pracovních desek od svých zdrojů dat Excelu.

Předpoklady

Před provedením řešení se ujistěte, že máte:

  • Visual Studio 2019 nebo novější
  • • .NET 6.0 nebo novější (kompatibilní s .Net Framework 4.6.2+)
  • Aspose.Cells pro balíček .NET nainstalovaný prostřednictvím NuGet
  • Základní znalosti C# programování
PM> Install-Package Aspose.Cells

krok za krokem implementace

Krok 1: Instalace a nastavení Aspose.Cells

Přidejte do vašeho projektu balíček Aspose.Cells a zahrněte potřebné názevové prostory:

using Aspose.Cells;
using Aspose.Cells.LowCode;
using Aspose.Cells.Rendering;
using System;
using System.IO;

Krok 2: Připravte své vstupní údaje

Ujistěte se, že zdrojový soubor obsahuje několik pracovních desek, které chcete převést na oddělené stránky v 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);
}

Krok 3: Nastavení možností PDF Converter

Nastavení možností pro proces PDF Converter, který specifikuje nastavení jedné stránky na desku:

// 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;

Krok 4: Provedení procesu konverze PDF

Proveďte operaci PDF Converter s konfigurovanými možnostmi:

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
}

Krok 5: Sledujte výstup

Po konverzi byste mohli chtít otevřít PDF nebo jej dále zpracovat:

// 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.");
}

Krok 6: Řešení chyb

Přidejte správnou manipulaci s chybami, abyste zajistili robustní provoz:

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}");
}

Krok 7: Optimalizace výkonu

Zvažte tyto techniky optimalizace pro výrobní prostředí:

  • Použijte MemoryStream pro zpracování vysokého objemu:
// 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);
    }
}
  • Pro zpracování batchů znovu použijte předměty, pokud je to možné:
// 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);
}

Krok 8: Kompletní příklad provádění

Zde je kompletní pracovní příklad, který ukazuje celý proces:

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.");
        }
    }
}

Použití případů a aplikací

Enterprise Reporting Systémy

Finanční instituce mohou automatizovat generování standardizovaných zpráv PDF z datových modelů Excelu. Každá pracovní deska obsahující různé finanční metriky (balansové desky, zprávy o příjmech, projekce hotovosti) se objeví na vlastní stránce, udržuje jasnou separaci údajů a zároveň zajišťuje konzistentní formátování všech zpráv. To zlepšuje čitelnost členů rady, auditorů a regulačních recenzentů.

Regulační dokumentace generace

Organizace, které musí předložit standardizované finanční nebo provozní údaje regulačním orgánům, mohou své data založené na Excelu převést na odpovídající formáty PDF. Možnost jedné stránky na desku zajišťuje, že každý regulační formulář nebo datový soubor udržuje svou integritu a správný rozvrh při předložení elektronicky nebo v tisku, čímž se snižuje riziko souladu s chybami ve formátování.

Automatizované systémy distribuce zpráv

Prodejní nebo operační oddělení mohou implementovat automatizované systémy, kde jsou údaje Excelu pravidelně převáděny do profesionálních PDF pro distribuci zákazníkům nebo interním zúčastněným stranám. Formát jedné stránky na listy zajišťuje, že příjemci obdrží dobře strukturované dokumenty v nichž se každá obchodní jednotka, produktová řada nebo časová období zobrazuje na své vlastní stránce pro snadnější navigaci a analýzu.

Společné výzvy a řešení

Výzva 1: Velké desky rozšiřují hranice stránek

Rozhodnutí: Přizpůsobte možnosti PDF pro zacházení s velkými deskami změnou nastavení skalování:

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

Výzva 2: Přizpůsobené hlavičky a stopy, které se nezobrazují v PDF

Rozhodnutí: Implementace přizpůsobených hlaviček a nohou v PDF výstupu:

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");

Výzva 3: Obrázky a grafy, které se nesprávně zobrazují v PDF

Rozhodnutí: Zlepšete kvalitu obrazu a grafu pomocí těchto nastavení:

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

Úvahy o výkonu

  • Pro víceúčelové pracovní knihy může být proces paměťově intenzivní; uvažujte o zpracování souborů postupně, nikoli paralelně na systémy s omezenou pamětí.
  • Při konverzi velkých Excelových souborů použijte streamovací přístupy ke snížení používání paměti.
  • Pro opakované konverze stejného souboru s různými nastaveními, stáhněte soubory jednou do paměti a znovu jej použijte.
  • Vezměte v úvahu zavádění systému quouing pro prostředí s vysokým objemem pro správu využívání zdrojů.

Nejlepší postupy

  • Vždy ověřte vstupní soubory před zpracováním, aby se zabránilo výjimkám v provozním čase.
  • Provádění správné manipulace s chybami kolem operací souboru I/O a procesů konverze.
  • Nastavení odpovídajících norem PDF (PDF/A-1b, PDF 1.7) na základě vašich požadavků na archiv nebo distribuci.
  • Cache často používají soubory nebo šablony ke zlepšení výkonu pro opakované operace.
  • Zvažte provádění zpráv o pokroku pro dlouhodobé batchové konverze.

Pokročilé scénáře

Pro složitější požadavky, zvážit tyto pokročilé implementace:

Scénář 1: Selektivní konverze listů s přizpůsobenou orientací stránek

// 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);

Scénář 2: Přidání digitálních podpisů do generovaných 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);

závěr

Prováděním aplikace Aspose.Cells LowCode PDF Converter můžete efektivně převést víceúčelové pracovní knihy Excel do profesionálně formátovaných dokumentů PDF a udržovat logické oddělení pracovní desky s možností jedné stránky na desku. Tento přístup výrazně zjednodušuje procesy finančního a obchodního hlášení při zachování integrity dokumentu a profesionálního vzhledu.

Pro další informace a další příklady se podívejte na Aspose.Cells.LowCode API Reference .

 Čeština