Question imprimer des images

Plus d'informations
il y a 4 ans 5 mois #29441 par Gabriel
Réponse de Gabriel sur le sujet Re:imprimer des images
Laurent Dardenne écrit:

Il faut maintenant faire l'inverse, à partir du fichier contenant l'erreur sérialisée l'importer avec $E=Import-Clixml filename
Resolve-Error affiche à peu près les même infos mais en texte ce qui facilite la relecture.
Il faut retrouver le message de chaque exception, une exception pouvant en imbriquer une autre (cf. InnerException) ce qui donne l'enchainement/pile d'appel.

j'ai fait ça, il en ressort le texte suivant
[code:1]
$E=Import-Clixml Error1.xml
Resolve-Error($E)
Le paramètre n'est pas valide.
Exception lors de l'appel de « .ctor » avec « 1 » argument(s) : « Le paramètre n'est pas valide. »
Exception lors de l'appel de « .ctor » avec « 1 » argument(s) : « Le paramètre n'est pas valide. »
Exception lors de l'appel de «Print» avec «0» argument(s): «Exception lors de l'appel de «.ctor» avec «1»
argument(s): «Le paramètre n'est pas valide.»»


MyCommand :
BoundParameters : {}
UnboundArguments : {}
ScriptLineNumber : 55
OffsetInLine : 5
HistoryId : -1
ScriptName : D:\gabriel\Mes_Documents\Powershell\Scan\Scan_Photocop\Photocop1.ps1
Line : $doc.Print()

PositionMessage : Au caractère D:\gabriel\Mes_Documents\Powershell\Scan\Scan_Photocop\Photocop1.ps1:55
: 5
+ $doc.Print()
+ ~~~~~~~~~~~~
PSScriptRoot : D:\gabriel\Mes_Documents\Powershell\Scan\Scan_Photocop
PSCommandPath : D:\gabriel\Mes_Documents\Powershell\Scan\Scan_Photocop\Photocop1.ps1
InvocationName :
PipelineLength : 0
PipelinePosition : 0
ExpectingInput : False
CommandOrigin : Internal
DisplayScriptPosition :

Exception lors de l'appel de «Print» avec «0» argument(s): «Exception lors de l'appel de «.ctor» avec «1»
argument(s): «Le paramètre n'est pas valide.»»
Au caractère D:\gabriel\Mes_Documents\Powershell\Scan\Scan_Photocop\Photocop1.ps1:55 : 5
+ $doc.Print()
+ ~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : CmdletInvocationException
[/code:1]
Je n'ai pas l'impression que ça apporte grand'chose.

Le code que tu déclares dans ton EventHandler est appelé dans un scope (une portée différente) essaie avec $script:ImagePath où 'script:' est le nom de portée.
Ainsi tu précises d'utiliser la variable dans la portée de l'appelant et pas dans la portée courante.
Définie également pour la cohérence/relecture $script:ImagePath dans le script principal.

OK, je crois avoir compris. J'ai mis script:$Imagepath chaque fois que j'ai pu sans provoquer d'ereur de syntaxe et repassé la moulinette export-Clixml+ resolve-error
Cette fois-ci il me semble que les chemins de fichiers sont accusés ( «Le format du chemin d'accès donné n'est pas pris en charge.»)
[code:1]
$E=Import-Clixml Error2.xml
Resolve-Error($E)
Le format du chemin d'accès donné n'est pas pris en charge.
Exception lors de l'appel de «.ctor» avec «1» argument(s): «Le format du chemin d'accès donné n'est pas pris
en charge.»
Exception lors de l'appel de «.ctor» avec «1» argument(s): «Le format du chemin d'accès donné n'est pas pris
en charge.»
Exception lors de l'appel de «Print» avec «0» argument(s): «Exception lors de l'appel de «.ctor» avec «1»
argument(s): «Le format du chemin d'accès donné n'est pas pris en charge.»»


