我正在WPF中将视觉效果打印到收据打印机(Star TSP 700II).当视觉很小时,它很好,它打印好.
然而,当视觉增长时,它将剪切图像并在星形打印机的卷筒上打印到一定大小,然后它只是切割而不打印图像的其余部分.
PrintDialog.PrintVisual(Grid1, "Test");
Run Code Online (Sandbox Code Playgroud)
我已经尝试调整PageMediaSize,但这并没有改变打印输出上的任何内容.
有趣的是,当我打印到Microsoft XPS Document Writer时,保存的文件具有完整图像.

我也注意到它打印的尺寸总是最大高度= A4页面的高度.问题是如何让它打印超过A4的高度(当我从打印机首选项打印测试文档时,它能够执行此操作).
好的我用下面的课解决了这个问题.基本上我把我想要打印的内容放在一个scrollviewer中并在其中放入一个stackpanel,然后将这个stackpanel传递给我的打印助手,它现在打印时没有剪切:
public static class PrintHelper
{
public static FixedDocument GetFixedDocument(FrameworkElement toPrint, PrintDialog printDialog)
{
var capabilities = printDialog.PrintQueue.GetPrintCapabilities(printDialog.PrintTicket);
var pageSize = new Size(printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight);
var visibleSize = new Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight);
var 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));
//
var size = toPrint.DesiredSize;
//Will assume for simplicity the control fits horizontally on the page
double yOffset = 0;
while (yOffset < size.Height)
{
var vb = new VisualBrush(toPrint)
{
Stretch = Stretch.None,
AlignmentX = AlignmentX.Left,
AlignmentY = AlignmentY.Top,
ViewboxUnits = BrushMappingMode.Absolute,
TileMode = TileMode.None,
Viewbox = new Rect(0, yOffset, visibleSize.Width, visibleSize.Height)
};
var pageContent = new PageContent();
var page = new FixedPage();
((IAddChild)pageContent).AddChild(page);
fixedDoc.Pages.Add(pageContent);
page.Width = pageSize.Width;
page.Height = pageSize.Height;
var 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)
{
var wnd = new Window();
var viewer = new DocumentViewer();
viewer.Document = fixedDoc;
wnd.Content = viewer;
wnd.ShowDialog();
}
public static void PrintNoPreview(PrintDialog printDialog,FixedDocument fixedDoc)
{
printDialog.PrintDocument(fixedDoc.DocumentPaginator, "Test Print No Preview");
}
}
Run Code Online (Sandbox Code Playgroud)