ここに私のシナリオがあります:異なるページサイズの1つのページにFlowDocumentを印刷するにはどうすればよいですか?
私は2つの異なるページサイズで印刷したいドキュメント、現在FlowDocumentを持っています。最初のものは8.5 x 11の標準文字です。もう1つはポータブルプリンタであり、用紙の長さと同じ長さである。それは5xでうまく印刷されますか? 8.5x11の2ページに印刷されます。最初の列が2番目の列に流れないように、8.5x11に2つの列が必要です。私は8.5x11の単一のシートの1つのスキニーの列に印刷するように全体をスケールすることは望ましくありません。それは読めない。しかし、2つの列にページを収めるスケーリングはOKです。それは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
FlowDocumentは決してユーザーに表示されません。それに含まれるデータは、プログラムの他の場所にあるUserControlsの束で編集されます。私は最初にそれを表示することなくこれを印刷したいと思います。 – miek
FlowDocumentに列が含まれていますか? – Paparazzi