В настоящее время у меня есть программа, которая использует другую программу для преобразования текста в штрих-код и сохраняет штрих-код в профиле пользователя. Это изображение затем используется вместе с текстом для создания документа, который затем распечатывается на принтере по умолчанию. Проблема, с которой я сталкиваюсь, заключается в том, что я могу сделать документ в первый раз, но во второй раз, когда я не могу переписать изображение, оно уже используется формой окна.
Я попытался исследовать использование временного файла, но он кажется только текстовым, и в настоящее время у меня есть два файла изображений, которые нужно перезаписать при нажатии кнопки.
#Button that starts the print process
$Button1 = New-Object system.Windows.Forms.Button
$Button1.text = "Print"
$Button1.width = 60
$Button1.height = 30
$Button1.location = New-Object System.Drawing.Point(59,190)
$Button1.Font = 'Microsoft Sans Serif,10'
$Button1.Add_Click({
$quantity = $TextBox1.text
$partsNumber = $TextBox2.text
#Creates the png files of the barcodes using the variables above and stores it in C:\Temp
Set-Location $ZintPath
.\zint.exe --height=60 --notext -o C:\Users\$env:USERNAME\partsNumber.png -d "$partsNumber"
.\zint.exe --height=60 --notext -o C:\Users\$env:USERNAME\quantity.png -d "$quantity"
#XAML form that creates the document on which the png and text are put on.
[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
[xml]$XAML = @"
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow" Height="11in" Width="8.5in">
<Grid Name="MyVisual" HorizontalAlignment="Right" Height="11in" Margin="0,0,0,0" VerticalAlignment="Top" Width="8.5in">
<Grid.RowDefinitions>
<RowDefinition Height="1.4in"/>
<RowDefinition Height="1.25in"/>
<RowDefinition Height="1.5in"/>
<RowDefinition Height="1.25in"/>
<RowDefinition Height="1.5in"/>
<RowDefinition Height="1.25in"/>
<RowDefinition Height="1.5in"/>
<RowDefinition Height="1.25in"/>
</Grid.RowDefinitions>
<TextBlock Text = "$partsNumber" HorizontalAlignment="Center" Height="Auto" Grid.Row="0" VerticalAlignment="Center" Width="Auto" FontSize="90" FontWeight="Bold" />
<Image HorizontalAlignment="Center" Height="Auto" Grid.Row="1" VerticalAlignment="Center" Width="Auto" Stretch="None" Source="C:\Users\$env:USERNAME\partsNumber.png"/>
<TextBlock Text = "$quantity" HorizontalAlignment="Center" Height="Auto" Grid.Row="2" VerticalAlignment="Center" Width="Auto" FontSize="90" FontWeight="Bold" />
<Image HorizontalAlignment="Center" Height="Auto" Grid.Row="3" VerticalAlignment="Center" Width="Auto" Stretch="None" Source="C:\Users\$env:USERNAME\quantity.png"/>
<TextBlock Text = "$partsNumber" HorizontalAlignment="Center" Height="Auto" Grid.Row="4" VerticalAlignment="Center" Width="Auto" FontSize="90" FontWeight="Bold" />
<Image HorizontalAlignment="Center" Height="Auto" Grid.Row="5" VerticalAlignment="Center" Width="Auto" Stretch="None" Source="C:\Users\$env:USERNAME\partsNumber.png"/>
<TextBlock Text = "$quantity" HorizontalAlignment="Center" Height="Auto" Grid.Row="6" VerticalAlignment="Center" Width="Auto" FontSize="90" FontWeight="Bold" />
<Image HorizontalAlignment="Center" Height="Auto" Grid.Row="7" VerticalAlignment="Center" Width="Auto" Stretch="None" Source="C:\Users\$env:USERNAME\quantity.png"/>
</Grid>
</Window>
"@
$reader=(New-Object System.Xml.XmlNodeReader $xaml)
try{$Form=[Windows.Markup.XamlReader]::Load( $reader )}
catch{Write-Host "Unable to load Windows.Markup.XamlReader."; break}
$xaml.SelectNodes("//*[@Name]") | %{Set-Variable -Name ($_.Name) -Value $Form.FindName($_.Name)}
#Prints the above document
$print = New-Object System.Windows.Controls.PrintDialog
$print.PrintVisual($MyVisual,"")
Stop-Process "C:\Users\$env:USERNAME\quantity.png"
Remove-Item "C:\Users\$env:USERNAME\quantity.png"
Stop-Process "C:\Users\$env:USERNAME\partsNumber.png"
Remove-Item "C:\Users\$env:USERNAME\partsNumber.png"
Я бы хотел, чтобы файл перезаписывался даже при открытом графическом интерфейсе. Я не могу придумать, как заставить оконную форму перестать использовать файл после того, как он уже напечатал документ.