Переглянути джерело

Support for height in the Tables (SetHeight, MinHeight)

patch provided by Nick Kusters
master
MadBoy_cp 10 роки тому
джерело
коміт
c7cbf1c603
1 змінених файлів з 67 додано та 25 видалено
  1. 67
    25
      DocX/Table.cs

+ 67
- 25
DocX/Table.cs Переглянути файл

@@ -2107,6 +2107,16 @@ namespace Novacode
this.mainPart = table.mainPart;
}
/// <summary>
/// The property name to set when specifiying an exact height
/// </summary>
/// <created>Nick Kusters</created>
const string _hRule_Exact = "exact";
/// <summary>
/// The property name to set when specifying a minimum height
/// </summary>
/// <created>Nick Kusters</created>
const string _hRule_AtLeast = "atLeast";
/// <summary>
/// Height in pixels. // Added by Joel, refactored by Cathal.
/// </summary>
@@ -2152,39 +2162,71 @@ namespace Novacode
// 15 "word units" in one pixel
return (heightInWordUnits / 15);
}
set
{
/*
* Get the trPr (table row properties) element for this Row,
* null will be return if no such element exists.
*/
XElement trPr = Xml.Element(XName.Get("trPr", DocX.w.NamespaceName));
if (trPr == null)
{
Xml.SetElementValue(XName.Get("trPr", DocX.w.NamespaceName), string.Empty);
trPr = Xml.Element(XName.Get("trPr", DocX.w.NamespaceName));
}
SetHeight(value, true);
}
}
/// <summary>
/// Helper method to set either the exact height or the min-height
/// </summary>
/// <param name="height">The height value to set (in pixels)</param>
/// <param name="exact">
/// If true, the height will be forced.
/// If false, it will be treated as a minimum height, auto growing past it if need be.
/// </param>
/// <created>Nick Kusters</created>
void SetHeight(double height, bool exact)
{
/*
* Get the trPr (table row properties) element for this Row,
* null will be return if no such element exists.
*/
XElement trPr = Xml.Element(XName.Get("trPr", DocX.w.NamespaceName));
if (trPr == null)
{
Xml.SetElementValue(XName.Get("trPr", DocX.w.NamespaceName), string.Empty);
trPr = Xml.Element(XName.Get("trPr", DocX.w.NamespaceName));
}
/*
* Get the trHeight element for this Row,
* null will be return if no such element exists.
*/
XElement trHeight = trPr.Element(XName.Get("trHeight", DocX.w.NamespaceName));
if (trHeight == null)
{
trPr.SetElementValue(XName.Get("trHeight", DocX.w.NamespaceName), string.Empty);
trHeight = trPr.Element(XName.Get("trHeight", DocX.w.NamespaceName));
}
/*
* Get the trHeight element for this Row,
* null will be return if no such element exists.
*/
XElement trHeight = trPr.Element(XName.Get("trHeight", DocX.w.NamespaceName));
if (trHeight == null)
{
trPr.SetElementValue(XName.Get("trHeight", DocX.w.NamespaceName), string.Empty);
trHeight = trPr.Element(XName.Get("trHeight", DocX.w.NamespaceName));
}
// The hRule attribute needs to be set to exact.
trHeight.SetAttributeValue(XName.Get("hRule", DocX.w.NamespaceName), "exact");
// The hRule attribute needs to be set to exact.
trHeight.SetAttributeValue(XName.Get("hRule", DocX.w.NamespaceName), exact ? _hRule_Exact : _hRule_AtLeast);
// 15 "word units" is equal to one pixel.
trHeight.SetAttributeValue(XName.Get("val", DocX.w.NamespaceName), (value * 15).ToString());
// 15 "word units" is equal to one pixel.
trHeight.SetAttributeValue(XName.Get("val", DocX.w.NamespaceName), (height * 15).ToString());
}
/// <summary>
/// Min-Height in pixels. // Added by Nick Kusters.
/// </summary>
/// <remarks>
/// Value will be treated as a minimum height, auto growing past it if need be.
/// </remarks>
/// <created>Nick Kusters</created>
public double MinHeight
{
get
{
// Just return the value from the normal height property since it doesn't care if you've set an exact or minimum height.
return Height;
}
set
{
SetHeight(value, false);
}
}
/// <summary>
/// Set to true to make this row the table header row that will be repeated on each page
/// </summary>

Завантаження…
Відмінити
Зберегти