接下來先看使用的效果。
主畫面
選取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()註解掉看看。
刪除