MyCommand :
BoundParameters : {}
UnboundArguments : {}
ScriptLineNumber : 55
OffsetInLine : 5
HistoryId : -1
ScriptName : D:\gabriel\Mes_Documents\Powershell\Scan\Scan_Photocop\Photocop1.ps1
Line : $doc.Print()

PositionMessage : Au caractère D:\gabriel\Mes_Documents\Powershell\Scan\Scan_Photocop\Photocop1.ps1:55
: 5
+ $doc.Print()
+ ~~~~~~~~~~~~
PSScriptRoot : D:\gabriel\Mes_Documents\Powershell\Scan\Scan_Photocop
PSCommandPath : D:\gabriel\Mes_Documents\Powershell\Scan\Scan_Photocop\Photocop1.ps1
InvocationName :
PipelineLength : 0
PipelinePosition : 0
ExpectingInput : False
CommandOrigin : Internal
DisplayScriptPosition :

Exception lors de l'appel de «Print» avec «0» argument(s): «Exception lors de l'appel de «.ctor» avec «1»
argument(s): «Le format du chemin d'accès donné n'est pas pris en charge.»»
Au caractère D:\gabriel\Mes_Documents\Powershell\Scan\Scan_Photocop\Photocop1.ps1:55 : 5
+ $doc.Print()
+ ~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : CmdletInvocationException
[/code:1]
Je vais regarder cette histoire de chemin.

Peut être voir ceci .

Effectivement, c'est exactment le cas. J'ai une \"current location : D:/gabriel/...\" et un \"current directory : c:Windows/System32/...\". Comme attrape-couillon, c'est de première.

Merci pour les conseils

:) gabier

