Al final he decidido que lo más fácil es usa un programa externo: print conductor, que trae una dll para incorporar al proyecto:
Código:
Dim objPC As New PrintConductor.PCApp
'0-Hide; 1-Show Normal; 2-Maximize; 3-Minimize
objPC.ShowMainWindow(0)
objPC.DisplayAlerts(False)
objPC.SelectPrinter(NombreImpresoraFacturas)
For Each row As DataGridViewRow In Me.DgPrepagos.Rows
Dim RutaFichero As String = CarpetaPrepagos & "\" & row.Cells("CodigoProveedorDataGridViewTextBoxColumn").Value & "\" & row.Cells("NombreFichero").Value
If System.IO.File.Exists(RutaFichero) Then
objPC.PrintDocument(RutaFichero)
End If
Next
objPC.Quit()