andruhovski

PDF Invoice

Feb 1st, 2018
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.73 KB | None | 0 0
  1. using System;
  2. using System.Data;
  3. using System.IO;
  4. using System.Linq;
  5. using Aspose.Pdf;
  6. using Aspose.Pdf.Drawing;
  7. using Aspose.Pdf.Text;
  8. using TextState=Aspose.Pdf.Text.TextState;
  9.  
  10. namespace ExampleConsole
  11. {
  12.     class Program
  13.     {
  14.         private static string _cAsposeTemplatePdf = @"c:\aspose\template.pdf";
  15.         private static string _cAsposeDocumentPdf = @"c:\aspose\document.pdf";
  16.         private static DataTable _productsDataTable;
  17.         static void Main()
  18.         {
  19.             _productsDataTable = GenerateDataTable();
  20.             AddInvoiceData();
  21.         }
  22.  
  23.         private static DataTable GenerateDataTable()
  24.         {
  25.             var dt = new DataTable("InovoiceItems");
  26.             dt.Columns.Add("ID", typeof(int));
  27.             dt.Columns.Add("ItemName", typeof(string));
  28.             dt.Columns.Add("Price", typeof(float));
  29.             dt.Columns.Add("Qunatity", typeof(int));
  30.             dt.Columns.Add("Summa", typeof(float));
  31.            
  32.             // Add 5 rows into the DataTable object programmatically
  33.             var dr = dt.NewRow();
  34.             for (var i = 0; i < 5; i++)
  35.             {
  36.                 dr[0] = i+1;
  37.                 dr[1] = $"Sun Glasses Type {i+1}";
  38.                 dr[2] = 199.99;
  39.                 dr[3] = 1;
  40.                 dr[4] = 199.99;
  41.                 dt.Rows.Add(dr);
  42.                 dr = dt.NewRow();
  43.             }
  44.             return dt;
  45.         }
  46.  
  47.         private static void AddInvoiceData()
  48.         {
  49.             //var tenants = _dbContext.Tenants.ToList();
  50.             if (!File.Exists(_cAsposeTemplatePdf))
  51.                 GenerateLetterHead();
  52.                        
  53.             // Create new a PDF document
  54.             var document = new Document(_cAsposeTemplatePdf)
  55.             {
  56.                 PageInfo = new PageInfo { Margin = new MarginInfo(28, 28, 28, 42) }
  57.             };
  58.  
  59.             //-----------------------------------            
  60.             // Create TextAbsorber object to find all instances
  61.             var textFragmentAbsorber = new TextFragmentAbsorber();
  62.             // Accept the absorber for the page index 1
  63.             document.Pages[1].Accept(textFragmentAbsorber);
  64.             // Get the extracted text fragments
  65.             var textFragmentCollection = textFragmentAbsorber.TextFragments;
  66.  
  67.             var m1= textFragmentCollection.Cast<TextFragment>().Max(fragment => (float)fragment.Rectangle.URY);
  68.             var m2 = textFragmentCollection.Cast<TextFragment>().Min(fragment => (float)fragment.Rectangle.LLY);
  69.             var height = m1-m2;
  70.             //-----------------------------------
  71.             var pdfPage = document.Pages[1];                        
  72.             // Create Graph object
  73.             Aspose.Pdf.Drawing.Graph canvas = new Aspose.Pdf.Drawing.Graph(100, height);
  74.                        
  75.             // Add graph object to paragraphs collection of page object
  76.             pdfPage.Paragraphs.Add(canvas);
  77.             // Set value to not change position for graph object
  78.             canvas.IsChangePosition = true;
  79.            
  80.  
  81.             // Initializes a new instance of the Table
  82.             var table = new Table
  83.             {
  84.                 // Set column auto widths of the table
  85.                 ColumnWidths = "10 10 10 10 10",
  86.                 ColumnAdjustment = ColumnAdjustment.AutoFitToContent,
  87.                 // Set cell padding
  88.                 DefaultCellPadding = new MarginInfo(5, 5, 5, 5),
  89.                 // Set the table border color as Black
  90.                 Border = new BorderInfo(BorderSide.All, .5f, Color.Black),
  91.                 // Set the border for table cells as Black
  92.                 DefaultCellBorder = new BorderInfo(BorderSide.All, .2f, Color.Black),
  93.                 DefaultCellTextState = new TextState("TimesNewRoman", 10)
  94.             };
  95.  
  96.             var paymentFormat = new TextState("TimesNewRoman", 10)
  97.             {
  98.                 HorizontalAlignment = HorizontalAlignment.Right
  99.             };
  100.             table.SetColumnTextState(2, paymentFormat);
  101.             table.SetColumnTextState(4, paymentFormat);
  102.             table.ImportDataTable(_productsDataTable,true,0,1,5,5);
  103.  
  104.             //Repeat Header
  105.             table.RepeatingRowsCount = 1;
  106.            
  107.             // Add table object to first page of input document
  108.             pdfPage.Paragraphs.Add(table);
  109.  
  110.             using (var streamOut = new FileStream(_cAsposeDocumentPdf, FileMode.OpenOrCreate))
  111.             {
  112.                 document.Save(streamOut);
  113.             }
  114.         }
  115.  
  116.         private static void GenerateLetterHead()
  117.         {
  118.             // Create new a PDF document
  119.             var document = new Document()
  120.             {
  121.                 PageInfo = new PageInfo { Margin = new MarginInfo(28, 28, 28, 28) }
  122.             };
  123.  
  124.             var pdfPage = document.Pages.Add();            
  125.             // Initializes a new instance of the TextFragment for report's title or other text
  126.             var textFragment = new Aspose.Pdf.Text.TextFragment("Invoice #123 or other text.");
  127.            
  128.             // Set text properties
  129.             textFragment.TextState.FontSize = 12;
  130.             textFragment.TextState.Font = Aspose.Pdf.Text.FontRepository.FindFont("TimesNewRoman");
  131.             textFragment.TextState.FontStyle = Aspose.Pdf.Text.FontStyles.Bold;
  132.            
  133.             // Add text fragment object to first page of input document
  134.             pdfPage.Paragraphs.Add(textFragment);
  135.             pdfPage.Paragraphs.Add(textFragment);
  136.             pdfPage.Paragraphs.Add(textFragment);
  137.  
  138.             using (var streamOut = new FileStream(_cAsposeTemplatePdf, FileMode.OpenOrCreate))
  139.             {
  140.                 document.Save(streamOut);                
  141.             }
  142.         }
  143.     }
  144. }
Add Comment
Please, Sign In to add comment