2009-12-30 5 views
3

J'essaie d'imprimer un FlowDocument. Après avoir passé une bonne partie de la journée à essayer plusieurs pages, j'ai échoué et j'ai opté pour quelque chose de plus simple, mais je suis maintenant incapable d'expliquer quand le texte n'est pas sorti sur la page. Ça doit être quelque chose que je crois avoir dans les neiges. Il y a deux tables ci-dessous, en plaçant un convertisseur sur les deux spectacles que les valeurs sont peuplées par le DataContext du FlowDocument.WPF: Impression d'un FlowDocument

<Table> 
    <Table.Columns> 
     <TableColumn Width="Auto"/> 
     <TableColumn Width="34"/> 
     <TableColumn Width="Auto"/> 
    </Table.Columns> 
    <TableRowGroup> 
     <TableRow> 
      <TableCell> 
       <Paragraph> 
        <Image Source="{Binding Icon,Converter={StaticResource IconConverter},ConverterParameter=32}" Width="32" Height="32"/> 
       </Paragraph> 
      </TableCell> 
      <TableCell> 
       <Paragraph> 
        <TextBlock Text="{Binding Name,Converter={StaticResource dbg}}" TextWrapping="Wrap" TextTrimming="CharacterEllipsis" VerticalAlignment="Center" FontSize="18" Foreground="Black" /> 
       </Paragraph> 
      </TableCell> 
      <TableCell> 
       <Paragraph> 
        <TextBlock Text="Static text works fine" TextAlignment="Right" /> 
        <TextBlock Text="Static text works here too fine" TextAlignment="Right" /> 
       </Paragraph> 
      </TableCell> 
     </TableRow> 
    </TableRowGroup> 
</Table> 
<BlockUIContainer> 
    <Line Stretch="Fill" Stroke="DarkBlue" X2="1"/> 
</BlockUIContainer> 

Le document est imprimé à l'aide:

PrintDialog dlg = new PrintDialog(); 
if(dlg.ShowDialog() == true) { 
    int margin = 5; 
    Size pageSize = new Size(dlg.PrintableAreaWidth - margin * 2, dlg.PrintableAreaHeight - margin * 2); 
    FlowDocument document = WPFUtils.LoadFlowDocument(System.IO.Path.Combine(Utils.GetApplicationPath(), "AccountPrintView.xaml"), account); // loads the document from a XAML file 
    IDocumentPaginatorSource paginator = document as IDocumentPaginatorSource; 
    paginator.DocumentPaginator.PageSize = pageSize; 
    dlg.PrintDocument(paginator.DocumentPaginator, "Print output"); 
} 

Je suis un peu à mon esprit fin à cela, je ne vois pas le problème. J'apprécierais vraiment si quelqu'un pouvait faire la lumière.

Répondre

1

Ce n'est pas vraiment une réponse en soi, mais êtes-vous en mesure d'utiliser le FlowDocumentReader? Il a déjà les éléments d'impression pré-câblés sur Ctrl-P (et expose une méthode "Print") ... cela dit, vous pouvez essayer ceci: Printing a Windows Foundation Presentation FlowDocument

+0

J'ai utilisé à peu près le même code ailleurs dans un autre application cependant. J'ai pensé que c'était peut-être quelque chose de vraiment évident mais peut-être pas. :( – Echilon