چگونه برای تبدیل Excel ورودی به PDF با .NET

چگونه برای تبدیل Excel ورودی به PDF با .NET

این مقاله نشان می دهد که چگونه برای تبدیل فایل های Excel به PDF با یک طرح یک صفحه به صفحه با استفاده از Aspose.Cells LowCode PDF Converter در برنامه های .NET. PDF Converter یک رویکرد پیچیده برای تبدیل صفحه های Excel به اسناد PDF حرفه ای بدون نیاز به کدگذاری گسترده و یا دانش عمیق از ساختارهای داخلی Excel.

مشکل دنیای واقعی

تحلیلگران مالی اغلب نیاز به تبدیل مدل های مالی چند صفحه ای اکسل به گزارش های PDF استاندارد که در آن هر ورق کار در صفحه خود برای بررسی و چاپ آسان تر ظاهر می شود. روش های تبدیل سنتی یا ترکیبی از تمام داده ها در صفحات مداوم و یا نیاز به پردازش دستی از هر ورق. علاوه بر این، در محیط های کسب و کار، این تبدیل باید به اتوماتیک، سازگار و ادغام در جریان های کار موجود.

بررسی راه حل

با استفاده از Aspose.Cells LowCode PDF Converter، ما می توانیم این چالش را به طور موثر با کد حداقل حل کنیم.این راه حل ایده آل برای حرفه ای های مالی، توسعه دهندگان گزارش و تحلیلگران کسب و کار است که نیاز به تولید گزارش های PDF حرفه ای دارند در حالی که از جدا کردن منطقی ورق های کار از منابع داده های اکسل خود حفظ می شود.


پیش شرط

قبل از راه حل، مطمئن شوید که:

  1. Visual Studio 2019 یا بعد از آن
  2. .NET 6.0 یا بالاتر (مطابق با .NET Framework 4.6.2+)
  3. Aspose.Cells for .NET package installed via NuGet
  4. مفهوم برنامه نویسی C#
PM> Install-Package Aspose.Cells

مرحله به مرحله اجرای

مرحله اول: نصب و تنظیم Aspose.Cells

بسته Aspose.Cells را به پروژه خود اضافه کنید و فضاهای نامی مورد نیاز را شامل کنید:

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

مرحله دوم: اطلاعات ورودی خود را آماده کنید

برای این مثال، ما از یک فایل Excel موجود استفاده خواهیم کرد. اطمینان حاصل کنید که فایل منبع شما حاوی چندین صفحه کار است که شما می خواهید به صفحات جداگانه در 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 را با مشخص کردن تنظیمات یک صفحه به صفحه تنظیم کنید:

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

مرحله 6: ادغام قابلیت تبدیل 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
}

مرحله پنجم: خروجی را مدیریت کنید

پس از تبدیل، ممکن است بخواهید فایل PDF را باز کنید یا آن را پردازش کنید:

string outputFilePath = "output.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.");
}

مرحله ششم: راه حل اشتباهات

برای انجام کارهای سخت، خطای مناسب را اضافه کنید:

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

مرحله هفتم: بهینه سازی عملکرد

این تکنیک ها را برای محیط های تولید در نظر بگیرید:

  1. استفاده از جریان های حافظه برای پردازش حجم بالا:
using System.IO;
using Aspose.Cells;
using Aspose.Cells.LowCode;

var loadOptions = new LowCodeLoadOptions();
loadOptions.InputFile = "sample.xlsx";
string outputFilePath = "output.pdf";

using (MemoryStream outputStream = new MemoryStream())
{
    LowCodePdfSaveOptions pdfSaveOptions = new LowCodePdfSaveOptions();
    pdfSaveOptions.OutputStream = outputStream;
    pdfSaveOptions.PdfOptions = new PdfSaveOptions { OnePagePerSheet = true };
    
    PdfConverter.Process(loadOptions, pdfSaveOptions);
    
    outputStream.Position = 0;
    using (FileStream fileStream = File.Create(outputFilePath))
    {
        outputStream.CopyTo(fileStream);
    }
}
  1. برای پردازش بسته، در صورت امکان از اشیاء استفاده مجدد کنید:
