using ceTe.DynamicPDF; using ceTe.DynamicPDF.PageElements; using Consulenza.ReportWriter.Business.Entity; namespace Consulenza.ReportWriter.Business.OBJ_PDF { /// /// Rappresenta una TextArea. /// Il testo viene disegnato su più righe. /// La TextArea è automaticamente ridimensionata in altezza(_height) a visualizzare l'intero contenuto(_text), /// mentre il testo viene troncato qualora la largezza(_width) sia insufficiente. /// La larghezza di default della TextArea è 520, pari all'area scrivibile del documento. /// Di default il testo della TextArea viene disegnata con un _fontsize=8, di colore Black con un allineamento orizzonatale Left e uno verticale Center. /// Per scrivere una label in Bold, Oblique o BoldOblique, impostare la proprietà _font con il relativo valore. /// La proprietà _deltaheight, di default=0, impone un incremento o un decremento, a seconda se il valore passato sia positivo o negativo, del valore della _height. /// Se l'altezza della TextArea è maggiore dello spazio disponibile del documento, la TextArea verrà disegnata in una nuova pagina, non effettua il salto pagina. /// Il motore di renderizzazione dynamicpdf aggiunge un spazio superiore e uno inferiore alla TextArea tanto maggiore quanto è alta la _height(Attualmente sembra non esserci modo di eliminarlo). /// Utilizza la classe primitiva ceTe.DynamicPDF.PageElements.FormattedTextArea. /// public class FormattedTextAreaPDF : ObjectPDF { #region Fields private float _height; private float _width = 520; private float _fontsize = 8; private ColorPDF _fontcolor = ColorPDF.Nero; private TextAlign _texthorizontalalign = TextAlign.Left; private VAlign _textverticalalign = VAlign.Center; /// /// Imposta o ottiene l'elemento base (PageElement) /// public ceTe.DynamicPDF.PageElements.FormattedTextArea BaseElement { get; set; } /// /// Imposta o recupera il testo da disegnare nella TextArea. /// public string Text { get; set; } /// /// Imposta o recupera la X del documento su cui disegnare la TextArea. /// public float X { get; set; } /// /// Imposta o recupera la Y del documento su cui disegnare la TextArea. /// public float Y { get; set; } /// /// Imposta o recupera un valore che indica l'incremento algebrico dell'incremento standard di Y. /// Utilizzare questa proprietà se si vuole incrementare o decrementare la Y assegnata automaticamente dal motore di renderizzazione. /// Di default=0; /// public float DeltaY { get; set; } /// /// Imposta o recupera un valore che indica l'incremento algebrico dell'incremento standard di X. /// Utilizzare questa proprietà se si vuole incrementare o decrementare la X assegnata automaticamente dal motore di renderizzazione. /// Di default=0; /// public float DeltaX { get; set; } /// /// Recupera l'altezza della TextArea. /// public float Height { get { return FixedHeight > 0 ? FixedHeight : _height; } } /// /// Imposta o recupera il valore della altezza fissa. /// Di default=0. Se impostato la Height varrà FixedHeight. /// public float FixedHeight { get; set; } /// /// Imposta o recupera la larghezza della TextArea. /// Di default=520. /// public float Width { get { return _width; } set { _width = value; } } /// /// Imposta o recupera la grandezza del carattere della TextArea. /// Di default=8. /// public float FontSize { get { return _fontsize; } set { _fontsize = value; } } /// /// Imposta o recupera un bool che indica il grassetto. /// Di default = false /// public bool FontBold { get; set; } /// /// Imposta o recupera il colore del testo della TextArea. /// Di default=black. /// public ColorPDF FontColor { get { return _fontcolor; } set { _fontcolor = value; } } /// /// Imposta o recupera l'allineamento orizzontale del testo della TextArea. /// Di default=Left. /// public TextAlign TextHorizontalAlign { get { return _texthorizontalalign; } set { _texthorizontalalign = value; } } /// /// Imposta o recupera l'allineamento verticale del testo della TextArea. /// Di default=Center. /// public VAlign TextVerticalAlign { get { return _textverticalalign; } set { _textverticalalign = value; } } /// /// Imposta o recupera un bool che indica se il testo sarà scritto in verticale. /// Impone un Angle = -90 al BaseElement. /// Di default = false. /// public bool TextVerticalDirection { get; set; } /// /// Imposta o ottiene un booleano che indica se l'oggetto ha una posizione assoluta. /// Un oggetto con posizione assoluta ha una sua y, definita dall'utente, e non quella assegnata dal motore di renderizzazione. /// Se impostato a true, il valore _ywritable del documento non sarà incrementato. /// Di default=false. /// public bool AbsolutePosition { get; set; } /// /// Imposta o recupera il colore di sfondo. /// Di default = null (non viene renderizzato). /// public ColorPDF BackGroundColor { get; set; } /// /// Imposta o recupera l'altezza del rettangolo di sfondo. /// Di default = 23. /// public float BackGroundHeight { get; set; } /// /// Imposta o recupera il margine sinistro quando BackGroundColor è impostato. /// Di default = 0. /// public float BackGroundMarginLeft { get; set; } #endregion #region Costruttori /// /// Costruttore /// public FormattedTextAreaPDF() { AbsolutePosition = false; TextVerticalDirection = false; FontBold = false; DeltaY = 0; BackGroundColor = null; BackGroundHeight = 23; ObjectType = ObjectTypePdf.FORMATTEDTEXTAREA; } /// /// Costruttore. /// /// Testo della FormattedTextAreaPDF /// X della FormattedTextAreaPDF public FormattedTextAreaPDF(string text, float x) : this() { Text = text; X = x; //setHeight(); } /// /// Costruttore. /// /// Testo della FormattedTextAreaPDF /// X della FormattedTextAreaPDF /// Larghezza della FormattedTextAreaPDF public FormattedTextAreaPDF(string text, float x, float width) : this(text, x) { _width = width; //if (_width > 0) //{ // setHeight(); //} } /// /// Costruttore. /// /// Testo della FormattedTextAreaPDF /// X della FormattedTextAreaPDF /// Larghezza della FormattedTextAreaPDF /// Allineamento orizzontale.Di default=Left public FormattedTextAreaPDF(string text, float x, float width, TextAlign horizontalAlign) : this(text, x, width) { _texthorizontalalign = horizontalAlign; } #endregion #region Metodi /// /// Ritorna l'oggetto che sarà stampato sulla pagina del documento. /// /// public override PageElement ToElement() { return BaseElement; } /// /// Imposta l'altezza; /// public void SetHeight(float value) { _height = value; } /// /// Ricalcola e recupera l'altezza. /// /// public void GetAndSetHeight(FontFamily fontfamily, bool fontbold) { var formattedTextArea = new ceTe.DynamicPDF.PageElements.FormattedTextArea(Text, 0, 0, _width, 0, fontfamily, _fontsize, true); formattedTextArea.Style.Bold = fontbold; var valueHeight = formattedTextArea.GetRequiredHeight(); SetHeight(valueHeight); } public float GetHeight(FontFamily fontfamily, bool fontbold) { var formattedTextArea = new ceTe.DynamicPDF.PageElements.FormattedTextArea(Text, 0, 0, _width, 0, fontfamily, _fontsize, true); formattedTextArea.Style.Bold = fontbold; return formattedTextArea.GetRequiredHeight(); } public float GetWidthReal(FontFamily fontFamily, bool fontBold) { var formattedTextArea = new ceTe.DynamicPDF.PageElements.FormattedTextArea(Text, 0, 0, _width, 0, fontFamily, _fontsize, true); formattedTextArea.Style.Bold = fontBold; var styleUsed = new FormattedTextAreaStyle(fontFamily, _fontsize, false) { Bold = fontBold }; return styleUsed.GetFont().GetTextWidth(Text, styleUsed.Font.Size); } #endregion } }