2014-11-27 2 views
1

Я создаю PDF-документ, используя PDFSharp, который использует ту же (маленькую) таблицу снова и снова.C# PDFSharp - в чем смысл Table.Clone?

Я видел, что можно клонировать всю таблицу. Я сделал мастер-таблицу со всеми основными настройками, которые мне нужны, и несколькими строками, думая, что я могу просто использовать метод Table.Clone() на главной таблице, чтобы вернуть новую красивую новую таблицу, которая может быть выровнена, а затем нарисована в документе.

Клонирование работает, но когда речь идет на самом деле нарисовать таблицу на странице System.ArgumentFormat исключение:

"Value of '0' is not valid for 'emSize'. 'emSize' should be greater than 0 and less than or equal to System.Single.MaxValue.\r\nParameter name: emSize" (в System.Drawing.dll)

кажется каждая таблица должна быть добавлен на страницу с использованием метода page.AddTable().

Если это так, то какова цель Table.Clone(), если его невозможно затем нарисовать клонированную таблицу на страницу?

Вот значительно упрощена тест:

Table test_table = new Table(); 
test_table.Style = "Table"; 
test_table.Borders.Color = Colors.Black; 
test_table.AddColumn(50); 
test_table.AddColumn(50); 

Row table_row_1 = test_table.AddRow(); 
table_row_1.Format.Font.Name = "Verdana"; 
table_row_1.Format.Font.Size = 8; 

Row table_row_2 = test_table.AddRow(); 
table_row_2.Format.Font.Name = "Verdana"; 
table_row_2.Format.Font.Size = 8; 

Table cloned_table = test_table.Clone(); 
cloned_table.Rows[0].Cells[0].AddParagraph("row 1 cell 1"); 
cloned_table.Rows[0].Cells[1].AddParagraph("row 1 cell 2"); 
cloned_table.Rows[1].Cells[0].AddParagraph("row 2 cell 1"); 
cloned_table.Rows[1].Cells[1].AddParagraph("row 2 cell 2"); 

test_table.SetEdge(0, 0, cloned_table.Columns.Count, cloned_table.Rows.Count, Edge.Box, BorderStyle.Single, 0.75, Colors.Black); 
MigraDoc.Rendering.DocumentRenderer cloned_table_renderer = new DocumentRenderer(doc); 
cloned_table_renderer.PrepareDocument(); 
cloned_table_renderer.RenderObject(gfx, 50, 50, 100, cloned_table); 

ответ

3

таблица, которая была добавлена ​​к секции имеет родителя. Когда вы попытаетесь добавить таблицу снова, вы получите исключение.

Используя Clone(), вы получаете копию таблицы, у которой нет родителя, и ее можно добавить в раздел, используя Add(tableClone).

Вы не используете Add(), вместо этого используете RenderObject(). Я не знаю, почему ваш код не работает.

Обычно вы добавляете таблицу в раздел и имеете MigraDoc для создания документа для вас - таким образом таблица автоматически разбивается на несколько страниц, когда это необходимо.

Проблема с исключением еще не решена, но цель Клона объясняется.

+0

Спасибо, я дам метод section.Add() и посмотрю, будет ли это работать. – dalemac

+0

Работало с помощью page.Add (cloned_table). Затем я мог бы использовать RenderObject для рисования таблицы на странице. – dalemac

+0

О, и причина, по которой я использую RenderObject(), состоит в том, что положение таблицы очень специфично. – dalemac

Смежные вопросы