以下是我的情景:
我有一个文档,目前是FlowDocument,我想在两种不同的页面大小上打印。第一个是标准字母8.5乘11;另一种是便携式打印机,纸张长度为5。它在5x上打印得很好吗?但它打印在8.5x11的两页上。我希望8.5x11有两列,所以第一列流入第二列而不是第二页。我不想缩放整个东西,以便在一张8.5x11的单张纸上打印一个瘦小的列;这是不可读的。然而,一些缩放以使页面适合两列是可以的。它可以在Xamlpad的两种尺寸纸张上打印,但不能从我的程序中打印出来。所以,对我来说,生活必定是可能的,我无法弄明白。
我的打印机类:
public void Print(MyViewModel Data) {
IDocumentPaginator flowDoc = RenderFlowDocumentTemplate(pathToFlowDocument, data);
PrintDocumentImageableArea area = null;
XpsDocumentWriter xpsDocWriter = PrintQueue.CreateXpsDocumentWriter(ref area);
if (xpsDocWriter != null) {
PrintFlowDocument(xpsDocWriter, flowDoc.DocumentPaginator, area);
}
}
private IDocumentPaginator RenderFlowDocumentTemplate(string path, MyViewModel Data) {
string rawXamlText = "";
using (StreamReader streamReader = File.OpenText(templatePath)) {
rawXamlText = streamReader.ReadToEnd();
}
FlowDocument doc = XamlReader.Load(new XmlTextReader(new StringReader(rawXamlText)) as FlowDocument;
if (data != null) {
doc.DataContext = data;
}
return doc;
}
private void PrintFlowDocument(XpsDocumentWriter writer, DocumentPaginator document, PrintDocumentImageableArea area) {
document.PageSize = new Size(area.ExtentWidth, area.ExtentHeight);
PrintDocumentPaginator(writer, document);
}
private void PrintDocumentPaginator(XpsDocumentWriter xpsDocWriter, DocumentPaginator document) {
try {
xpsDocWriter.Write(document);
}
catch (PrintSystemException) {}
}
这是我的FlowDocument的精简版:
<FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
Background="White"
ColumnWidth="500">
<FlowDocument.Resources>...some resources...</FlowDocument.Resources>
<Paragraph />
<BlockUIContainer>
<Grid />
</BlockUIContainer>
.
.
.
<Section />
</FlowDocument>
我曾尝试弄乱列宽,文档页面大小,缩放,添加包装面板,添加堆栈面板等等......我无法弄清楚这一点。这让我疯了!有人可以帮忙吗?
P.S。代码中的任何拼写错误都是由我引起的,因为我不得不从我的其他PC手动复制它。
答案 0 :(得分:1)
所以,经过大量挖掘和玩弄价值并将FlowDocument添加到各种观众之后,我注意到大多数人询问有关FlowDocument打印的问题都有我遇到的相反问题。他们的解决方案是设置ColumnWidth。
我只是删除了
ColumnWidth="500"
来自FlowDocument的我现在有了我想要的行为。在A4上打印两列,在单个列中打印在较小的假脱机纸上所需的长度。为清楚起见,我也没有在代码中的任何位置设置ColumnWidth。