栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

C#获取指定PDF文件页数的方法

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#获取指定PDF文件页数的方法

本文实例讲述了C#获取指定PDF文件页数的方法。分享给大家供大家参考。具体如下:

using System;
using System.IO;
using System.Text.Regularexpressions;
using System.Windows.Forms;
namespace RobvanderWoude
{
 class PDFPageCount
 {
  static int Main( string[] args )
  {
   #region Get help
   if ( args.Length == 0 )
   {
    ShowHelp( );
    return 0;
   }
   foreach ( string arg in args )
   {
    if ( arg == "/?" || arg == "-?" || arg.ToLower( ) == "--help" )
    {
     ShowHelp( );
     return 0;
    }
   }
   #endregion
   int errors = 0;
   foreach ( string arg in args )
   {
    try
    {
     Regex regexp = new Regex( @"^(.*)\([^\]+.pdf)$", RegexOptions.IgnoreCase );
     if ( regexp.IsMatch( arg ) )
     {
      // Match means the filespec has a valid format (i.e. *.pdf)
      string[] matches = regexp.Split( arg );
      string folder = matches[1];
      string filespec = matches[2];
      if ( Directory.Exists( folder ) )
      {
// Folder exists, check for matching files
string[] fileList = Directory.GetFiles( folder, filespec );
if ( fileList.Length == 0 )
{
 // No matching files in this folder
 ShowError( "ERROR: No files matching "{0}" were found in "{1}"", filespec, folder );
 errors += 1;
}
else
{
 // Iterate through list of matching files
 foreach ( string file in fileList )
 {
  int pagecount = PageCount( file );
  if ( pagecount == -1 )
  {
   // Just increase the error count, the PageCount( )
   // procedure already wrote an error message to screen
   errors += 1;
  }
  else
  {
   // No pages means there is a problem with the file
   if ( pagecount == 0 )
   {
    Console.ForegroundColor = ConsoleColor.Red;
    errors += 1;
   }
   // Display the formated result on screen
   Console.WriteLine( "{0,4} {1,-10} {2}", pagecount.ToString( ), ( pagecount == 1 ? "page" : "pages" ), file );
   if ( pagecount == 0 )
   {
    Console.ForegroundColor = ConsoleColor.Gray;
   }
  }
 }
}
      }
      else
      {
// Folder doesn't exist
ShowError( "ERROR: Folder "{0}" not found", folder );
errors += 1;
      }
     }
     else
     {
      // No match for the regular expression means the filespec was invalid
      ShowError( "ERROR: Invalid filespec "{0}", please specify PDF files only", arg );
      errors += 1;
     }
    }
    catch ( Exception e )
    {
     // All other errors: display an error message and then continue
     ShowError( "ERROR: {0}", e.Message );
     errors += 1;
    }
   }
   if ( errors != 0 )
   {
    ShowError( "    {0} finished with {1} error{2}", GetExeName( ), errors.ToString( ), ( errors == 1 ? "" : "s" ) );
   }
   return errors;
  }
  static string GetExeName( )
  {
   string exe = Application.ExecutablePath.ToString( );
   Regex regexp = new Regex( @"\([^\]+)$" );
   return regexp.Split( exe )[1];
  }
  static int PageCount( string filename )
  {
   Regex regexp = new Regex( @".pdf$", RegexOptions.IgnoreCase );
   if ( regexp.IsMatch( filename ) )
   {
    try
    {
     FileStream fs = new FileStream( filename, FileMode.Open, FileAccess.Read );
     StreamReader sr = new StreamReader( fs );
     string pdfText = sr.ReadToEnd( );
     regexp = new Regex( @"/Types*/Page[^s]" );
     MatchCollection matches = regexp.Matches( pdfText );
     return matches.Count;
    }
    catch ( Exception e )
    {
     ShowError( "ERROR: {0} ({1})", e.Message, filename );
     return -1;
    }
   }
   else
   {
    ShowError( "ERROR: {0} is not a PDF file", filename );
    return -1;
   }
  }
  static void ShowError( string message, string param1, string param2 = "", string param3 = "" )
  {
   Console.Error.WriteLine( );
   Console.ForegroundColor = ConsoleColor.Red;
   Console.Error.WriteLine( message, param1, param2, param3 );
   Console.ForegroundColor = ConsoleColor.Gray;
   Console.Error.WriteLine( );
  }
  #region Display help text
  static void ShowHelp( )
  {
   Console.Error.WriteLine( );
   Console.Error.WriteLine( "{0}, Version 1.02", GetExeName( ) );
   Console.Error.WriteLine( "Return the page count for the specified PDF file(s)" );
   Console.Error.WriteLine( );
   Console.Error.WriteLine( "Usage: {0} filespec [ filespec [ filespec [ ... ] ] ]", GetExeName( ).ToUpper( ) );
   Console.Error.WriteLine( );
   Console.Error.WriteLine( "Where: "filespec"  is a file specification for the PDF file(s) to" );
   Console.Error.WriteLine( "be listed (wildcards * and ? are allowed)" );
   Console.Error.WriteLine( );
   Console.Error.WriteLine( "Note:  The program's return code equals the number of errors encountered." );
   Console.Error.WriteLine( );
   Console.Error.WriteLine( "Written by Rob van der Woude" );
  }
  #endregion
 }
}

希望本文所述对大家的C#程序设计有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/125466.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号