我在运行时生成了几张图像,需要打印它们。这些都是条形码,所以高度可以固定,但数量事先不知道,所以可能需要更多的页面。例如,每个A4页面最多可以容纳4张图像。在图像下面,一个包含条形码内容的文本框可能会有帮助,但这不是必要的。
对于打印,我使用
PrintDialog printDialog = new PrintDialog();
bool? pdResult = printDialog.ShowDialog();
if (pdResult != null && pdResult.Value)
{
FixedDocument document = CreateFixedDocument();
printDialog.PrintDocument(document.DocumentPaginator, "ID Card Printing");
}
这很简单。但在创建页面之前,
private FixedDocument CreateFixedDocument()
{
FixedDocument fixedDocument = new FixedDocument();
fixedDocument.DocumentPaginator.PageSize = new Size(???); <---have not understood how to set A4 here
//for (int i = 0; i < (numBarcodes/4); i++)
{
PageContent page = new PageContent();
FixedPage fixedPage = CreateOneFixedPage();
((IAddChild)page).AddChild(fixedPage);
fixedDocument.Pages.Add(page);
}
return fixedDocument;
}
更复杂的是我创建了一个页面
private FixedPage CreateOneFixedPage()
{
FixedPage page = new FixedPage();
page.Width = ???
page.Height = ???
TextBlock tbTitle = new TextBlock();
tbTitle.Text = <----------the barcode content
tbTitle.FontSize = 24;
tbTitle.Foreground = new SolidColorBrush(Colors.White);
tbTitle.FontFamily = new FontFamily("Arial");
FixedPage.SetLeft(tbTitle, ????)
FixedPage.SetTop(tbTitle, ?????)
page.Children.Add((UIElement)tbTitle);
Image image = new Image
{
Height = 30,
Width = 30
};
image.Source = imgbarcode.Source;
FixedPage.SetLeft(b, ???);
FixedPage.SetTop(b, ???); // top margin
page.Children.Add((UIElement)b);
//measure size of the layout
Size sz = new Size(???);
page.Measure(sz);
page.Arrange(new Rect(new Point(), sz));
page.UpdateLayout();
return page;
}
任何帮助都是感激的,因为我已经打印了太多的页面!谢谢
1条答案
按热度按时间5lhxktic1#
您可以使用它:
我不得不使用MeasureTextBlock函数,因为我无法让正常的stackPanel中心逻辑工作。因此,结果如下:
如果需要更多页面,只需重复该逻辑并创建更多页面