protected override void OnBeginPrint (PrintContext context)
		{
			layout = PangoUtil.CreateLayout (context);
			layout.FontDescription = settings.Font;
			
			layout.FontDescription.Weight = Pango.Weight.Bold;
			layout.SetText (" ");
			int w, h;
			layout.GetSize (out w, out h);
			this.lineHeight = h / Pango.Scale.PangoScale;
			layout.FontDescription.Weight = Pango.Weight.Normal;
			
			SetHeaderFormat (settings.HeaderFormat);
			SetFooterFormat (settings.FooterFormat);
			
			style = Mono.TextEditor.Highlighting.SyntaxModeService.GetColorStyle (null, settings.ColorScheme);
			
			pageWidth = context.PageSetup.GetPageWidth (Unit.Mm);
			pageHeight = context.PageSetup.GetPageHeight (Unit.Mm);
			double contentHeight = pageHeight
				- (headerLines > 0? settings.HeaderPadding : 0) 
				- (footerLines > 0? settings.FooterPadding : 0);
			linesPerPage = (int)(contentHeight / lineHeight) - (headerLines + footerLines);
			totalPages = (int)Math.Ceiling ((double)doc.LineCount / linesPerPage); 
			
			NPages = totalPages;
			
			base.OnBeginPrint (context);
		}
        public static void Main(string[] Pages)
        {
            Application.Init();
            var print = new Gtk.PrintOperation();

            print.PrintSettings            = new Gtk.PrintSettings();
            print.PrintSettings.Scale      = 33.75;
            print.PrintSettings.Resolution = 1200;
            print.JobName     = "FeuerwehrCloud Ausdruck";
            print.BeginPrint += (obj2, args) => { print.NPages = Pages.Length; };
            print.DrawPage   += (obj2, args) => {
                try {
                    FeuerwehrCloud.Helper.Logger.WriteLine("|  > [ImagePrinter] *** Page " + args.PageNr.ToString() + " of " + Pages.Length.ToString());
                    var imageBit = default(byte[]);
                    var image    = System.Drawing.Image.FromFile("/tmp/" + Pages[args.PageNr]);
                    using (var memoryStream = new MemoryStream()) {
                        image.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
                        imageBit = memoryStream.ToArray();
                    }
                    Gtk.PrintContext context = args.Context;
                    try {
                        var pixBuf = new Gdk.Pixbuf(imageBit, image.Width, image.Height);
                        try {
                            Cairo.Context cr = context.CairoContext;
                            cr.MoveTo(0, 0);
                            Gdk.CairoHelper.SetSourcePixbuf(cr, pixBuf, 0, 10);
                            cr.Paint();
                            ((IDisposable)cr).Dispose();
                        } catch (Exception ex4) {
                            FeuerwehrCloud.Helper.Logger.WriteLine("|||  > [ImagePrinter] *** ERROR: " + ex4.ToString());
                        }
                    } catch (Exception ex5) {
                        FeuerwehrCloud.Helper.Logger.WriteLine("|||  > [ImagePrinter] *** ERROR: " + ex5.ToString());
                    }
                } catch (Exception ex3) {
                    FeuerwehrCloud.Helper.Logger.WriteLine("||| > [ImagePrinter] *** ERROR: " + ex3.ToString());
                }
            };
            print.EndPrint += (obj2, args) => { FeuerwehrCloud.Helper.Logger.WriteLine("|  > [ImagePrinter] *** Printing finished "); Application.Quit(); };
            print.Run(Gtk.PrintOperationAction.Print, null);
        }
        protected virtual void OnPrintActionActivated(object sender, System.EventArgs e)
        {
            using (PrintContext context = new PrintContext(GdkWindow.Handle))
            {

                printing = new PrintOperation();
                printing.Unit = Unit.Points;
                printing.UseFullPage = false;

                printing.BeginPrint += HandlePrintBeginPrint;
                printing.DrawPage += HandlePrintDrawPage;
                printing.EndPrint += HandlePrintEndPrint;

                printing.Run(PrintOperationAction.PrintDialog, null);
            }
        }
		protected override void OnDrawPage (PrintContext context, int pageNr)
		{
			using (var cr = context.CairoContext) {
				double xPos = 0, yPos = 0;
			
				PrintHeader (cr, context, pageNr, ref xPos, ref yPos);
			
				int startLine = pageNr * linesPerPage;
				int endLine = Math.Min (startLine + linesPerPage - 1, doc.LineCount);
			
				//FIXME: use proper 1-layout-per-line
				for (int i = startLine; i < endLine; i++) {
					var line = doc.GetLine (i + 1);
					if (!settings.UseHighlighting) {
						string text = doc.GetTextAt (line);
						text = text.Replace ("\t", new string (' ', settings.TabSize));
					
						layout.SetText (text);
						cr.MoveTo (xPos, yPos);
						Pango.CairoHelper.ShowLayout (cr, layout);
					
						yPos += lineHeight;
						continue;
					}
					
					var startChunk = doc.SyntaxMode.GetChunks (style, line, line.Offset, line.LengthIncludingDelimiter);
					foreach (Chunk chunk in startChunk) {
						ChunkStyle chunkStyle = chunk != null ? style.GetChunkStyle (chunk) : null;
						string text = doc.GetTextAt (chunk);
						text = text.Replace ("\t", new string (' ', settings.TabSize));
						layout.SetText (text);
					
						var atts = ResetAttributes ();
					
						atts.Insert (new Pango.AttrForeground (chunkStyle.Color.Red, chunkStyle.Color.Green, chunkStyle.Color.Blue));
					
						if (chunkStyle.Bold) {
							atts.Insert (new Pango.AttrWeight (Pango.Weight.Bold));
						}
						if (chunkStyle.Italic) {
							atts.Insert (new Pango.AttrStyle (Pango.Style.Italic));
						}
						if (chunkStyle.Underline) {
							atts.Insert (new Pango.AttrUnderline (Pango.Underline.Single));
						}
					
						cr.MoveTo (xPos, yPos);
						Pango.CairoHelper.ShowLayout (cr, layout);
					
						int wout, hout;
						layout.GetSize (out wout, out hout);
						double w = wout / Pango.Scale.PangoScale;
						
						xPos += w;
					
						if (w > pageWidth)
							break;
					}

					xPos = 0;
					yPos += lineHeight;
				}
			
				PrintFooter (cr, context, pageNr, ref xPos, ref yPos);
			}
		}
		protected override void OnEndPrint (PrintContext context)
		{
			layout.Dispose ();
			layout = null;
			base.OnEndPrint (context);
		}
		void PrintFooter (Cairo.Context cr, PrintContext context, int page, ref double xPos, ref double yPos)
		{
			if (footerLines == 0)
				return;
			
			yPos = pageHeight - (lineHeight * footerLines) - settings.FooterPadding;
			
			if (settings.FooterSeparatorWeight > 0) {
				cr.LineWidth = settings.FooterSeparatorWeight;
				cr.MoveTo (pageWidth / 3, yPos + (settings.FooterPadding / 2));
				cr.LineTo (2 * pageWidth / 3, yPos + (settings.FooterPadding / 2));
				cr.Stroke ();
			}
			
			yPos += settings.FooterPadding;
			
			ResetAttributes ();
			
			layout.SetText (Subst (footerText, page));
			
			int wout, hout;
			layout.GetSize (out wout, out hout);
			double w = wout / Pango.Scale.PangoScale;
			
			cr.MoveTo ((pageWidth - w) / 2, yPos);
			Pango.CairoHelper.ShowLayout (cr, layout);
		}
Example #7
0
		public static Pango.Layout CreateLayout (PrintContext context)
		{
			var ptr = gtk_print_context_create_pango_layout (context.Handle);
			return ptr == IntPtr.Zero? null : new Pango.Layout (ptr);
		}
        protected void OnPrintActionActivated(object sender, System.EventArgs e)
        {
            using (PrintContext context = new PrintContext(GdkWindow.Handle))
            {
                printing = new PrintOperation();
                printing.Unit = Unit.Points;
                printing.UseFullPage = true;
                printing.DefaultPageSetup = new PageSetup();
                printing.DefaultPageSetup.Orientation =
                    report.PageHeightPoints > report.PageWidthPoints ? PageOrientation.Portrait : PageOrientation.Landscape;

                printing.BeginPrint += HandlePrintBeginPrint;
                printing.DrawPage += HandlePrintDrawPage;
                printing.EndPrint += HandlePrintEndPrint;

                printing.Run(PrintOperationAction.PrintDialog, null);
            }
        }