gpt4 book ai didi

c# - 在多页上打印一封信

转载 作者:行者123 更新时间:2023-12-02 22:12:37 25 4
gpt4 key购买 nike

我有一个打印按钮,它必须打印两个文件:-此人写的一封信其次,在第二次打印时,我必须处理一封可能有多页的信件。我该怎么做?

这封信在我页面上的文本框内。

这是我的代码:

void btPrint_Click(object sender, RoutedEventArgs e)
{

if (itmCandidatSelect.LettreMotiv != null || itmCandidatSelect.LettreMotiv != "")
{
_lineIndex = 0;
_documentBodyLines = new List<string>();
string[] lines = tbLettreMotiv.Text.Split(new char[] { '\r' }, StringSplitOptions.None);
_documentBodyLines.AddRange(lines);

PrintDocument maLettreMotiv = new PrintDocument();
//maLettreMotiv.BeginPrint += new EventHandler<BeginPrintEventArgs>(maLettreMotiv_BeginPrint);
//maLettreMotiv.EndPrint += new EventHandler<EndPrintEventArgs>(maLettreMotiv_EndPrint);
maLettreMotiv.PrintPage += new EventHandler<PrintPageEventArgs>(maLettreMotiv_PrintPage);

maLettreMotiv.Print("LettreMotivation_" + itmCandidatSelect.NomCandidat + "_" + itmCandidatSelect.PrenomCandidat);

}

    int _lineIndex;
List<string> _documentBodyLines;

void maLettreMotiv_PrintPage(object sender, PrintPageEventArgs e)
{
PrintLettreMotivTemplate page = new PrintLettreMotivTemplate();
page.SetHeaderAndFooterText("Lettre de motivation", "");
int numberOfLinesAdded = 0;
while (_lineIndex < _documentBodyLines.Count)
{
page.AddLine(_documentBodyLines[_lineIndex]);
page.Measure(new Size(e.PrintableArea.Width, double.PositiveInfinity));
if (page.DesiredSize.Height > e.PrintableArea.Height && numberOfLinesAdded > 1)
{
page.RemoveLastLine();
e.HasMorePages = true;
break;
}
_lineIndex++;
numberOfLinesAdded++;

}
e.PageVisual = page;
}

我的模板:

<UserControl x:Class="erecrutement_procclass.Views.PrintLettreMotivTemplate"
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"
Width="815"
Height="1024"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400">
<Grid x:Name="documentRoot">
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition />
<RowDefinition Height="25"/>
</Grid.RowDefinitions>
<TextBlock x:Name="headerTextBlock" HorizontalAlignment="Center" />
<TextBlock x:Name="bodyTextBlock" Grid.Row="1" TextWrapping="Wrap" Margin="5,5,5,5"/>
<TextBlock x:Name="footerTextBlock" HorizontalAlignment="Center" Grid.Row="2"/>
</Grid>


public partial class PrintLettreMotivTemplate : UserControl
{
public PrintLettreMotivTemplate()
{
InitializeComponent();
}

public void SetHeaderAndFooterText(string header, string footer)
{
headerTextBlock.Text = header;
footerTextBlock.Text = footer;
}


public void AddLine(string line)
{
bodyTextBlock.Inlines.Add(line);
bodyTextBlock.Inlines.Add(new LineBreak());
}



public void RemoveLastLine()
{
for (int index = 0; index < 2; index++)
{
bodyTextBlock.Inlines.RemoveAt(bodyTextBlock.Inlines.Count - 1);
}
}
}

但是,当它应该翻过一页的时候,它停了下来,而我只有一页,还少了一页。

我该如何解决这个问题?

谢谢。

最佳答案

原因是这样的。在 PrintLettreMotivTemplate.xaml 中

<UserControl x:Class="DelmePrint.PrintLettreMotivTemplate"
Width="815"
Height="1024"
>
<Grid x:Name="documentRoot">
...
</Grid>
</UserControl>

您已将可打印区域的高度设置为 1024。当我单步执行代码时,

/* DesiredSize always (793, 1024)
PrintableArea always (793, 1122) */
if (page.DesiredSize.Height > e.PrintableArea.Height)

因此代码不断向页面的中间部分添加行。

要解决这个问题,需要将PrintLettreMotivTemplate中的Height改为MinHeight。这样,当行数过多时,字母会溢出。

<UserControl x:Class="DelmePrint.PrintLettreMotivTemplate"
Width="815"
MinHeight="1024"
>
<Grid x:Name="documentRoot">
...
</Grid>
</UserControl>

关于c# - 在多页上打印一封信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14998411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com