public void SaveImages(Document document, string filename, List<int> pageNumbers, int compressionRate)
    {
      string directory = System.IO.Path.GetDirectoryName(filename);
      string extension = System.IO.Path.GetExtension(filename);

      System.Drawing.Imaging.ImageFormat format;

      switch(extension.ToUpper())
      {
        case ".JPG":
          {
            format = System.Drawing.Imaging.ImageFormat.Jpeg;
          }
          break;
        case ".GIF":
          {
            format = System.Drawing.Imaging.ImageFormat.Gif;
          }
          break;
        case ".PNG":
          {
            format = System.Drawing.Imaging.ImageFormat.Png;
          }
          break;
        case ".BMP":
          {
            format = System.Drawing.Imaging.ImageFormat.Bmp;
          }
          break;
        default:
          {
            format = null;
          }
          break;
      }

      foreach(int num in pageNumbers)
      {
        Page page = document.GetPage(num);

        Image image = page.GetImage();

        if (format == null)
        {
          // Since the format is not specified use the native format from the image
          format = image.RawFormat;
        }

        string saveName = page.Name;

        if(pageNumbers.Count == 1)
        {
          saveName = System.IO.Path.GetFileNameWithoutExtension(filename);
        }

        SaveImage(image, format, directory, saveName, compressionRate);
      }
    }
    public void SaveDocument(Document document, string filename, List<int> pageNumbers, bool append, 
      bool compressImage, 
      int compressionFactor, 
      bool importNativePages,
      ResolutionDpi exportResolution)
    {
      IntPtr pdfDocument = LibPdfium.CreateNewDocument();
      
      if(append && File.Exists(filename))
      {
        IntPtr sourceDoc = LibPdfium.LoadDocument(filename);

        for(int i = 0; i < LibPdfium.GetPageCount(sourceDoc); i++)
        {
          LibPdfium.CopyPage(pdfDocument, sourceDoc, i + 1);
        }

        LibPdfium.CloseDocument(sourceDoc);
      }
      
      foreach(int num in pageNumbers)
      {
        // Get the current page from document
        Page page = document.GetPage(num);

        Image image = null;

        if(page is PageFromPdf)
        {
          PageFromPdf pageFromPdf = page as PageFromPdf;

          if(pageFromPdf.SingleImageMode)
          {
            image = pageFromPdf.GetSingleImage();
          }
          else if(importNativePages)
          {
            pageFromPdf.ExportToPdfDocument(pdfDocument);
          }
          else
          {
            image = pageFromPdf.Render(exportResolution);
          }
        }
        else
        {
          image = page.GetSourceImage();
        }

        if(image != null)
        {
          if(compressImage)
          {
            image = CompressImage(image, compressionFactor, exportResolution);
          }

          DrawPage(pdfDocument, page, image);
        }
      }

      // Save the document...
      LibPdfium.SaveDocument(pdfDocument, filename);
    }