接下來先看使用的效果。
主畫面
選取PDF檔
選取完成後會出現檔名
按下上傳及顯示,我這裡是寫在一起的,也可以寫分開
出現縮圖後,點選縮圖,出現放大圖,可以按右上方NEXT鍵直接下一張
檔案的狀況
資料夾內的狀況
接下來看程式碼:
前端HTML:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script src="js/1.2.6/full/jquery.tools.min.js"></script>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js_lightbox/jquery.lightbox-0.5.js"></script> <!--JQuery外掛-->
<link rel="stylesheet" type="text/css" href="js_lightbox/jquery.lightbox-0.5.css" media="screen" /> <!--JQuery外掛的css檔-->
<script type="text/javascript">
$(function () {
$('#gallery a').lightBox();//JQuery Lightbox外掛
});
</script>
<style type="text/css">
.style1
{
width: 100%;
}
.style2
{
width: 10%;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<table class="style1">
<tr>
<td class="style2" style="text-align: right;">
PDF file:</td>
<td>
<asp:FileUpload ID="FileUpload1" runat="server" />
</td>
</tr>
<tr>
<td class="style2" style="text-align: right">
PDF 縮圖:</td>
<td>
<asp:Panel ID="gallery" runat="server" Height="500px" ScrollBars="Auto">
<br />
</asp:Panel>
</td>
</tr>
<tr>
<td class="style2">
</td>
<td>
<asp:Button ID="Button1" runat="server" Text="上傳 + 顯示" Width="100px" />
<asp:Label ID="Label1" runat="server"></asp:Label>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
後端Default.aspx.vb程式碼:Imports PDFConvert
Imports System.IO
Partial Class _Default
Inherits System.Web.UI.Page
Dim converter As New PDFConvert.PDFConvert
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
Dim version As GhostScriptRevision = converter.GetRevision()
'-- 註解:先設定好檔案上傳的路徑,這是Web Server電腦上的目錄。
Dim saveDir As String = FileUpload1.FileName + "\" '資料夾用檔案名稱區分
Dim appPath As String = Request.PhysicalApplicationPath 'SERVER實體 Path
Dim my_air As String = appPath + saveDir
'*******************************************
'--如果這目錄不存在,就建立它。
If Not Directory.Exists(my_air) Then
Directory.CreateDirectory(my_air)
End If
If (FileUpload1.HasFile) Then
Dim fileName As String = FileUpload1.FileName
saveDir = my_air & fileName
FileUpload1.SaveAs(saveDir)
Label1.Text = "上傳成功,檔名---- " & fileName
Else
Label1.Text = "請先挑選檔案之後,再來上傳"
End If
'預先PDF轉JPG圖片,和PDF放在同一個資料夾
ConvertSingleImage(saveDir)
'把PDF的縮圖放到動態的image上
'圖片的路徑
Dim root As String = Server.MapPath("~/" + FileUpload1.FileName)
'抓取該資料夾內所有檔案,因為會有pdf及jpg檔所以限制只取jpg檔
Dim files As String() = Directory.GetFiles(root, "*.jpg")
Me.gallery.Controls.Clear()
' 使用 Panel 和 Image 控件
For index As Integer = 0 To files.Length - 1
'動態加圖片到panel中
Dim tempImg As New Image()
Dim tempA As New HyperLink()
tempImg.ID = "img_" & System.IO.Path.GetFileNameWithoutExtension(files(index))
'得到圖片的路徑
Dim imgPath As String = "~/" & FileUpload1.FileName & "/" & Path.GetFileName(files(index))
'獲取圖片的位置
tempImg.ImageUrl = imgPath
tempImg.Attributes.Add("rel", "#photo" & CStr(index))
'對圖片進行設置
Dim image As System.Drawing.Image = DirectCast(New System.Drawing.Bitmap(Server.MapPath(imgPath)), System.Drawing.Image)
'獲取圖片的寬度 和 高度
Dim width As Integer = image.Size.Width
Dim height As Integer = image.Size.Height
'图片的新寬度 和 高度
Dim newWidth As Integer = 200
Dim newHight As Integer = 0
If width > 200 Then
'圖片的高度等比例縮放
newHight = CInt(Math.Truncate(CDec(height) * 200 / width))
End If
If newHight <> 0 Then
tempImg.Height = newHight
tempImg.Width = newWidth
Else
tempImg.Height = height
tempImg.Width = width
End If
'JQuery放大圖片需要,把Image放到<a>連接內
tempA.Controls.Add(tempImg)
'再把<a>連接掛上圖片路徑
tempA.NavigateUrl = imgPath
'再把<a>放到panel內
Me.gallery.Controls.Add(tempA)
'動態圖片到panel中
'釋放image使用資源
image.Dispose()
'設置圖片顯示的行數
Dim lt As New Literal()
lt.Text = " "
Me.gallery.Controls.Add(lt)
'每行顯示5個圖片
If (index + 1) Mod 5 = 0 Then
Dim ltBR As New Literal()
ltBR.Text = "<br/>"
Me.gallery.Controls.Add(ltBR)
End If
Next
End Sub
Private Sub ConvertSingleImage(filename As String)
Dim Converted As Boolean = False
converter.OutputToMultipleFile = True
converter.FirstPageToConvert = -1
converter.LastPageToConvert = -1
converter.FitPage = False
converter.JPEGQuality = 100
converter.OutputFormat = "jpeg"
Dim input As FileInfo = New FileInfo(filename)
Dim output As String = String.Format("{0}\\{1}{2}", input.Directory, input.Name, ".jpg")
While File.Exists(output)
output = output.Replace(".jpg", String.Format("{1}{0}", ".jpg", DateTime.Now.Ticks))
End While
Converted = converter.Convert(input.FullName, output)
If Converted Then
Else
End If
End Sub
End Class
注意:有兩個dll檔要掛進來(加入參考)dll檔下載:http://dl.dropbox.com/u/34994974/PDFtoImage.rar
後記:
幾點需要注意一下,此轉換版本是32位元的版本,因為圖片有版本之分
像我開發是在XP上面開發的,但放到window server 2008平台上面就會出現版本錯誤
,解法有兩個,第一是改寫成64位元版(要重寫,會要我的命的XD)、第二個方法是
在IIS上改套用的應用程式集為整合式的(如下圖),以上就是為您介紹的PDF轉縮圖,
不了解的歡迎來信,謝謝。
更新:
最近在轉檔時如果PDF檔案過大會出錯之問題,解法為:在webConfig的
裡面加入









想請問一下大大~
回覆刪除因為我也剛好在研究pdf轉圖片的功能
但是測試時候都會出現
在 DLL 'gsdll32.dll' 中找不到名稱為 'gsapi_revision' 的進入點。
這個錯誤,不知該如何解決,能請大大幫忙一下ㄇ~
謝謝
把Button1_Click內的Dim version As GhostScriptRevision = converter.GetRevision()註解掉看看。
刪除