Download PdfImageBoxSample.zip, last updated 04/09/2011 (513.29 KB)

Download
  • md5: 5176311d2ed74377312c76dfb6b5ec98
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Windows.Forms;
using Cyotek.Windows.Forms;

namespace PdfImageBoxSample
{
  // ImageBox sample project
  // http://cyotek.com/blog/creating-a-scrollable-and-zoomable-image-viewer-in-csharp-part-1
  // http://cyotek.com/blog/creating-a-scrollable-and-zoomable-image-viewer-in-csharp-part-2
  // http://cyotek.com/blog/creating-a-scrollable-and-zoomable-image-viewer-in-csharp-part-3
  // http://cyotek.com/blog/creating-a-scrollable-and-zoomable-image-viewer-in-csharp-part-4
  // http://cyotek.com/blog/extending-the-imagebox-component-to-display-the-contents-of-a-pdf-file-using-csharp

  // If you use this source in your applications, attribution or donations are welcome.

  // Toolbar icons from Fugue Icons - http://p.yusukekamiyamane.com/

  public partial class MainForm : Form
  {
  #region  Public Constructors  

    public MainForm()
    {
      InitializeComponent();
    }

  #endregion  Public Constructors  

  #region  Event Handlers  

    private void actualSizeToolStripButton_Click(object sender, EventArgs e)
    {
      pdfImageBox.ActualSize();
    }

    private void exitToolStripMenuItem_Click(object sender, EventArgs e)
    {
      this.Close();
    }

    private void firstPageToolStripButton_Click(object sender, EventArgs e)
    {
      pdfImageBox.FirstPage();
    }

    private void imageBox_MouseLeave(object sender, EventArgs e)
    {
      cursorToolStripStatusLabel.Text = string.Empty;
    }

    private void imageBox_MouseMove(object sender, MouseEventArgs e)
    {
      Point point;

      point = ((ImageBox)sender).PointToImage(e.Location);

      if (point != null)
        cursorToolStripStatusLabel.Text = point.ToString();
      else
        cursorToolStripStatusLabel.Text = string.Empty;
    }

    private void imageBox_Paint(object sender, PaintEventArgs e)
    {
      // highlight the image
      if (showImageRegionToolStripButton.Checked)
        this.DrawBox(e.Graphics, Color.CornflowerBlue, ((ImageBox)sender).GetImageViewPort());

      // show the region that will be drawn from the source image
      if (showSourceImageRegionToolStripButton.Checked)
        this.DrawBox(e.Graphics, Color.Firebrick, new Rectangle(((ImageBox)sender).GetImageViewPort().Location, ((ImageBox)sender).GetSourceImageRegion().Size));
    }

    private void lastPageToolStripButton_Click(object sender, EventArgs e)
    {
      pdfImageBox.LastPage();
    }

    private void MainForm_Load(object sender, EventArgs e)
    {
      propertyGrid.SelectedGridItem.Expanded = true;                                      // expand the default property
      this.UpdateUI();
      this.OpenPDF(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "sample.pdf"));    // open a sample document
    }

    private void nextPageToolStripButton_Click(object sender, EventArgs e)
    {
      pdfImageBox.NextPage();
    }

    private void openPDFToolStripMenuItem_Click(object sender, EventArgs e)
    {
      if (openPdfFileDialog.ShowDialog(this) == System.Windows.Forms.DialogResult.OK)
        this.OpenPDF(openPdfFileDialog.FileName);
    }

    private void pageToolStripTextBox_KeyPress(object sender, KeyPressEventArgs e)
    {
      if (e.KeyChar == '\r')
      {
        int pageNumber;

        e.Handled = true;

        if (int.TryParse(pageToolStripTextBox.Text, out pageNumber) && pageNumber > 0 && pageNumber <= pdfImageBox.PageCount)
          pdfImageBox.CurrentPage = pageNumber;
        else
          pageToolStripTextBox.Text = pdfImageBox.CurrentPage.ToString();
      }
    }

    private void pdfImageBox_LoadedPage(object sender, EventArgs e)
    {
      toolStripStatusLabel.Text = string.Empty;
      Cursor.Current = Cursors.Default;
    }

    private void pdfImageBox_LoadingPage(object sender, EventArgs e)
    {
      toolStripStatusLabel.Text = "Loading page...";
      Cursor.Current = Cursors.WaitCursor;
      statusStrip.Refresh();// Running on same thread, so need to force a refresh
    }

    private void previousPageToolStripButton_Click(object sender, EventArgs e)
    {
      pdfImageBox.PreviousPage();
    }

    private void showImageRegionToolStripButton_Click(object sender, EventArgs e)
    {
      pdfImageBox.Invalidate();
    }

    private void sizeToFitToolStripButton_Click(object sender, EventArgs e)
    {
      pdfImageBox.SizeToFit = true;
    }

    private void zoomInToolStripButton_Click(object sender, EventArgs e)
    {
      pdfImageBox.ZoomIn();
    }

    private void zoomOutToolStripButton_Click(object sender, EventArgs e)
    {
      pdfImageBox.ZoomOut();
    }

  #endregion  Event Handlers  

  #region  Private Methods  

    private void DrawBox(Graphics graphics, Color color, Rectangle rectangle)
    {
      int offset;
      int penWidth;

      offset = 9;
      penWidth = 2;

      using (SolidBrush brush = new SolidBrush(Color.FromArgb(64, color)))
        graphics.FillRectangle(brush, rectangle);

      using (Pen pen = new Pen(color, penWidth))
      {
        pen.DashStyle = DashStyle.Dot;
        graphics.DrawLine(pen, rectangle.Left, rectangle.Top - offset, rectangle.Left, rectangle.Bottom + offset);
        graphics.DrawLine(pen, rectangle.Left + rectangle.Width, rectangle.Top - offset, rectangle.Left + rectangle.Width, rectangle.Bottom + offset);
        graphics.DrawLine(pen, rectangle.Left - offset, rectangle.Top, rectangle.Right + offset, rectangle.Top);
        graphics.DrawLine(pen, rectangle.Left - offset, rectangle.Bottom, rectangle.Right + offset, rectangle.Bottom);
      }
    }

    private void OpenPDF(string fileName)
    {
      pdfImageBox.OpenPDF(fileName, string.Empty);
      pageCountToolStripLabel.Text = " of " + pdfImageBox.PageCount.ToString();
      this.UpdateUI();
    }

    private void UpdateUI()
    {
      positionToolStripStatusLabel.Text = pdfImageBox.AutoScrollPosition.ToString();
      imageSizeToolStripStatusLabel.Text = pdfImageBox.GetImageViewPort().ToString();
      zoomToolStripStatusLabel.Text = string.Format("{0}%", pdfImageBox.Zoom);

      firstPageToolStripButton.Enabled = pdfImageBox.CanMoveFirst;
      previousPageToolStripButton.Enabled = pdfImageBox.CanMovePrevious;
      nextPageToolStripButton.Enabled = pdfImageBox.CanMoveNext;
      lastPageToolStripButton.Enabled = pdfImageBox.CanMoveLast;
      pageToolStripTextBox.Text = pdfImageBox.CurrentPage.ToString();

      sizeToFitToolStripButton.Checked = pdfImageBox.SizeToFit;
      actualSizeToolStripButton.Checked = (pdfImageBox.Zoom == 100);
    }

    private void UpdateUIHandler(object sender, EventArgs e)
    {
      this.UpdateUI();
    }

    private void UpdateUIHandler(object sender, ScrollEventArgs e)
    {
      this.UpdateUI();
    }

  #endregion  Private Methods  
  }
}

Donate

Donate