gpt4 book ai didi

WPF 固定文档分页

转载 作者:行者123 更新时间:2023-12-03 02:47:33 27 4
gpt4 key购买 nike

如何让固定文档自动分页?我有以下代码,可以用来将美化面板放入 DocViewer 中。当面板超出单个页面时会出现此问题。现在,我们只需剪辑即可。基本上,我想创建一种相当通用的方法来打印用户正在查看的内容。我的做法合理吗?

    public void CreateReport(Panel details)
{
FixedDocument fixedDoc = new FixedDocument();
PageContent pageContent = new PageContent();
FixedPage fixedPage = new FixedPage();

fixedPage.DataContext = this.DataContext;
fixedPage.Margin = new Thickness(10);

fixedPage.Children.Add(details);
((System.Windows.Markup.IAddChild)pageContent).AddChild(fixedPage);
fixedDoc.Pages.Add(pageContent);

// This makes the array of controls invisibile, then climbs the details structure
// and makes the controls within details appropriate for the DocumentViewwer (i.e. TextBoxes are
// non-editable, no borders, no scroll bars, etc).
prePrintPrepare(details, fixedPage, new FrameworkElement[] { controlToMakeInvisible });

_dv = new DocViewer();
_dv.documentViewer1.Document = fixedDoc;
_dv.Show();
}

最佳答案

我讨厌回答我自己的问题,但是,以下给了我一个合理的解决方案: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/bd89e0d2-73df-4b9b-9210-b8be83ff29d6/

斯科特

public static class PrintHelper
{
public static FixedDocument GetFixedDocument(FrameworkElement toPrint, PrintDialog printDialog)
{
PrintCapabilities capabilities = printDialog.PrintQueue.GetPrintCapabilities(printDialog.PrintTicket);
Size pageSize = new Size(printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight);
Size visibleSize = new Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight);
FixedDocument fixedDoc = new FixedDocument();

// If the toPrint visual is not displayed on screen we neeed to measure and arrange it.
toPrint.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
toPrint.Arrange(new Rect(new Point(0, 0), toPrint.DesiredSize));

Size size = toPrint.DesiredSize;

// Will assume for simplicity the control fits horizontally on the page.
double yOffset = 0;
while (yOffset < size.Height)
{
VisualBrush vb = new VisualBrush(toPrint);
vb.Stretch = Stretch.None;
vb.AlignmentX = AlignmentX.Left;
vb.AlignmentY = AlignmentY.Top;
vb.ViewboxUnits = BrushMappingMode.Absolute;
vb.TileMode = TileMode.None;
vb.Viewbox = new Rect(0, yOffset, visibleSize.Width, visibleSize.Height);

PageContent pageContent = new PageContent();
FixedPage page = new FixedPage();
((IAddChild)pageContent).AddChild(page);
fixedDoc.Pages.Add(pageContent);
page.Width = pageSize.Width;
page.Height = pageSize.Height;

Canvas canvas = new Canvas();
FixedPage.SetLeft(canvas, capabilities.PageImageableArea.OriginWidth);
FixedPage.SetTop(canvas, capabilities.PageImageableArea.OriginHeight);
canvas.Width = visibleSize.Width;
canvas.Height = visibleSize.Height;
canvas.Background = vb;
page.Children.Add(canvas);

yOffset += visibleSize.Height;
}
return fixedDoc;
}

public static void ShowPrintPreview(FixedDocument fixedDoc)
{
Window wnd = new Window();
DocumentViewer viewer = new DocumentViewer();
viewer.Document = fixedDoc;
wnd.Content = viewer;
wnd.ShowDialog();
}
}

关于WPF 固定文档分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5107880/

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