diff --git a/PROMS/VG/IVGOutput.cs b/PROMS/VG/IVGOutput.cs index ef2bd465..278bd48e 100644 --- a/PROMS/VG/IVGOutput.cs +++ b/PROMS/VG/IVGOutput.cs @@ -11,6 +11,7 @@ namespace VG public interface IVGOutput { float Scale { get;} + int DebugStatus { get; set; } void DrawLine(Pen pn, float startx, float starty, float endx, float endy); void DrawRectangle(Pen pn, RectangleF rectf); void DrawEllipse(Pen pn, float cx, float cy, float dx, float dy); @@ -23,6 +24,12 @@ namespace VG } public partial class VGOut_Graphics: IVGOutput { + private int _DebugStatus = 0; + public int DebugStatus + { + get { return _DebugStatus; } + set { _DebugStatus = value; } + } private Graphics _VGOutput; //public Graphics VGOutput //{ get { return _VGOutput; } } @@ -36,7 +43,7 @@ namespace VG public void DrawRectangle(Pen pn, RectangleF rectf) { _VGOutput.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy; - _VGOutput.FillRectangle(Brushes.Transparent, rectf.X, rectf.Y, rectf.Width, rectf.Height); + _VGOutput.FillRectangle(DebugStatus == 1 ? Brushes.Transparent : Brushes.White, rectf.X, rectf.Y, rectf.Width, rectf.Height); _VGOutput.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver; _VGOutput.DrawRectangle(pn, rectf.X, rectf.Y, rectf.Width, rectf.Height); } @@ -57,6 +64,12 @@ namespace VG } public partial class VGOut_ITextSharp : IVGOutput { + private int _DebugStatus = 0; + public int DebugStatus + { + get { return _DebugStatus; } + set { _DebugStatus = value; } + } private PdfContentByte _VGOutput; //public Graphics VGOutput //{ get { return _VGOutput; } } diff --git a/PROMS/Volian.Controls.Library/DSOTabPanel.cs b/PROMS/Volian.Controls.Library/DSOTabPanel.cs index 44b768fb..5d59e8df 100644 --- a/PROMS/Volian.Controls.Library/DSOTabPanel.cs +++ b/PROMS/Volian.Controls.Library/DSOTabPanel.cs @@ -203,8 +203,8 @@ namespace Volian.Controls.Library this._MyDSOFramer.Titlebar = false; //if (_MyCount < 20) // this._MyDSOFramer.FrameHookPolicy = DSOFramer.dsoFrameHookPolicy.dsoResetNow; - this._MyDSOFramer.BeforeDocumentClosed += new AxDSOFramer._DFramerCtlEvents_BeforeDocumentClosedEventHandler(_MyDSOFramer_BeforeDocumentClosed); - this._MyDSOFramer.OnSaveCompleted += new AxDSOFramer._DFramerCtlEvents_OnSaveCompletedEventHandler(_MyDSOFramer_OnSaveCompleted); + //this._MyDSOFramer.BeforeDocumentClosed += new AxDSOFramer._DFramerCtlEvents_BeforeDocumentClosedEventHandler(_MyDSOFramer_BeforeDocumentClosed); + //this._MyDSOFramer.OnSaveCompleted += new AxDSOFramer._DFramerCtlEvents_OnSaveCompletedEventHandler(_MyDSOFramer_OnSaveCompleted); //this._MyDSOFramer.LostFocus += new EventHandler(_MyDSOFramer_LostFocus); //this._MyDSOFramer.GotFocus += new EventHandler(_MyDSOFramer_GotFocus); //this._MyDSOFramer.Enter += new EventHandler(_MyDSOFramer_Enter); @@ -373,12 +373,19 @@ namespace Volian.Controls.Library { this.Select(); } - /// - /// If the user presses the save button, tell the file to save it's contents to the database - /// - /// - /// - void _MyDSOFramer_OnSaveCompleted(object sender, AxDSOFramer._DFramerCtlEvents_OnSaveCompletedEvent e) + ///// + ///// If the user presses the save button, tell the file to save it's contents to the database + ///// + ///// + ///// + //void _MyDSOFramer_OnSaveCompleted(object sender, AxDSOFramer._DFramerCtlEvents_OnSaveCompletedEvent e) + //{ + // _MyLog.WarnFormat("_MyDSOFramer_OnSaveCompleted"); + // Volian.Base.Library.vlnStackTrace.ShowStack("_MyDSOFramer_OnSaveCompleted"); + // SaveDSO_Phase2(); + //} + + private void SaveDSO_Phase2() { // Unfortunately, the only way to handle view mode for DSO Framer is to not save. if (PanelViewEditMode == E_ViewMode.View) @@ -418,12 +425,17 @@ namespace Volian.Controls.Library tc.ONStatusChanged(this, new DisplayTabControlStatusEventArgs(type, count, text)); } } - /// - /// Before a document closes check to see if it's contents should be saved. - /// - /// - /// - void _MyDSOFramer_BeforeDocumentClosed(object sender, AxDSOFramer._DFramerCtlEvents_BeforeDocumentClosedEvent e) + ///// + ///// Before a document closes check to see if it's contents should be saved. + ///// + ///// + ///// + //void _MyDSOFramer_BeforeDocumentClosed(object sender, AxDSOFramer._DFramerCtlEvents_BeforeDocumentClosedEvent e) + //{ + // SaveDSOPhase1(); + //} + + private void SaveDSO_Phase1() { try { @@ -465,7 +477,7 @@ namespace Volian.Controls.Library } try { - _MyDSOFramer.EventsEnabled = true; + //_MyDSOFramer.EventsEnabled = true; _MyDSOFramer.FrameHookPolicy = DSOFramer.dsoFrameHookPolicy.dsoResetNow; } catch (Exception ex) @@ -494,7 +506,8 @@ namespace Volian.Controls.Library try { _MyDSOFramer.Save(); - _MyDSOFramer_OnSaveCompleted(this, null); + SaveDSO_Phase2(); + //_MyDSOFramer_OnSaveCompleted(this, null); // These are handled in the method above //LBDocumentClass doc = new LBDocumentClass(_MyDSOFramer.ActiveDocument); //MyDSOFile.FullName = GetReflectiveProperty(_MyDSOFramer.ActiveDocument, "FullName"); @@ -524,7 +537,7 @@ namespace Volian.Controls.Library return false; } //if (MessageBox.Show("Save changes to " + _MyDisplayTabItem.MyItemInfo.TabTitle + "\r\n" + _MyDisplayTabItem.MyItemInfo.TabToolTip, "Document has Changed", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) - if (MessageBox.Show("Save changes to " + _MyDisplayTabItem.Text + "\r\n" + _MyDisplayTabItem.Tooltip, "Document has Changed", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + if (MessageBox.Show("Save changes to " + _MyDisplayTabItem.Text + "\r\n" + _MyDisplayTabItem.Tooltip, "Document has Changed", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) return SaveDSO(); return false; } @@ -557,6 +570,7 @@ namespace Volian.Controls.Library { if (_MyDSOFramer != null) { + SaveDSO_Phase1(); _MyDSOFramer.Close(); Controls.Remove(_MyDSOFramer); components.Remove(_MyDSOFramer); diff --git a/PROMS/Volian.Controls.Library/DisplayText.cs b/PROMS/Volian.Controls.Library/DisplayText.cs index 8feeeb3e..d4128c16 100644 --- a/PROMS/Volian.Controls.Library/DisplayText.cs +++ b/PROMS/Volian.Controls.Library/DisplayText.cs @@ -1529,7 +1529,7 @@ namespace Volian.Controls.Library else if (_MyItemInfo.IsInRNO && (rs.Flag & E_ReplaceFlags.RNO) > 0) replaceit = true; else if (_MyItemInfo.IsCaution && (rs.Flag & E_ReplaceFlags.Caution) > 0) replaceit = true; else if (_MyItemInfo.IsNote && (rs.Flag & E_ReplaceFlags.Note) > 0) replaceit = true; - else if (_MyItemInfo.IsStepPart && (rs.Flag & E_ReplaceFlags.Substep) > 0) replaceit = true; + else if (_MyItemInfo.IsStepPart && !_MyItemInfo.IsHigh && (rs.Flag & E_ReplaceFlags.Substep) > 0) replaceit = true; //else if (_MyItemInfo.IsInFirstLevelSubStep && (rs.Flag & E_ReplaceFlags.Substep) > 0) replaceit = true; else if (_MyItemInfo.IsAccPages & (rs.Flag & E_ReplaceFlags.Attach) > 0) replaceit = true; @@ -1720,8 +1720,11 @@ namespace Volian.Controls.Library { if (VerifyNoHardSpace(text, foundMatch, offset)) { + if(offset != 0 || foundMatch.MyMatch.Index != 0 || !foundMatch.MyWord.ReplaceWith.StartsWith("{\\par}")) + { text = text.Substring(0, offset + foundMatch.MyMatch.Index) + foundMatch.MyWord.ReplaceWith + text.Substring(offset + foundMatch.MyMatch.Index + foundMatch.MyMatch.Length); offset += foundMatch.MyWord.ReplaceWith.Length - foundMatch.MyMatch.Length; + } } } } diff --git a/PROMS/Volian.Print.Library/PromsPrinter.cs b/PROMS/Volian.Print.Library/PromsPrinter.cs index 2bda9b65..856f85db 100644 --- a/PROMS/Volian.Print.Library/PromsPrinter.cs +++ b/PROMS/Volian.Print.Library/PromsPrinter.cs @@ -944,7 +944,7 @@ namespace Volian.Print.Library cb.SaveState(); cb.BeginLayer(layer); SvgWatermark wm = new SvgWatermark(cb, watermark, System.Drawing.Color.Blue, .15F); - wm.SetSquareDotPattern(.7F); + //wm.SetSquareDotPattern(.7F); //wm.SetTextPattern(8, 3); //wm.SetTextPattern2(8); //wm.SetHashPattern(1, 6); diff --git a/PROMS/Volian.Svg.Library/iTextSharp.cs b/PROMS/Volian.Svg.Library/iTextSharp.cs index 2f69b168..38d42a97 100644 --- a/PROMS/Volian.Svg.Library/iTextSharp.cs +++ b/PROMS/Volian.Svg.Library/iTextSharp.cs @@ -916,7 +916,7 @@ namespace Volian.Svg.Library { DrawBackground(writer.DirectContentUnder); DrawPageList(writer.DirectContent); - DrawWatermark(writer.DirectContentUnder); + DrawWatermark(writer.DirectContent); if (DoZoomOMatic) DrawZoomOMatic(writer.DirectContent); } CurrentPageNumber++; @@ -927,7 +927,7 @@ namespace Volian.Svg.Library { DrawBackground(writer.DirectContentUnder); DrawPageList(writer.DirectContent); - DrawWatermark(writer.DirectContentUnder); + DrawWatermark(writer.DirectContent); if (DoZoomOMatic) DrawZoomOMatic(writer.DirectContent); CurrentPageNumber++; } @@ -1009,7 +1009,7 @@ namespace Volian.Svg.Library cb.SaveState(); if (_WatermarkLayer != null) cb.BeginLayer(_WatermarkLayer); SvgWatermark myWatermark = new SvgWatermark(cb, Watermark, System.Drawing.Color.Blue, .15F); - myWatermark.SetSquareDotPattern(.7F); + //myWatermark.SetSquareDotPattern(.7F); myWatermark.Draw(); if (_WatermarkLayer != null) cb.EndLayer(); cb.RestoreState(); @@ -1078,119 +1078,170 @@ namespace Volian.Svg.Library { _ContentByte = contentByte; _Text = text; - float radius = .5F; - float space = 3; + //float radius = .5F; + //float space = 3; _Color = new Color(color); _Opacity = opacity; - SetDotPattern(radius, space); - SetTextLayout(); - } - private void SetTextLayout() - { - Rectangle pageSize = _ContentByte.PdfWriter.PageSize; // Get page size - _Basefont = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, Encoding.ASCII.EncodingName, BaseFont.EMBEDDED); - float hgtA = _Basefont.GetAscentPoint(_Text, 12); - //float hgtD = basefont.GetDescentPoint(text,20); - float wid = _Basefont.GetWidthPointKerned(_Text, 12); - //Console.WriteLine("{0} {1} {2}",hgtA,hgtD,wid); - float rho = wid / hgtA; - float x2 = (rho * pageSize.Height - pageSize.Width) / (rho * rho - 1); - float y1 = x2 * rho; - float y2 = pageSize.Height - y1; - float x1 = pageSize.Width - x2; - _XOffset = x2 + x1 / 2; - _YOffset = y1 / 2; - _TextAngle = CalcAngle(y1, x1); - _Fontsize = (float)(10 * Math.Sqrt(x2 * x2 + y2 * y2) / hgtA); - } - public void SetDotPattern(float radius, float space) - { - _PatternPainter = _ContentByte.CreatePattern(radius * 2, radius * 2, radius * 2 + space, radius * 2 + space); - PdfGState gState = new PdfGState(); - gState.FillOpacity = _Opacity; - _PatternPainter.SetGState(gState); - _PatternPainter.SetColorFill(_Color); - _PatternPainter.Circle(radius, radius, radius); - _PatternPainter.Fill(); - } - public void SetSquareDotPattern(float radius) - { - _PatternPainter = _ContentByte.CreatePattern(radius * 4, radius * 2, radius * 4, radius * 2); - PdfGState gState = new PdfGState(); - gState.FillOpacity = .5f * _Opacity; - _PatternPainter.SetGState(gState); - _PatternPainter.SetColorFill(_Color); - _PatternPainter.Rectangle(0, 0, radius, radius); - _PatternPainter.Rectangle(radius * 2, radius, radius, radius); - _PatternPainter.Fill(); - } - public void SetHashPattern(float thickness, float size) - { - _PatternPainter = _ContentByte.CreatePattern(size, size, size, size); - PdfGState gState = new PdfGState(); - gState.FillOpacity = _Opacity; - gState.StrokeOpacity = _Opacity; - _PatternPainter.SetGState(gState); - _PatternPainter.SetLineWidth(.01F); - _PatternPainter.SetColorStroke(_Color); // Set color - _PatternPainter.MoveTo(0, 0); - _PatternPainter.LineTo(size, size); - _PatternPainter.MoveTo(size, 0); - _PatternPainter.LineTo(0, size); - _PatternPainter.Stroke(); - } - public void SetTextPattern(float fontSize, float space) - { - float hgtA = _Basefont.GetAscentPoint(_Text, fontSize) + _Basefont.GetDescentPoint(_Text, fontSize); - float wid = _Basefont.GetWidthPointKerned(_Text, fontSize); - _PatternPainter = _ContentByte.CreatePattern(wid, hgtA, wid + space, hgtA + space); - _PatternPainter.SetFontAndSize(_Basefont, fontSize); - _PatternPainter.BoundingBox = new Rectangle(-20, -20, 100, 100); - _PatternPainter.BeginText(); - PdfGState gs1 = new PdfGState(); - gs1.FillOpacity = _Opacity; - _PatternPainter.SetGState(gs1); - _PatternPainter.SetColorFill(_Color); // Set color - _PatternPainter.ShowText(_Text); - _PatternPainter.EndText(); - } - public void SetTextPattern2(float fontSize) - { - BaseFont _Basefont2 = BaseFont.CreateFont(BaseFont.HELVETICA, Encoding.ASCII.EncodingName, BaseFont.EMBEDDED); - float hgtA = _Basefont2.GetAscentPoint(_Text, fontSize); - float wid = _Basefont2.GetWidthPointKerned(_Text, fontSize); - _PatternPainter = _ContentByte.CreatePattern(wid * 2, hgtA * 2, wid * 2, hgtA * 2); - _PatternPainter.SetFontAndSize(_Basefont2, fontSize); - _PatternPainter.BoundingBox = new Rectangle(-20, -20, 100, 100); - _PatternPainter.BeginText(); - PdfGState gs1 = new PdfGState(); - gs1.FillOpacity = _Opacity; - _PatternPainter.SetGState(gs1); - _PatternPainter.SetColorFill(_Color); // Set color - _PatternPainter.ShowText(_Text); - _PatternPainter.ShowTextAligned(PdfContentByte.ALIGN_LEFT, _Text, wid, hgtA, 0); - _PatternPainter.EndText(); + //SetDotPattern(radius, space); + //SetTextLayout(); } + //private void SetTextLayout() + //{ + // Rectangle pageSize = _ContentByte.PdfWriter.PageSize; // Get page size + // _Basefont = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, Encoding.ASCII.EncodingName, BaseFont.EMBEDDED); + // float hgtA = _Basefont.GetAscentPoint(_Text, 12); + // //float hgtD = basefont.GetDescentPoint(text,20); + // float wid = _Basefont.GetWidthPointKerned(_Text, 12); + // //Console.WriteLine("{0} {1} {2}",hgtA,hgtD,wid); + // float rho = wid / hgtA; + // float x2 = (rho * pageSize.Height - pageSize.Width) / (rho * rho - 1); + // float y1 = x2 * rho; + // float y2 = pageSize.Height - y1; + // float x1 = pageSize.Width - x2; + // _XOffset = x2 + x1 / 2; + // _YOffset = y1 / 2; + // _TextAngle = CalcAngle(y1, x1); + // _Fontsize = (float)(10 * Math.Sqrt(x2 * x2 + y2 * y2) / hgtA); + //} + //public void SetDotPattern(float radius, float space) + //{ + // _PatternPainter = _ContentByte.CreatePattern(radius * 2, radius * 2, radius * 2 + space, radius * 2 + space); + // PdfGState gState = new PdfGState(); + // gState.FillOpacity = _Opacity; + // _PatternPainter.SetGState(gState); + // _PatternPainter.SetColorFill(_Color); + // _PatternPainter.Circle(radius, radius, radius); + // _PatternPainter.Fill(); + //} + //public void SetSquareDotPattern(float radius) + //{ + // _PatternPainter = _ContentByte.CreatePattern(radius * 4, radius * 2, radius * 4, radius * 2); + // PdfGState gState = new PdfGState(); + // gState.FillOpacity = .5f * _Opacity; + // _PatternPainter.SetGState(gState); + // _PatternPainter.SetColorFill(_Color); + // _PatternPainter.Rectangle(0, 0, radius, radius); + // _PatternPainter.Rectangle(radius * 2, radius, radius, radius); + // _PatternPainter.Fill(); + //} + //public void SetHashPattern(float thickness, float size) + //{ + // _PatternPainter = _ContentByte.CreatePattern(size, size, size, size); + // PdfGState gState = new PdfGState(); + // gState.FillOpacity = _Opacity; + // gState.StrokeOpacity = _Opacity; + // _PatternPainter.SetGState(gState); + // _PatternPainter.SetLineWidth(.01F); + // _PatternPainter.SetColorStroke(_Color); // Set color + // _PatternPainter.MoveTo(0, 0); + // _PatternPainter.LineTo(size, size); + // _PatternPainter.MoveTo(size, 0); + // _PatternPainter.LineTo(0, size); + // _PatternPainter.Stroke(); + //} + //public void SetTextPattern(float fontSize, float space) + //{ + // float hgtA = _Basefont.GetAscentPoint(_Text, fontSize) + _Basefont.GetDescentPoint(_Text, fontSize); + // float wid = _Basefont.GetWidthPointKerned(_Text, fontSize); + // _PatternPainter = _ContentByte.CreatePattern(wid, hgtA, wid + space, hgtA + space); + // _PatternPainter.SetFontAndSize(_Basefont, fontSize); + // _PatternPainter.BoundingBox = new Rectangle(-20, -20, 100, 100); + // _PatternPainter.BeginText(); + // PdfGState gs1 = new PdfGState(); + // gs1.FillOpacity = _Opacity; + // _PatternPainter.SetGState(gs1); + // _PatternPainter.SetColorFill(_Color); // Set color + // _PatternPainter.ShowText(_Text); + // _PatternPainter.EndText(); + //} + //public void SetTextPattern2(float fontSize) + //{ + // BaseFont _Basefont2 = BaseFont.CreateFont(BaseFont.HELVETICA, Encoding.ASCII.EncodingName, BaseFont.EMBEDDED); + // float hgtA = _Basefont2.GetAscentPoint(_Text, fontSize); + // float wid = _Basefont2.GetWidthPointKerned(_Text, fontSize); + // _PatternPainter = _ContentByte.CreatePattern(wid * 2, hgtA * 2, wid * 2, hgtA * 2); + // _PatternPainter.SetFontAndSize(_Basefont2, fontSize); + // _PatternPainter.BoundingBox = new Rectangle(-20, -20, 100, 100); + // _PatternPainter.BeginText(); + // PdfGState gs1 = new PdfGState(); + // gs1.FillOpacity = _Opacity; + // _PatternPainter.SetGState(gs1); + // _PatternPainter.SetColorFill(_Color); // Set color + // _PatternPainter.ShowText(_Text); + // _PatternPainter.ShowTextAligned(PdfContentByte.ALIGN_LEFT, _Text, wid, hgtA, 0); + // _PatternPainter.EndText(); + //} public void Draw() { _ContentByte.SaveState(); - _ContentByte.BeginText(); - _ContentByte.SetPatternFill(_PatternPainter); - _ContentByte.SetTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_FILL_STROKE); - _ContentByte.SetLineWidth(.5F); - _ContentByte.SetFontAndSize(_Basefont, _Fontsize);// Set font and size - _ContentByte.SetColorStroke(_Color); - PdfGState gs2 = new PdfGState(); - gs2.StrokeOpacity = _Opacity; - _ContentByte.SetGState(gs2); - _ContentByte.ShowTextAlignedKerned(PdfContentByte.ALIGN_CENTER, _Text, _XOffset, _YOffset, _TextAngle);// Draw the text - _ContentByte.EndText(); - _ContentByte.FillStroke(); // Controlled by TextRenderMode above + //_ContentByte.BeginText(); + //_ContentByte.SetPatternFill(_PatternPainter); + //_ContentByte.SetTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_FILL_STROKE); + //_ContentByte.SetLineWidth(.5F); + //_ContentByte.SetFontAndSize(_Basefont, _Fontsize);// Set font and size + //_ContentByte.SetColorStroke(_Color); + //PdfGState gs2 = new PdfGState(); + //gs2.StrokeOpacity = _Opacity; + //_ContentByte.SetGState(gs2); + //_ContentByte.ShowTextAlignedKerned(PdfContentByte.ALIGN_CENTER, _Text, _XOffset, _YOffset, _TextAngle);// Draw the text + //_ContentByte.EndText(); + _ContentByte.AddImage(WatermarkImage); _ContentByte.RestoreState(); } - private float CalcAngle(float opposite, float adjacent) + //private float CalcAngle(float opposite, float adjacent) + //{ + // return (float)(Math.Atan2(opposite, adjacent) * (180 / Math.PI)); + //} + private Image _WatermarkImage; + public Image WatermarkImage { - return (float)(Math.Atan2(opposite, adjacent) * (180 / Math.PI)); + get + { + if (_WatermarkImage == null) + { + float fntSize = 200; + System.Drawing.Font fnt = new System.Drawing.Font("Arial", fntSize); + string msg = _Text; + System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath(); + gp.AddString(msg, fnt.FontFamily, 0, fntSize, new System.Drawing.Point(0, 0), + System.Drawing.StringFormat.GenericTypographic); + System.Drawing.RectangleF bnds = gp.GetBounds(); + gp.Reset(); + int height = (int)bnds.Height; + int width = (int)bnds.Width; + System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(width + 2, height + 2); + using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bmp)) + { + g.FillRectangle(System.Drawing.Brushes.Transparent, 0, 0, width, height); + g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit; + g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; + gp.AddString(msg, fnt.FontFamily, 0, fntSize, new System.Drawing.PointF(-bnds.X, -bnds.Y), + System.Drawing.StringFormat.GenericTypographic); + System.Drawing.Drawing2D.HatchBrush aHatchBrush = new System.Drawing.Drawing2D.HatchBrush(System.Drawing.Drawing2D.HatchStyle.Percent25, System.Drawing.Color.FromArgb(64, + System.Drawing.Color.Blue), System.Drawing.Color.Transparent); + g.FillPath(aHatchBrush, gp); + g.DrawPath(new System.Drawing.Pen(System.Drawing.Color.FromArgb(96, System.Drawing.Color.Blue)), gp); + //g.DrawRectangle(System.Drawing.Pens.Cyan, 0, 0, bnds.Width, bnds.Height); + } + _WatermarkImage = iTextSharp.text.Image.GetInstance(bmp, System.Drawing.Imaging.ImageFormat.Png); + _WatermarkImage.SetAbsolutePosition(72, 72); + float H = _ContentByte.PdfWriter.PageSize.Height - 144; + float W = _ContentByte.PdfWriter.PageSize.Width - 144; + float ratio = bnds.Width / bnds.Height; + float W2 = (H - W / ratio) / (ratio - 1 / ratio); + float W1 = W - W2; + float H1 = (float)(Math.Sqrt(-4*(W1*W2)+H*H)+H)/2; + float H2 = H-H1; + float Theta = (float) Math.Atan(H1 / W1); + float h = H2 / (float) Math.Cos(Theta); + float w = H1 / (float) Math.Sin(Theta); + _WatermarkImage.Rotation = Theta; // 3.141592653F / 4; + _WatermarkImage.ScaleAbsolute(w, h); + } + return _WatermarkImage; + } } }