2012-05-25 24 views
0
static void Main(string[] args) 
    { 
     string saveFileAs = "D:\\Hello.pdf"; 
     Program p = new Program(); 
     Document doc = p.CreateDocument(); 
     PdfDocumentRenderer renderer = new PdfDocumentRenderer(true, PdfSharp.Pdf.PdfFontEmbedding.Always); 
     renderer.Document = doc; 
     renderer.RenderDocument(); 
     renderer.PdfDocument.Save("D:\\Hello.pdf"); 
     Process.Start(saveFileAs); 
    } 

public Document CreateDocument() 
    { 
     // Create a new MigraDoc document 
     this.document = new Document(); 
     this.document.Info.Title = "A sample invoice"; 
     this.document.Info.Subject = "Demonstrates how to create an invoice."; 
     this.document.Info.Author = "Chandana Amarnath"; 

     DefineStyles(); 

     CreatePage(); 

     FillContent(); 

     return this.document; 
    } 

void CreatePage() 
    { 
     // Each MigraDoc document needs at least one section. 
     Section section = this.document.AddSection(); 

     // Put a logo in the header 
     Image image = section.Headers.Primary.AddImage("D:\\Cubes.jpg"); 
     image.Height = "2.5cm"; 
     image.LockAspectRatio = true; 
     image.RelativeVertical = RelativeVertical.Line; 
     image.RelativeHorizontal = RelativeHorizontal.Margin; 
     image.Top = ShapePosition.Top; 
     image.Left = ShapePosition.Right; 
     image.WrapFormat.Style = WrapStyle.Through; 

     // Create footer 
     Paragraph paragraph = section.Footers.Primary.AddParagraph(); 
     // The following one prints at the footer; 
     paragraph.AddText("Aldata Inc."); 
     paragraph.Format.Font.Size = 9; 
     paragraph.Format.Alignment = ParagraphAlignment.Center; 

     // Create the text frame for the address 
     this.addressFrame = section.AddTextFrame(); 
     this.addressFrame.Height = "3.0cm"; 
     this.addressFrame.Width = "7.0cm"; 
     this.addressFrame.Left = ShapePosition.Left; 
     this.addressFrame.RelativeHorizontal = RelativeHorizontal.Margin; 
     this.addressFrame.Top = "5.0cm"; 
     this.addressFrame.RelativeVertical = RelativeVertical.Page; 

     // Put sender in address frame 
     paragraph = this.addressFrame.AddParagraph("Aldata-Apollo Inc."); 
     paragraph.Format.Font.Name = "Times New Roman"; 
     paragraph.Format.Font.Size = 7; 
     paragraph.Format.SpaceAfter = 3; 

     // Add the print date field 
     paragraph = section.AddParagraph(); 
     paragraph.Format.SpaceBefore = "8cm"; 
     paragraph.Style = "Reference"; 
     paragraph.AddFormattedText("Section Comparator", TextFormat.Bold); 
     paragraph.AddTab(); 
     paragraph.AddText("Date: "); 
     paragraph.AddDateField("dd.MM.yyyy"); 

     // Create the item table 
     this.table = section.AddTable(); 
     this.table.Style = "Table"; 
     this.table.Borders.Color = Color.Parse("Black"); 
     this.table.Borders.Width = 0.25; 
     this.table.Borders.Left.Width = 0.5; 
     this.table.Borders.Right.Width = 0.5; 
     this.table.Rows.LeftIndent = 0; 

     //************ Before you can add a row, you must define the columns ********** 
     Column column = this.table.AddColumn("4cm"); 
     column.Format.Alignment = ParagraphAlignment.Center; 

     column = this.table.AddColumn("3cm"); 
     column.Format.Alignment = ParagraphAlignment.Right; 

     // Create the header of the table 
     Row row = table.AddRow(); 
     row.HeadingFormat = true; 
     row.Format.Alignment = ParagraphAlignment.Center; 
     row.Format.Font.Bold = true; 
     row.Shading.Color = Color.Parse("White"); 

     row.Cells[0].AddParagraph("Added"); 
     row.Cells[0].Format.Font.Bold = true; 
     row.Cells[0].Format.Alignment = ParagraphAlignment.Center; 
     row.Cells[0].MergeRight = 3; 

     row = table.AddRow(); 
     row.HeadingFormat = true; 
     row.Format.Alignment = ParagraphAlignment.Center; 
     row.Format.Font.Bold = true; 
     row.Cells[0].AddParagraph("Deleted Items"); 
     row.Cells[0].Format.Font.Bold = true; 
     row.Cells[0].Format.Alignment = ParagraphAlignment.Left; 
     row.Cells[0].MergeRight = 3; 

     this.table.SetEdge(0, 0, 2, 3, Edge.Box, BorderStyle.Single, 0.75, Color.Empty); 
    } 

    void FillContent() 
    { 
     string xmlFileName = "C:\\Section.xml"; 
     XPathDocument xPathDocument = new XPathDocument(xmlFileName); 
     XPathNavigator item = xPathDocument.CreateNavigator(); 

     XPathNodeIterator iter = item.Select("/Hello/*"); 
     while (iter.MoveNext()) 
     { 
      string name = iter.Current.Name; 
      item = iter.Current; 
      Row row1 = this.table.AddRow(); 
      Row row2 = this.table.AddRow(); 

      row1.TopPadding = 1.5; 
      row1.Cells[0].Shading.Color = Color.Parse("Gray"); 
      row1.Cells[0].VerticalAlignment = VerticalAlignment.Center; 
      row1.Cells[0].MergeDown = 1; 
      row1.Cells[1].Format.Alignment = ParagraphAlignment.Left; 
      row1.Cells[1].MergeRight = 3; 
      row1.Cells[0].AddParagraph(item.ToString()); 

      Console.WriteLine(name + "\t:" +item); 
     } 
     Console.ReadKey(); 
    } 

我正在編寫使用MigraDoc生成PDF報告的代碼。我已經從PDFSharp站點下載了代碼。以下有3個函數DefineStyles(),CreatePage(),FillContent()。我在函數CreatePage(),FillContent();但是當我運行程序時,出現錯誤提示MigraDoc中未處理的異常的參數

超出例外的參數: 指定的參數超出了有效值的範圍。

在CreatePage()中,我向表中添加了2行和2列。在FillContent()函數中,我讀取了我的XML文件。但我無法找到我越過我的指數範圍的地方。

解決

的問題是,當我設置table.SetEdge(...)。我正在訪問我沒有創建的列。 謝謝大家.. :)

+0

廣東話設置斷點和調試每一行,我應該使用? – Reniuz

+0

我已經做了很多次了。但我仍然無法弄清楚。 – Amarnath

+0

你會發現異常? – Reniuz

回答

1

在這一步,我設置了尚未創建的行。

this.table.SetEdge(0, 0, 2, 3, Edge.Box, BorderStyle.Single, 0.75, Color.Empty); 

而不是3這是行數2.