Je génère un fichier XPS
à la volée en utilisant la classe XpsDocument. Dans mon modèle XAML
, j'intègre une image JPEG
dans un conteneur Image. Toutefois, les images incorporées dans les résultats XPS
sont toujours PNG
images - ce qui entraîne des fichiers très volumineux pour certains types d'images.Comment intégrer des images JPEG dans XPS généré XAML?
Il semble que l'éditeur de document interprète les images rendues en tant que bitmaps, puis les enregistre sous PNG
.
Voici le code qui produit le XPS
:
void ConvertToXps(IEnumerable<FixedDocument> fixedDocuments, Stream outputStream)
{
var package = Package.Open(outputStream, FileMode.Create);
var xpsDoc = new XpsDocument(package, CompressionOption.Normal);
var xpsWriter = XpsDocument.CreateXpsDocumentWriter(xpsDoc);
// XPS documents are built using fixed document sequences.
var fixedDocSeq = new FixedDocumentSequence();
// A4 = 210 x 297 mm = 8.267 x 11.692 inches = 793.632 * 1122.432 dots
fixedDocSeq.DocumentPaginator.PageSize = new Size(793.632, 1122.432);
foreach (var fixedDocument in fixedDocuments)
{
var docRef = new DocumentReference();
docRef.BeginInit();
docRef.SetDocument(fixedDocument);
docRef.EndInit();
((IAddChild)fixedDocSeq).AddChild(docRef);
}
// Write out our fixed document to XPS.
xpsWriter.Write(fixedDocSeq.DocumentPaginator);
xpsDoc.Close();
package.Close();
}
Q: Comment puis-je forcer mes XAML
images rendus à être enregistrés comme JPEG
dans le produit XPS
?
Fait sens. Est-il possible d'obtenir ce 'IXpsFixedPageWriter' si le' FixedDocument' est créé à partir de 'XAML' et ensuite lire en utilisant' XamlReader.Parse'? Idéalement, je voudrais un rappel où les parseurs me demande ce qu'il faut faire quand il rencontre une image. – l33t
Je ne suis pas sûr à 100%, mais je ne le pense pas. Je ne pense pas qu'il y ait quelque chose dans le Framework .Net pour éditer un XPS existant, ce que vous essayez de faire. Vous pouvez créer le fichier XPS, mais une fois créé, il est en lecture seule. – Gimly
Dans ce cas, 'FixedPage' doit en effet être créé en code-behind. À moins qu'il y ait une manière intelligente de raccorder l'analyseur XAML et de surcharger l'appel interne à 'AddImage'. – l33t