最近弄了一個項目,需要讀取本機的pdf文件並轉換成圖片放置到另外一個文件夾下,現在把代碼分享下:
一、看看如何讀取本機的pdf文件到窗體中
首先,我們下載一個pdf閱讀AdbeRdr器到電腦上,最好是安裝完整版的,要不然vs獲得到組件
其次,我們就可以在工具箱中獲取Adobe提供的Active控件了
然后我們就可以拖動一個控件放到窗體中了,然后會生成兩個文件
然后我們就可以通過代碼來讀取pdf文件,下面這個例子選擇pdf文件夾,然后讀取多個pdf文件通過按鈕完成切換pdf文件和翻頁
private void btnBrowse_Click( object sender, EventArgs e)
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
pdfLoad();
}
}
#endregion
#region 讀取pdf文件
private void pdfLoad()
{
txtFile.Text = folderBrowserDialog1.SelectedPath;
DirectoryInfo directoryInfo = new DirectoryInfo(txtFile.Text);
string strFile = txtFile.Text.Trim();
files = directoryInfo.GetFiles();
// 獲得文件夾里的所有pdf文件
alist = new ArrayList();
for ( int n = 0; n < files.Count(); n++)
{
string filename = files[n].ToString();
string piff = filename.Substring(filename.LastIndexOf( " . "));
if (piff == " .pdf ")
{
alist.Add(filename);
}
}
lblMessage.Visible = true;
lblMessage.Text = " 提示:此目錄共有pdf文件 " + alist.Count + " 個 ";
if (alist.Count > 0)
{
panel1.Visible = true;
i = 0;
axAcroPDF1.LoadFile(txtFile.Text + " \\ " + alist[i].ToString());
}
else
{
panel1.Visible = false;
}
}
#endregion
也可以使用代碼創建Adobe PDF Reader組件

AxAcroPDFLib.AxAcroPDF axAcroPDF = new AxAcroPDFLib.AxAcroPDF();
axAcroPDF.Location = new System.Drawing.Point( 0, 24);
axAcroPDF.Size = new System.Drawing.Size( 292, 242);
axAcroPDF.Dock = DockStyle.Fill;
Controls.Add(axAcroPDF);
axAcroPDF.LoadFile(fileName);
在編譯的時候,VS會Adobe PDF Reader ActiveX組件轉換為2個.net組件:AxInterop.AcroPDFLib.dll和Interop.AcroPDFLib.dll
所以在寫代碼創建Adobe PDF Reader 組件的時候,需要手動把Adobe PDF Reader ActiveX組件轉換為.net組件並引用!最好的辦法是,托一個Adobe PDF Reader 組件到窗體上,然后刪除,這樣就不需要手動了!
其他的切換和翻頁都很好實現,這里就不在多說了
二、下面看看如何將pdf文件轉換成圖片格式
在項目中添加lib文件,用來添加gsdll32.dll 、PDFLibNet.dll 、PDFView.dll三個文件
下載:/Files/shuang121/pdf三個文件.rar
項目添加PDFLibNet.dll和PDFView.dll兩個引用,並將gsddll32.dll拷貝到bin目錄下面即可
下面就可以直接選擇一個pdf文件進行轉換了

/// 將PDF 相應的頁轉換為圖片
/// </summary>
/// <param name="strPDFpath"> PDF 路徑 </param>
/// <param name="Page"> 需要轉換的頁頁碼 </param>
private void GetImage( string strPDFpath, int Page)
{
FileInfo file= new FileInfo (strPDFpath);
string strSavePath=file.Directory.FullName;
byte[] ImgData = GetImgData(strPDFpath, Page);
MemoryStream ms = new MemoryStream(ImgData, 0, ImgData.Length);
Bitmap returnImage = (Bitmap)Bitmap.FromStream(ms);
string strImgPath=Path.Combine(strSavePath, string.Format( " PDFConvert{0}.jpg ",Page));
returnImage.Save(strImgPath);
}
/// <summary>
/// 從PDF中獲取首頁的圖片
/// </summary>
/// <param name="PDFPath"> PDF 文件路徑 </param>
/// <param name="Page"> 需要獲取的第幾頁 </param>
/// <returns></returns>
private byte[] GetImgData( string PDFPath, int Page)
{
System.Drawing.Image img = PDFView.ConvertPDF.PDFConvert.GetPageFromPDF(PDFPath,Page, 300, "", true);
return GetDataByImg(img); // 讀取img的數據並返回
}
/// <summary>
/// 將單頁的PDF轉換為圖片
/// </summary>
/// <param name="_image"></param>
/// <returns></returns>
private byte[] GetDataByImg(System.Drawing.Image _image)
{
System.IO.MemoryStream Ms = new MemoryStream();
_image.Save(Ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] imgdata = new byte[Ms.Length];
Ms.Position = 0;
Ms.Read(imgdata, 0, Convert.ToInt32(Ms.Length));
Ms.Close();
return imgdata;
}
string Pdfpath = "";
/// <summary>
/// 選擇需要轉換的PDF
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click( object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
Pdfpath = openFileDialog1.FileName;
}
else
{
Pdfpath = "";
}
textBox1.Text = Pdfpath;
}
/// <summary>
/// 轉換
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click( object sender, EventArgs e)
{
if (! string.IsNullOrEmpty(Pdfpath))
{
GetImage(Pdfpath, 2);
}
}
}
}
以上就是整個讀取和轉換的過程