public override void Render(int page, Graphics graphics, float dpiX, float dpiY, Rectangle bounds) { _document.CurrentPage = page + 1; _document.RenderDPI = dpiX; _document.ClientBounds = bounds; _document.CurrentX = -bounds.Left; _document.CurrentY = -bounds.Top; var hdc = graphics.GetHdc(); try { // xPDF uses the control to get sizing information. We use // a dummy control to satisfy this requirement. _dummyControl.Size = new Size(bounds.Width, 1); _document.FitToWidth(_dummyControl.Handle); _document.RenderPage(_dummyControl.Handle); _document.DrawPageHDC(hdc); } finally { graphics.ReleaseHdc(hdc); } }
public static Image RenderPage(PDFWrapper doc, int page) { doc.CurrentPage = page + 1; doc.CurrentX = 0; doc.CurrentY = 0; doc.RenderPage(IntPtr.Zero); // create an image to draw the page into var buffer = new Bitmap(doc.PageWidth, doc.PageHeight); doc.ClientBounds = new Rectangle(0, 0, doc.PageWidth, doc.PageHeight); using (var g = Graphics.FromImage(buffer)) { var hdc = g.GetHdc(); try { doc.DrawPageHDC(hdc); } finally { g.ReleaseHdc(); } } return(buffer); }
void pageViewer1_PaintControl(object sender, Rectangle view, Point location, Graphics g) { Size size = new Size(view.Right, view.Bottom); Rectangle rectangle = new Rectangle(location, size); doc.ClientBounds = rectangle; doc.CurrentX = view.X; doc.CurrentY = view.Y; doc.DrawPageHDC(g.GetHdc()); g.ReleaseHdc(); }
private void doubleBufferControl1_PaintControl(object sender, Rectangle view, Point location, Graphics g) { if (_pdfDoc != null) { Size sF = new Size(view.Right, view.Bottom); Rectangle r = new Rectangle(location, sF); _pdfDoc.ClientBounds = r; _pdfDoc.CurrentX = view.X; _pdfDoc.CurrentY = view.Y; _pdfDoc.DrawPageHDC(g.GetHdc()); g.ReleaseHdc(); /* * Size sF = new Size(view.Right, view.Bottom); * Rectangle r = new Rectangle(location, sF); * * _pdfDoc.SliceBox = new Rectangle(Convert.ToInt32(view.X * _pdfDoc.Zoom / 72), Convert.ToInt32(view.Y * _pdfDoc.Zoom / 72), view.Width, view.Height); * _pdfDoc.RenderPage(pageViewControl1.Handle, true); * * _pdfDoc.ClientBounds = r; * _pdfDoc.CurrentX = 0; * _pdfDoc.CurrentY = 0; * * _pdfDoc.DrawPageHDC(g.GetHdc()); * g.ReleaseHdc();*/ /* * if (_pdfDoc.RenderDPI >= g.DpiX) * { * foreach (PageLink pl in _pdfDoc.GetLinks(_pdfDoc.CurrentPage)) * { * //Convert coordinates * Point p1 = Point.Ceiling(_pdfDoc.PointUserToDev(new PointF(pl.Bounds.Left, pl.Bounds.Top))); * Point p2 = Point.Ceiling(_pdfDoc.PointUserToDev(new PointF(pl.Bounds.Right, pl.Bounds.Bottom))); * Rectangle linkLoc = new Rectangle(p1.X, p1.Y, p2.X - p1.X, p1.Y - p2.Y); * //Translate * linkLoc.Offset(-view.X, -view.Y); * linkLoc.Offset(r.X, r.Y); * linkLoc.Offset(0, p2.Y - p1.Y); * //Draw Rectangle * g.DrawRectangle(Pens.Blue, linkLoc); * } * } */ } }
protected Bitmap GetBitmapBase(double Resolution, bool Transparent = true) { if (mypdfDoc != null && mypdfDoc.PageCount > 0) { double dpi = 72 * Resolution / Consts.ptspertikzunit; PDFPage p = mypdfDoc.Pages[1]; double pwidth = p.Width, pheight = p.Height; // the following lines are as in the PDFPage.GetBitmap() function int width = Convert.ToInt32(pwidth * dpi / 254); int height = Convert.ToInt32(pheight * dpi / 254); int safetymargin = 0; // >0 => hack to prevent cropping near boundary // if we'd need too much memory -> don't proceed if (width * height > 20e6) { GlobalUI.UI.AddStatusLine(this, "Pdf rendering aborted: it's too big!", true); return(null); } //Stopwatch s = new Stopwatch(); //s.Start(); mypdfDoc.RenderDPI = 72 * Resolution / Consts.ptspertikzunit; //System.Windows.Forms.PictureBox pic = new System.Windows.Forms.PictureBox(); mypdfDoc.CurrentPage = 1; /*Added since 1.0.6.2*/ mypdfDoc.CurrentX = 0; mypdfDoc.CurrentY = 0; mypdfDoc.ClientBounds = new System.Drawing.Rectangle(0, 0, width + safetymargin, height + safetymargin); //new Rectangle(0, 0, mypdfDoc.PageWidth, mypdfDoc.PageHeight); mypdfDoc.RenderPage(IntPtr.Zero, true); ////pic.Handle); // it works with zero, very strange!!! //Bitmap bbb = mypdfDoc.Pages[1].GetBitmap(72 * Resolution / Consts.ptspertikzunit, false); //System.Drawing.Image I = mypdfDoc.Pages[1].GetImage(1); //System.Drawing.Image I2 = mypdfDoc.Pages[1].GetImage(0); //if (mypdfDoc.PageWidth * mypdfDoc.PageHeight == 0) if (height * width == 0) { return(null); } Bitmap _backbuffer = new System.Drawing.Bitmap(width + safetymargin, height + safetymargin); //new Bitmap(mypdfDoc.PageWidth, mypdfDoc.PageHeight); using (Graphics g = Graphics.FromImage(_backbuffer)) { /*New thread safe method*/ mypdfDoc.DrawPageHDC(g.GetHdc()); g.ReleaseHdc(); } //s.Stop(); //MainWindow.AddStatusLine("DrawpageHdc took " + s.ElapsedMilliseconds + " ms"); //pic.Dispose(); if (Transparent) { _backbuffer.MakeTransparent(System.Drawing.Color.White); _backbuffer.MakeTransparent(System.Drawing.Color.FromArgb(255, 253, 253, 253)); _backbuffer.MakeTransparent(System.Drawing.Color.FromArgb(255, 254, 254, 254)); } // test //_backbuffer.Save(@"C:\temp\temp.bmp"); //mypdfDoc.ExportJpg(@"C:\temp\temp.jpg",1,1,75,100,9000); return(_backbuffer); } else { return(null); } }