Форма Windows не позволяет мне перезаписать картинку для печати другого документа - PullRequest
0 голосов
/ 03 июня 2019

В настоящее время у меня есть программа, которая использует другую программу для преобразования текста в штрих-код и сохраняет штрих-код в профиле пользователя. Это изображение затем используется вместе с текстом для создания документа, который затем распечатывается на принтере по умолчанию. Проблема, с которой я сталкиваюсь, заключается в том, что я могу сделать документ в первый раз, но во второй раз, когда я не могу переписать изображение, оно уже используется формой окна.

Я попытался исследовать использование временного файла, но он кажется только текстовым, и в настоящее время у меня есть два файла изображений, которые нужно перезаписать при нажатии кнопки.


#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"

Я бы хотел, чтобы файл перезаписывался даже при открытом графическом интерфейсе. Я не могу придумать, как заставить оконную форму перестать использовать файл после того, как он уже напечатал документ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...