2013-07-26 3 views
1

J'ai un rapport WPF qui dessine le contenu du rapport dans un format de page personnalisé (on peut le considérer comme un A4, le problème est le même), si j'envoie la sortie à un imprimante (physique ou virtuelle comme PDFCreator) mon format de page personnalisé est correctement conservé pour chaque page. Mais lorsque je l'édite au format XPS, les pages sont adaptées au format de la page Letter. Comment conserver mon format de page personnalisé lors de la génération d'un rapport WPF dans XPS?Sortie du format de page personnalisé dans XPS à partir du rapport WPF

MON OBJECTIF FINAL: Est d'avoir un PDF à partir de WPF, et mon approche est de convertir un fichier XPS en PDF en utilisant PDFSharper. La conversion fonctionne bien mais la sortie XPS corrompt mon format de page personnalisé. D'autres approches sont les bienvenues mais je voudrais comprendre et contrôler la taille de la page de sortie XPS, de toute façon.

EXEMPLE DU PROJET: Test_WpfToPDF_withXpsCorruptingPageSizeToLetter.zip

+0

Pourriez-vous s'il vous plaît nous montrer un code que vous utilisez pour la conversion de XPS en PDF? – Sevenate

+0

Qu'entendez-vous exactement par * rapport WPF * exactement? Est-ce que c'est une sorte de [custom] (http://wpfreports.codeplex.com) composant ou vous venez d'utiliser [une approche] (http://blogs.vertigo.com/personal/Paul/Blog/Lists/Posts/ Post.aspx? ID = 2) pour imprimer un contrôle WPF arbitraire ou quelque chose? – Sevenate

+0

XPS au format PDF n'est pas le problème, PDFSharper fonctionne. Mon problème est quand WPF est imprimé comme XPS. Même en utilisant XPS viewer la page est «corrompue», donc le problème n'est pas le PDFSharper. Mais je vais essayer de laisser ici un exemple de projet à télécharger. [De toute façon, vous devriez voir: http://msdn.microsoft.com/en-us/library/ms742418.aspx] – Luciano

Répondre

3

Il semble fonctionner lorsque vous enroulez le contrôle de l'utilisateur (le rapport) à l'intérieur d'un autre élément, fournissant également la taille réelle et ne pas oublier de mettre un fond. Je ne sais pas exactement pourquoi, mais le fond semble faire l'affaire, avec la taille.

public override DocumentPage GetPage(int pageNumber) { 
    var page = new MyUserControl(); 

    Border wrapper = new Border(); 
    wrapper.Width = this.PageSize.Width; 
    wrapper.Height = this.PageSize.Height; 
    wrapper.Background = Brushes.White; 

    wrapper.Child = page; 

    wrapper.Measure(this.PageSize); 
    wrapper.Arrange(new Rect(new Point(0, 0), this.PageSize)); 
    wrapper.UpdateLayout(); 

    return new DocumentPage(wrapper); 
} 
Questions connexes