IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

convertir un fichier word en une image


Sujet :

VB.NET

  1. #1
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Points : 227
    Points
    227
    Par défaut convertir un fichier word en une image
    bonjours,

    après de longue recherche, je n'ai pas trouver la manière de s'y prendre afin de transformer un fichier word en fichier image.

    Quelqu'un connaitrait-il un site ou pourrait-il expliquer la manière de s'y prendre pour réaliser ceci ?
    Est-ce possible?
    pourriez vous au moins me mettre sur la piste ?

    Dans l'attente de vous lire.

  2. #2
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Slt
    Tu dois forcement le faire toi même en vb.net ou quoi?
    sinon il y' a une application de capture presque gratuite faite par farstone qui est vraiment géniale! FScapture est son nom.

  3. #3
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Points : 227
    Points
    227
    Par défaut
    Alors je souhaiterai que se soit mon programme en VB.net qui transforme mon fichier.doc en fichier.jpg.

    j'ai essayer de creuser un peu et est mis ce code au point mais cela ne fonctionne pas pour copier comme image :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     Dim choisirFichier As New OpenFileDialog
            Dim cheminFichier As String = String.Empty
            Dim fichier As String = String.Empty
     
            With choisirFichier
                .InitialDirectory = "c:\"
                .Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
                .FilterIndex = 2
                .RestoreDirectory = True
                .ShowDialog()
            End With
     
            cheminFichier = choisirFichier.FileName
            fichier = choisirFichier.SafeFileName
            choisirFichier.Dispose()
     
            Dim objWord As New Microsoft.Office.Interop.Word.Application
            Dim objDoc As Microsoft.Office.Interop.Word.Document
     
            objDoc = objWord.Documents.Open(cheminFichier)
            objWord.Activedocument.Select()
            objWord.Selection.CopyAsPicture()
            objWord.Documents.Close()

  4. #4
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Points : 227
    Points
    227
    Par défaut
    alors ce que je fait c est rechercher le document que je veux je met en taille maximum puis je prend un printscreen seulement le printscreen prend evidemment tous l'écran ce que je voudrai ce serait de ne prendre que la feuille word voici le code que j ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     Dim choisirFichier As New OpenFileDialog
            Dim cheminFichier As String = String.Empty
            Dim fichier As String = String.Empty
     
            With choisirFichier
                .InitialDirectory = "c:\"
                .Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
                .FilterIndex = 2
                .RestoreDirectory = True
                .ShowDialog()
            End With
     
            cheminFichier = choisirFichier.FileName
            fichier = choisirFichier.SafeFileName
            choisirFichier.Dispose()
     
            Dim objWord As New Microsoft.Office.Interop.Word.Application
            Dim objDoc As Microsoft.Office.Interop.Word.Document
     
     
            objDoc = objWord.Documents.Open(cheminFichier)
            objWord.ActiveDocument.Select()
            objWord.Selection.CopyAsPicture()
            objWord.WindowState = Microsoft.Office.Interop.Word.WdWindowState.wdWindowStateMaximize
            'objWord.Resize(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
     
            Dim b As Bitmap = New Bitmap(objDoc.PageSetup.PageWidth, objDoc.PageSetup.PageHeight, Imaging.PixelFormat.Format32bppArgb)
            ' Create a Graphics object that will process the screen shot
            Dim gfx As Graphics = Graphics.FromImage(b)
            ' Copy the screen contents
            gfx.CopyFromScreen(My.Computer.Screen.Bounds.X, My.Computer.Screen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy)
            ' Save the resulting graphics
            b.Save("C:\Users\Desktop\Back-up gestion site\my2.jpg", Imaging.ImageFormat.Jpeg)
     
            objWord.Documents.Close()
            objWord.Quit()
    quand je fait le printscreen j ai bien sa a la taille d'une page de word mais je n'ai pas la page elle meme c est un printscreen d'une partie de mon bureau qui est effectuée
    Vraiment personne ne sait pas comment faire ? ou ce que je veux faire n'est pas possible et touche la limite de l'informatique ?

  5. #5
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut copier une page word comme image
    bonjour dharkan
    La limite de l'informatique Non.
    Il n' y a pas de limite sauf quand soit on fait une chose illogique,soit on est avare de moyens.

    MS Word cree une image vectorielle MetaFile au lieu d'une image Raster(bmp,jpeg,etc..)
    De plus helas le CopyAsPicture de MS Word utilise apparamment un format d'image MetaFile incompatible avec le format MetaFile de l'ApiClipBoard .Net.
    Ce qui se traduit par un echec complet lorsqu'on on fait ClipBoard.GetData et meme si l'on cast sur un objet MetaFile
    Aussi faut il passer par l'api native Win32 pour recuperer un metafile valide et le dessiner comme une image (au choix du format souhaite bmp,tiff,jpeg) sur un objet graphique et sauvegarder l'image obtenu.
    De plus on ne peut sauvergarder qu'une page à la fois.
    ici le code qui fera peut etre ton bonheur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    bonne soiree.....

  6. #6
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Points : 227
    Points
    227
    Par défaut
    Bonjours Mabrouki,

    Tout d'abord je tiens à te remercier de ta réponse,
    toutefois je suis passer par un autre moyen, je m'explique :

    Ce que je fait c'est ouvrir le document word (qui ne contient qu'une page)
    je met la page de facon a ce qu'elle soit afficher entièrement à l'écran pour ensuite en faire un printscreen. Ensuite je defini un rectangle qui viendra couper la partie de l'image pour n'en retirer que la feuille (sans rien autour).

    Je met le code, et reste ouvert à vos critique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    Public Sub convertirEnImage(ByVal idPage As String, ByVal sequence As Integer, ByVal typeTexte As String)
     
            Dim choisirFichier As New OpenFileDialog
            Dim cheminFichier As String = String.Empty
            Dim fichier As String = String.Empty
            Dim tmp As String()
     
            With choisirFichier
                .InitialDirectory = "c:\"
                .Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
                .FilterIndex = 2
                .RestoreDirectory = True
                .ShowDialog()
            End With
     
            cheminFichier = choisirFichier.FileName
            fichier = choisirFichier.SafeFileName
            tmp = choisirFichier.SafeFileName.Split("."c)
            choisirFichier.Dispose()
     
            If tmp(0) <> "" Then
     
                Dim objWord As New Microsoft.Office.Interop.Word.Application
                Dim objDoc As Microsoft.Office.Interop.Word.Document
                'Dim print As Printer
     
                objWord = CreateObject("Word.Application")
                'le document word est visible
                objWord.Visible = True
                objDoc = objWord.Documents.Open(cheminFichier)
                'affiche tout le document sur une page
                objDoc.ActiveWindow.ActivePane.View.Zoom.PageFit = Microsoft.Office.Interop.Word.WdPageFit.wdPageFitFullPage
                'objDoc.PageSetup.PageWidth + 356
     
                Dim b As Bitmap = New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, Imaging.PixelFormat.Format32bppArgb)
     
                ' Rectangle -> x,y points et largeur et hauteur
                Dim rectangle As New Rectangle(477, 155, 474, 667)
     
                ' créer un objet graphique qui prendra le screenshot
                Dim gfx As Graphics = Graphics.FromImage(b)
     
     
                'copie du contenu de l'ecran 
                'Screen.PrimaryScreen.Bounds.Size
     
                gfx.CopyFromScreen(My.Computer.Screen.Bounds.X, My.Computer.Screen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy)
                ' sauvegarde le resultat a l'endroit demandé sous ke format demandé
                tmp(0) = tmp(0) & ".jpg"
                b = b.Clone(rectangle, b.PixelFormat)
                b.Save("C:\Users\laubry.anthony\Desktop\Back-up gestion site\" & tmp(0), Imaging.ImageFormat.Jpeg)
     
                objWord.Documents.Close()
                objWord.Quit()
     
                cheminFichier = "C:\Users\laubry.anthony\Desktop\Back-up gestion site\" & tmp(0)
     
                methode_base_de_donee.ajouterFichier(cheminFichier, "img/" & tmp(0))
                methode_base_de_donee.AjouterEnregistrement(idPage, sequence, typeTexte, , tmp(0), , , )
     
                MessageBox.Show("Ajout correctement effectué", "Succés", MessageBoxButtons.OK, MessageBoxIcon.Information)
     
                'parcourt de tout les processus ouvert sur la machine
                For Each Processus As Process In Process.GetProcesses()
                    'si le processus WINWORD est actif
                    If Processus.ProcessName.EndsWith("WINWORD") Then
                        With Processus
                            'on kill le process
                            .Kill()
                            'libère les ressources
                            .Close()
                        End With
                    End If
                Next
            Else
                MessageBox.Show("Annulé")
            End If
     
     
        End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. convertir un fichier word en une image
    Par dharkan dans le forum Langage
    Réponses: 1
    Dernier message: 29/03/2011, 01h32
  2. Convertir un fichier word en une BDD excel
    Par Kiefer_Sutherland dans le forum Excel
    Réponses: 11
    Dernier message: 01/09/2007, 13h40
  3. [Struts][Oracle]Upload fichier word dans une base
    Par Maximil ian dans le forum Struts 1
    Réponses: 7
    Dernier message: 10/02/2004, 15h52
  4. [] Convertir un fichier word en pdf
    Par SpaceFrog dans le forum VBA Word
    Réponses: 7
    Dernier message: 06/12/2002, 15h27
  5. [VBA-W] [Word] Insérer une image MSChart
    Par fredo1664 dans le forum VBA Word
    Réponses: 2
    Dernier message: 20/11/2002, 09h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo