Как напечатать FlowDocument на одной странице с разными размерами страницы?
Вот мой сценарий:
У меня есть документ, в настоящее время FlowDocument, который я хотел бы напечатать на двух разных размерах страницы. Первая - стандартная буква 8.5 на 11; другой - портативный принтер, и его длина составляет 5 штук. На 5х печатает нормально? но он печатается на двух страницах размером 8,5х11. Я хочу, чтобы в 8.5x11 было два столбца, поэтому первый столбец перетекает во второй столбец, а не на вторую страницу. Я НЕ хочу масштабировать все это так, чтобы оно печаталось в одной тонкой колонке на одном листе размером 8,5х11; это нечитаемо Некоторое масштабирование, чтобы уместить страницу в два столбца, все в порядке. Он хорошо печатает на бумаге обоих форматов из 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>
Я попытался поэкспериментировать с шириной столбца, размером страницы документа, масштабированием, добавлением панелей переноса, добавлением панелей стека и т. Д., И я не могу понять это. Это сводит меня с ума! Кто-нибудь может помочь?
PS Любые опечатки в коде вызваны мной, так как мне пришлось копировать его вручную с другого компьютера.
1 ответ
Итак, после еще большей работы с значениями и добавления FlowDocument к различным средствам просмотра я заметил, что у большинства людей, задающих вопросы о печати FlowDocument, возникла противоположная проблема, с которой я столкнулся. И их решением было установить ColumnWidth.
Я просто удалила
ColumnWidth="500"
из FlowDocument, и теперь у меня есть поведение, которое я хочу. Печатает в двух столбцах на А4 и печатает в одном столбце нужной длины на меньшей буферной бумаге. И для ясности, я также не устанавливаю ColumnWidth нигде в коде.