2014-06-17 66 views
0

嗨下面是通過哪些步驟可以捕獲PNG格式的word文檔第一頁圖像。如果用戶需要以任何其他格式捕捉圖像。然後,只需在下面的代碼中將圖像擴展替換爲所需的輸出圖像擴展。如果這個答案很有用,那麼不要忘記投票。vb.net代碼捕獲word文檔第一頁的屏幕截圖

回答

1

第一步:一開始,你需要導入下面的命名空間/參考您的項目中:

Import Imports Microsoft.Office.Interop.Word 

第二步:添加空白的類文件在您的項目,並複製下面vb.net代碼爲word文檔:

Public Class ClipboardAPI 
<Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="OpenClipboard", SetLastError:=True, ExactSpelling:=True, CallingConvention:=System.Runtime.InteropServices.CallingConvention.StdCall)> _ 
Public Shared Function OpenClipboard(ByVal hWnd As IntPtr) As Boolean 
End Function 

<Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="EmptyClipboard", SetLastError:=True, ExactSpelling:=True, CallingConvention:=System.Runtime.InteropServices.CallingConvention.StdCall)> _ 
Public Shared Function EmptyClipboard() As Boolean 
End Function 

<Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="SetClipboardData", SetLastError:=True, ExactSpelling:=True, CallingConvention:=System.Runtime.InteropServices.CallingConvention.StdCall)> _ 
Public Shared Function SetClipboardData(ByVal uFormat As Integer, ByVal ByValhWnd As IntPtr) As IntPtr 
End Function 

<Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="CloseClipboard", SetLastError:=True, ExactSpelling:=True, CallingConvention:=System.Runtime.InteropServices.CallingConvention.StdCall)> _ 
Public Shared Function CloseClipboard() As Boolean 
End Function 

<Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="GetClipboardData", SetLastError:=True, ExactSpelling:=True, CallingConvention:=System.Runtime.InteropServices.CallingConvention.StdCall)> _ 
Public Shared Function GetClipboardData(ByVal uFormat As Integer) As IntPtr 
End Function 

<Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="IsClipboardFormatAvailable", SetLastError:=True, ExactSpelling:=True, CallingConvention:=System.Runtime.InteropServices.CallingConvention.StdCall)> _ 
Public Shared Function IsClipboardFormatAvailable(ByVal uFormat As Integer) As Short 
End Function 
End Class 

第三步:下面是從word文檔僅適用於F捕捉圖像的代碼第一頁。

Dim Width, Height, Orientation as Integer 
    Dim objWord As New Microsoft.Office.Interop.Word.Application 
    Dim objDoc As Microsoft.Office.Interop.Word.Document 

    Const CF_ENHMETAFILE As Integer = 14 
    objDoc = objWord.Documents.Open(YourSourcePath) 

    objWord.ActiveDocument.Select() 
    objWord.Selection.CopyAsPicture() 

    Try 
     Dim ip As IntPtr 
     Dim metaFile As System.Drawing.Imaging.Metafile 
     Dim bRet As Boolean 
     bRet = ClipboardAPI.OpenClipboard(Me.Handle) 
     If bRet = True Then 
      'Verify the clipboard contains data available 
      'as an enhanced metafile. 
      bRet = ClipboardAPI.IsClipboardFormatAvailable(CF_ENHMETAFILE) <> 0 
     End If 

     If bRet = True Then 
      'Store the clipboard's contents in the IntPtr. 
      ip = ClipboardAPI.GetClipboardData(CF_ENHMETAFILE) 
     End If 

     'Verify the IntPrt contains data before proceeding. Passing 
     'an empty IntPtr to System.Drawing.Imaging.Metafile results 
     'in an exception. 
     If Not IntPtr.Zero.Equals(ip) Then 
      metaFile = New System.Drawing.Imaging.Metafile(ip, True) 
      ClipboardAPI.CloseClipboard() 
      Dim image As System.Drawing.Image = metaFile 
      'Me.PictureBox1.Image = metaFile 

      Dim objImageWriter As Image = New Bitmap(image) 
      Dim objGraphics As Graphics = Graphics.FromImage(objImageWriter) 
      objGraphics.Clear(Color.White) 
      objGraphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias 

      If Orientation = 1 Then 
       Width = image.Width 
       Height = image.Height 
      Else 
       Width = image.Height 
       Height = image.Width 
      End If 

      objGraphics.DrawImage(image, 0, 0, Width, Height) 

      image.Dispose() 
      objGraphics.Dispose() 

      Dim ep As Imaging.EncoderParameters = New Imaging.EncoderParameters 
      ep.Param(0) = New System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100) 

      Dim codecs() As Imaging.ImageCodecInfo = Imaging.ImageCodecInfo.GetImageEncoders() 
      Dim iciInfo As Imaging.ImageCodecInfo 
      Dim item As Imaging.ImageCodecInfo 

      For Each item In codecs 
       If (item.MimeType = "image/png") Then iciInfo = item 
      Next 

      ImageFileName = Format(Now, "ddMMMyyyy_hhmmss_") & RandNumber.Next & ".png" 
      ImageFilePath = Application.StartupPath & "\" & ImageFileName 
      objImageWriter.Save(ImageFilePath, iciInfo, ep) 
      objImageWriter.Dispose() 

     End If 
    Catch ex As Exception 
     ExceptionGenerated = True 
     Throw New System.Exception(ex.Message.ToString()) 
    Finally 
     objDoc.Close() 
     objWord.Application.Quit(False) 
     objDoc = Nothing 
     objWord = Nothing 
     ReleaseComObject(objWord) 
     ReleaseComObject(objDoc) 
    End Try 

第四步:添加ReleaseComObject的功能在您的項目:

objDoc.PageSetup.Orientation = Microsoft.Office.Interop.Word.WdOrientation.wdOrientPortrait/wdOrientLandscape 

Public Sub ReleaseComObject(ByVal obj As Object) 
     Try 
      System.Runtime.InteropServices.Marshal.ReleaseComObject(obj) 
      obj = Nothing 
     Catch ex As Exception 
      obj = Nothing 
     End Try 
    End Sub 

您可以使用下面vb.net代碼,甚至檢查Word頁面方向