// 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);
}

مرحله هشتم: نمونه کامل

در اینجا یک نمونه کامل از کار است که نشان دهنده کل فرآیند:

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 = ".";
            string outputDirectory = "result";
            string excelFilePath = Path.Combine(inputDirectory, "sample.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.Default
                };
                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.ReadLine();
        }
        
        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 استاندارد را از مدل های داده اکسل اتوماتیک کنند. هر ورق کار حاوی متری های مالی مختلف (برنامه های تعادل، گزارش های درآمد، پیش بینی های جریان نقدی) در صفحه خود ظاهر می شود، حفظ جدایی واضح از داده ها در حالی که اطمینان از فرمت سازگار در سراسر تمام گزارش ها. این بهبود خواندن برای اعضای هیئت مدیره، حسابرس و بازرسان تنظیمات.

نسل اسناد انطباق

سازمان هایی که باید داده های مالی یا عملیاتی استاندارد شده را به سازمان های نظارتی ارسال کنند، می توانند داده های خود را بر اساس اکسل به فرمت های PDF سازگار تبدیل کنند. گزینه یک صفحه ای در هر صفحه اطمینان حاصل می کند که هر فرم یا مجموعه داده نظارتی در هنگام ارسال الکترونیکی یا چاپ، صداقت و طرح مناسب خود را حفظ می کند و خطر انطباق از خطاهای فرمت را کاهش می دهد.

سیستم های توزیع گزارش اتوماتیک

بخش های فروش یا عملیات می توانند سیستم های خودکار را اجرا کنند که در آن داده های اکسل به طور منظم به PDF های حرفه ای برای توزیع به مشتریان یا ذینفعان داخلی تبدیل می شوند.فرمت یک صفحه ای در هر صفحه اطمینان حاصل می کند که گیرنده ها اسناد خوب ساختار یافته را دریافت می کنند که در آن هر واحد کسب و کار، خط محصول یا دوره زمانی در صفحه خود ظاهر می شود تا ناوبری و تجزیه و تحلیل آسان تر شود.


چالش ها و راه حل های مشترک

چالش اول: صفحه های بزرگ فراتر از مرزهای صفحه گسترش می یابند

راه حل : تنظیم گزینه های 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

چالش ۲: عنوان های سفارشی و پاها که در 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

بررسی عملکرد

  • برای کتاب های کار چند صفحه ای، این فرآیند می تواند حافظه پر باشد؛ به پردازش فایل ها به صورت متوالی به جای به صورت موازی در سیستم های محاصره شده حافظه در نظر بگیرید.
  • هنگام تبدیل فایل های بزرگ اکسل، از رویکردهای پخش برای کاهش استفاده از حافظه استفاده کنید.
  • برای تبدیل های مکرر از همان فایل با تنظیمات مختلف، فایل را یک بار به حافظه بارگذاری کنید و دوباره از آن استفاده کنید.
  • در نظر بگیرید که یک سیستم کوین برای محیط های حجم بالا برای مدیریت استفاده از منابع اجرا شود.

بهترین شیوه ها

  1. همیشه قبل از پردازش فایل های ورودی را تأیید کنید تا از خطاهای زمان اجرا اجتناب کنید.
  2. اجرای صحیح مدیریت خطا در اطراف عملیات فایل I/O و فرآیندهای تبدیل.
  3. استانداردهای مربوط به پیوستن به PDF (PDF/A-1b، PDF 1.7) را بر اساس نیازهای آرشیو یا توزیع خود تنظیم کنید.
  4. کشی فایل ها یا قالب های مورد استفاده برای بهبود عملکرد برای عملیات تکراری.
  5. در نظر گرفتن اجرای گزارش پیشرفت برای تبدیل های طولانی مدت بوته.

سناریوهای پیشرفته

برای نیازهای پیچیده تر، این پیاده سازی های پیشرفته را در نظر بگیرید:

سناریو 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);

سناریو ۲: اضافه کردن امضا های دیجیتال به 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 Reference .

 فارسی