Bonjour Jimmy85600,
Ayant eu à traiter un programme similaire, je crois pouvoir vous aider. Il s'agissait de récupérer fidèlement une partie rectangulaire d'une page d'un document Word 2010. J'ai procédé en trois étapes successives,
- conversion de la page Word en une page PDF,
- conversion de la page PDF en image JPG,
- conversion de cette image en une autre image JPG ramenant la première aux cotes inititiales.
Ce sont donc, me semble-t-il, les deux dernières conversions qui sont susceptibles de vous intéresser.
J'ai converti la page PDF en image JPG par le logiciel gratuit PDFCreator. Cette image est très agrandie, mais de façon rigoureusement homothétique, comme on peut s'en rendre compte par une simple règle de trois, et cela m'a permis de la ramener aux cotes initiales par le petit programme suivant. Je vous le livre tel quel, en vous laissant le soin de l'adapter à vos besoins. Je vous précise néammoins que
- les données x, y, dx, dy sont les cotes décrivant le rectangle prélevé,
- ChmE est le chemin d'accès de la première image,
- ChmS est le chemin d'accès de l'image ramenée aux cotes initiales.
Public Class Accueil
'Données
Dim x As Double = 14, y As Double = 14, dx As Double = 102, dy As Double = 132
Dim ChmE As String = "C:\Mon espace\Mes études\Longueur d'un arc d'ellipse\VueE.jpg"
Dim ChmS As String = "C:\Mon espace\Mes études\Longueur d'un arc d'ellipse\VueS.jpg"
'Nombre de pixels par millimètre
Dim dpm As Double = Me.CreateGraphics.DpiX / 25.4
Private Sub Accueil_Load(sender As Object, e As System.EventArgs) Handles Me.Load
MesurerPlanBrut()
AjusterPlan()
AfficherVueAjustée()
Tps.Start()
End Sub
Private Sub MesurerPlanBrut()
With pBox
.SizeMode = PictureBoxSizeMode.AutoSize
.Image = Image.FromFile(ChmE)
End With
End Sub
Private Sub AjusterPlan()
Dim u As Integer, v As Integer
With pBox
u = .Width
v = .Height
.SizeMode = PictureBoxSizeMode.StretchImage
Dim k As Double = dpm * 210 / u
.Width = CInt(k * u)
.Height = CInt(k * v)
.Left = .Left - CInt(dpm * x)
.Top = .Top - CInt(dpm * y)
End With
End Sub
Private Sub AfficherVueAjustée()
Dim Sze As Size
With Sze
.Width = CInt(dpm * dx)
.Height = CInt(dpm * dy)
End With
Me.ClientSize = Sze
End Sub
Private Sub RécupérerVueAjustée()
Dim x As Integer, y As Integer, p As Point, q As Point, g As Graphics
Dim Bmp As New Bitmap(Me.ClientSize.Width, Me.ClientSize.Height) : g = Graphics.FromImage(Bmp)
p.X = 0 : p.Y = 0 : q = Me.PointToScreen(p) : x = q.X : y = q.Y
g.CopyFromScreen(x, y, 0, 0, Me.ClientSize)
Bmp.Save(ChmS)
End Sub
Private Sub Tps_Tick(sender As Object, e As System.EventArgs) Handles Tps.Tick
RécupérerVueAjustée()
Tps.Stop()
End Sub
End Class
Cordialement.
25 avril 2014 à 17:31
En fait je ne veux pas reellement dessiner sur un pdf, mais plutot extraire une page d'un pdf selectionnée et l'afficher dans un picturebox pour dessiner dessus.
merci d'avance