andruhovski icon

PDF Invoice

andruhovski | PRO | 02/01/18 05:57:09 AM UTC | 0 ⭐ | 795 👁️ | Never ⏰ | []
C# |

5.73 KB

|

None

|

0 👍

/

0 👎

using System;
using System.Data;
using System.IO;
using System.Linq;
using Aspose.Pdf;
using Aspose.Pdf.Drawing;
using Aspose.Pdf.Text;
using TextState=Aspose.Pdf.Text.TextState;
 
namespace ExampleConsole
{
    class Program
    {
        private static string _cAsposeTemplatePdf = @"c:\aspose\template.pdf";
        private static string _cAsposeDocumentPdf = @"c:\aspose\document.pdf";
        private static DataTable _productsDataTable;
        static void Main()
        {
            _productsDataTable = GenerateDataTable();
            AddInvoiceData();
        }
 
        private static DataTable GenerateDataTable()
        {
            var dt = new DataTable("InovoiceItems");
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("ItemName", typeof(string));
            dt.Columns.Add("Price", typeof(float));
            dt.Columns.Add("Qunatity", typeof(int));
            dt.Columns.Add("Summa", typeof(float));
            
            // Add 5 rows into the DataTable object programmatically
            var dr = dt.NewRow();
            for (var i = 0; i < 5; i++)
            {
                dr[0] = i+1;
                dr[1] = $"Sun Glasses Type {i+1}";
                dr[2] = 199.99;
                dr[3] = 1;
                dr[4] = 199.99;
                dt.Rows.Add(dr);
                dr = dt.NewRow();
            }
            return dt;
        }
 
        private static void AddInvoiceData()
        {
            //var tenants = _dbContext.Tenants.ToList();
            if (!File.Exists(_cAsposeTemplatePdf))
                GenerateLetterHead();
                        
            // Create new a PDF document
            var document = new Document(_cAsposeTemplatePdf)
            {
                PageInfo = new PageInfo { Margin = new MarginInfo(28, 28, 28, 42) }
            };
 
            //-----------------------------------            
            // Create TextAbsorber object to find all instances
            var textFragmentAbsorber = new TextFragmentAbsorber();
            // Accept the absorber for the page index 1
            document.Pages[1].Accept(textFragmentAbsorber);
            // Get the extracted text fragments
            var textFragmentCollection = textFragmentAbsorber.TextFragments;
 
            var m1= textFragmentCollection.Cast<TextFragment>().Max(fragment => (float)fragment.Rectangle.URY);
            var m2 = textFragmentCollection.Cast<TextFragment>().Min(fragment => (float)fragment.Rectangle.LLY);
            var height = m1-m2;
            //-----------------------------------
            var pdfPage = document.Pages[1];                        
            // Create Graph object 
            Aspose.Pdf.Drawing.Graph canvas = new Aspose.Pdf.Drawing.Graph(100, height);
                        
            // Add graph object to paragraphs collection of page object
            pdfPage.Paragraphs.Add(canvas);
            // Set value to not change position for graph object
            canvas.IsChangePosition = true;
            
 
            // Initializes a new instance of the Table
            var table = new Table
            {
                // Set column auto widths of the table
                ColumnWidths = "10 10 10 10 10",
                ColumnAdjustment = ColumnAdjustment.AutoFitToContent,
                // Set cell padding
                DefaultCellPadding = new MarginInfo(5, 5, 5, 5),
                // Set the table border color as Black
                Border = new BorderInfo(BorderSide.All, .5f, Color.Black),
                // Set the border for table cells as Black
                DefaultCellBorder = new BorderInfo(BorderSide.All, .2f, Color.Black),
                DefaultCellTextState = new TextState("TimesNewRoman", 10)
            };
 
            var paymentFormat = new TextState("TimesNewRoman", 10)
            {
                HorizontalAlignment = HorizontalAlignment.Right
            };
            table.SetColumnTextState(2, paymentFormat);
            table.SetColumnTextState(4, paymentFormat);
            table.ImportDataTable(_productsDataTable,true,0,1,5,5);
 
            //Repeat Header
            table.RepeatingRowsCount = 1;
            
            // Add table object to first page of input document
            pdfPage.Paragraphs.Add(table);
 
            using (var streamOut = new FileStream(_cAsposeDocumentPdf, FileMode.OpenOrCreate))
            {
                document.Save(streamOut);
            }
        }
 
        private static void GenerateLetterHead()
        {
            // Create new a PDF document
            var document = new Document()
            {
                PageInfo = new PageInfo { Margin = new MarginInfo(28, 28, 28, 28) }
            };
 
            var pdfPage = document.Pages.Add();            
            // Initializes a new instance of the TextFragment for report's title or other text
            var textFragment = new Aspose.Pdf.Text.TextFragment("Invoice #123 or other text.");
            
            // Set text properties
            textFragment.TextState.FontSize = 12;
            textFragment.TextState.Font = Aspose.Pdf.Text.FontRepository.FindFont("TimesNewRoman");
            textFragment.TextState.FontStyle = Aspose.Pdf.Text.FontStyles.Bold;
            
            // Add text fragment object to first page of input document
            pdfPage.Paragraphs.Add(textFragment);
            pdfPage.Paragraphs.Add(textFragment);
            pdfPage.Paragraphs.Add(textFragment);
 
            using (var streamOut = new FileStream(_cAsposeTemplatePdf, FileMode.OpenOrCreate))
            {
                document.Save(streamOut);                
            }
        }
    }
}

Comments