1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
mports System
Imports System.Windows.Forms
Imports System.IO
Imports OWORD = Microsoft.Office.Interop.Word
Imports System.Drawing.Imaging
Imports Microsoft.Office.Interop.Word
Imports System.Runtime.InteropServices
Public Class Form3
Const CF_ENHMETAFILE As Integer = 14
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim choisirFichier As New OpenFileDialog
Dim cheminFichier As String = String.Empty
Dim fichier As String = String.Empty
With choisirFichier
.InitialDirectory = Directory.GetCurrentDirectory
.Filter = "Fichiers texte(*.txt)|*.txt|Tous (*.*)|*.*"
.FilterIndex = 2
.RestoreDirectory = True
.ShowDialog()
End With
cheminFichier = choisirFichier.FileName
fichier = choisirFichier.SafeFileName
If Len(cheminFichier) = 0 Then
Exit Sub
End If
Dim objWord As New OWORD.Application
Dim objDoc As OWORD.Document
objDoc = objWord.Documents.Open(cheminFichier)
objWord.ActiveDocument.Select()
objWord.Selection.CopyAsPicture()
Dim ip As IntPtr
Dim mf As Metafile
Dim bRet As Boolean
bRet = ClipboardAPI.OpenClipboard(Me.Handle)
If bRet = True Then
'Verifier si clipboard contient des donnees disponibles 'as an enhanced metafile.
bRet = ClipboardAPI.IsClipboardFormatAvailable(CF_ENHMETAFILE) <> 0
End If
If bRet = True Then
'memorise contenu clipboard dans IntPtr.
ip = ClipboardAPI.GetClipboardData(CF_ENHMETAFILE)
End If
'Verifier si IntPrt contient donnees.
'passer un IntPtr vide cree exception in Metafile
If Not IntPtr.Zero.Equals(ip) Then
mf = New Metafile(ip, True)
ClipboardAPI.CloseClipboard()
Dim img As Image = mf
Dim objImageWriter As Image = New Bitmap(img.Width, img.Height)
Dim objGraphics As Graphics = Graphics.FromImage(objImageWriter)
objGraphics.Clear(Color.White)
objGraphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
objGraphics.DrawImage(img, 0, 0, img.Width, img.Height)
img.Dispose()
objGraphics.Dispose()
Dim ep As EncoderParameters = New EncoderParameters
ep.Param(0) = New EncoderParameter(Encoder.Quality, 100)
Dim codecs() As ImageCodecInfo = ImageCodecInfo.GetImageEncoders()
Dim iciInfo As ImageCodecInfo
Dim item As ImageCodecInfo
For Each item In codecs
If (item.MimeType = "image/jpeg") Then iciInfo = item
Next
objImageWriter.Save(Directory.GetCurrentDirectory & "\Testing.jpeg", iciInfo, ep)
objImageWriter.Dispose()
Me.PictureBox1.BackgroundImage = Image.FromFile(Directory.GetCurrentDirectory & "\Testing.jpeg", False)
objDoc.Close()
objDoc = Nothing
objWord.Quit()
objWord = Nothing
End If
End Sub
Private Sub Form3_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
End Class
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 |
Partager