示例#1
0
        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);
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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();
        }
示例#4
0
        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);
                 *  }
                 * }
                 */
            }
        }
示例#5
0
        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);
            }
        }