P.S. j'ai repassé le tout avec en-tête e harmonisation du Home Directory avec la Current Location
[code:1]$p = get-location -PSProvider filesystem | select -exp path
[environment]::CurrentDirectory = $p
[/code:1]
Mais l'erreur et toujours là, et dit encore que «Le format du chemin d'accès donné n'est pas pris en charge.» ???<br><br>Message édité par: gabier, à: 15/11/19 15:57

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 4 ans 5 mois #29442 par Gabriel
Réponse de Gabriel sur le sujet Re:imprimer des images
Bonjour à tous,
J'ai enfin pu imprimer mon image test sortie de scan (format jpg). ce post est mon retour d'expérience.
Le noeud du problème était la lecture de l'image jpg par la méthode Drawing.Bitmap($Image) qui était invoquée directement par le script.
[code:1]$img = new-object Drawing.Bitmap($imageName)[/code:1]
Les épisodes précédents semblaient accuser le chemin de fichiers. Exemple de messages d'erreur.
[code:1]Exception lors de l'appel de «Print» avec «0» argument(s): «Exception lors de l'appel de «.ctor» avec «1» argument(s): «Le format du chemin d'accès donné n'est pas pris en charge.»»[/code:1]
J'ai fait toutes sortes d'essais pour avoir un chemin d'accès qui marche, sans résultats:
- harmonisation des répertoires
- modifications de la syntaxe d'appel
- copie de l'image dans différents répertoires
J'ai fini par soupçonner que les messages d'erreur étaient trompeurs, la méthode disait qu'elle ne pouvait accéder au fichier en accusant le chemin mais peut-être était-ce tout simplement qu'elle ne pouvait pas lire le fichier qu'elle trouvait. J'ai donc étudié d'autres scripts pour perfectionner le processus de lecture. j'ai fait des essais et j'ai trouvé que la séquence suivante fonctionnait correctement sur mon image jpg
[code:1]$ImgPath=\&quot;Scan\Scan_Photocop\Images\\&quot;
$ImgByteArray = [System.IO.File]::ReadAllBytes($ImgPath + \&quot;img011.jpg\&quot;«»)
$ImageConverter=New-Object System.Drawing.ImageConverter
[Drawing.bitmap]$Image1=$ImageConverter.Convertfrom($ImgByteArray)
$Image1.save(\&quot;img2test\&quot;«»)[/code:1]
J'ai donc modifié le script du début de ce post en y insérant cette méthode de lecture, et là \&quot;Bingo!!\&quot; la page s'est imprimée.
Je vous joins donc le script modifié
[code:1]function print-image{
param([string]$imgPath=\&quot;\&quot;,[string]$printer = \&quot;\&quot;,[bool]$fitImageToPaper = $true)

trap{;break}
# Bitmap image to use to print image
$bitmap = $null
$doc = new-object System.Drawing.Printing.PrintDocument
# if printer name not given, use default printer
if ($printer -ne \&quot;\&quot;«»)
{
$doc.PrinterSettings.PrinterName = $printer
}
# Adjust image size to fit into paper and print image
$doc.add_PrintPage(
{
Write-Host \&quot;Printing Image...\&quot;
$g = $_.Graphics
$pageBounds = $_.MarginBounds
##$img = new-object Drawing.Bitmap -argumentlist script:$imgPath
####Essai
$ImgPath=\&quot;Scan\Scan_Photocop\Images\\&quot;
$ImgByteArray = [System.IO.File]::ReadAllBytes($ImgPath + \&quot;img011.jpg\&quot;«»)
$ImageConverter=New-Object System.Drawing.ImageConverter
[Drawing.bitmap]$Image1=$ImageConverter.Convertfrom($ImgByteArray)
#####
$adjustedImageSize = $Image1.Size
$ratio = [double] 1;
# Adjust image size to fit on the paper
if ($fitImageToPaper)
{
$fitWidth = [bool] ($Image1.Size.Width &gt; $Image1.Size.Height)
if (($Image1.Size.Width -le $_.MarginBounds.Width) -and ($Image1.Size.Height -le $_.MarginBounds.Height))
{
$adjustedImageSize = new-object System.Drawing.SizeF($Image1.Size.Width, $Image1.Size.Height)
}
else
{
if ($fitWidth)
{
$ratio = [double] ($_.MarginBounds.Width / $Image1.Size.Width);
}
else
{
$ratio = [double] ($_.MarginBounds.Height / $Image1.Size.Height)
}

$adjustedImageSize = new-object System.Drawing.SizeF($_.MarginBounds.Width, [float]($Image1.Size.Height * $ratio))
}
}
# calculate destination and source sizes
$recDest = new-object Drawing.RectangleF($pageBounds.Location, $adjustedImageSize)
$recSrc = new-object Drawing.RectangleF(0, 0, $Image1.Width, $Image1.Height)

# Print to the paper
$_.Graphics.DrawImage($Image1, $recDest, $recSrc, [Drawing.GraphicsUnit]\&quot;Pixel\&quot;«»)

$_.HasMorePages = $false; # nothing else to print
}
)
$doc.Print()
}
############ Programme principal
##### mettre le Home Dir égal au répertoire courant
##################
$p = get-location -PSProvider filesystem | select -exp path
[environment]::CurrentDirectory = $p
$Path=\&quot;Scan\Scan_Photocop\Images\&quot;
$Doss = Get-ChildItem -Path $Path -File
$NumFich=$Doss.count
Write-host \&quot;Nb fich=\&quot; $NumFich
If ($NumFich -gt 1) {write-host \&quot;plusieurs fichiers\&quot;}
$printer=\&quot;Brother\&quot;
If ($NumFich -eq 1){
Foreach ($Fich in $Doss){
$Imgpath=$Path + \&quot;\\&quot; + $Fich.name
}
print-image ($imgPath,$printer,$true)
}[/code:1]

:) gabier

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 4 ans 5 mois #29443 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:imprimer des images
gabier écrit:

J'ai donc modifié le script du début de ce post en y insérant cette méthode de lecture, et là \&quot;Bingo!!\&quot; la page s'est imprimée.

Bravo !

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.134 secondes
Propulsé par Kunena