這是我的場景:如何在具有不同頁面大小的單頁上打印FlowDocument?
我有一個文檔,目前是一個FlowDocument,我想打印在兩個不同的頁面大小。第一個是標準字母8.5乘11;另一種是便攜式打印機,並且是5倍於紙張長度的。它在5倍打印罰款?但它在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手動複製。
我在FlowDocument中看不到任何列。通過FlowDocumentViewer的列是UI呈現。我看來你的代碼正在打印FlowDocument而不是FlowDocumentViewer呈現。 – Paparazzi 2012-03-21 21:01:47
FlowDocument從不顯示給用戶。它包含的數據在程序中其他地方的一堆UserControl中編輯。我想打印這個,而不必先顯示它。 – miek 2012-03-22 13:12:00
FlowDocument是否包含列? – Paparazzi 2012-03-22 13:18:51