Sto riscontrando alcune difficoltà nel visualizzare le immagini contenute in un documento FlowDocument per mostrare quando il documento FlowDocument viene salvato come documento XPS.Immagini mancanti in FlowDocument salvato come documento XPS
Ecco quello che faccio:
- creare un'immagine utilizzando il controllo Image di WPF. Ho impostato la sorgente dell'immagine tra parentesi per le chiamate a BeginInit/EndInit.
- Aggiungere l'immagine a FlowDocument inserendola in un BlockUIContainer.
- Salvare l'oggetto FlowDocument in un file XPS utilizzando una versione modificata di this code.
Se poi visualizzo il file salvato nel visualizzatore XPS, l'immagine non viene mostrata. Il problema è che le immagini non vengono caricate fino a quando non vengono effettivamente visualizzate sullo schermo da WPF, in modo che non vengano salvate nel file XPS. Quindi, c'è una soluzione: se prima mostro il documento sullo schermo usando lo FlowDocumentPageViewer e poi salvi il file XPS, l'immagine viene caricata e appare nel file XPS. Funziona anche se FlowDocumentPageViewer è nascosto. Ma questo mi dà un'altra sfida. Ecco quello che desidero fare (in pseudocodice):
void SaveDocument()
{
AddFlowDocumentToFlowDocumentPageViewer();
SaveFlowDocumentToXpsFile();
}
Questo ovviamente non funziona in quanto la FlowDocumentPageViewer non ha la possibilità di mostrare il suo contenuto prima che il documento viene salvato nel file XPS. Ho provato a racchiudere SaveFlowDocumentToXpsFile in una chiamata a Dispatcher.BeginInvoke ma non è stato di aiuto.
Le mie domande sono:
- Posso in qualche modo costringere le immagini da caricare prima di salvare il file XPS senza in realtà mostra il documento sullo schermo? (Ho provato a giocherellare con BitmapImage.CreateOptions senza fortuna).
- Se non c'è soluzione alla domanda n. 1, c'è un modo per dire quando FlowDocumentPageViewer ha finito di caricare il suo contenuto in modo che io sappia quando è salvato per creare il file XPS?
Hai trovato un modo per mostrare il FlowDocument in un visualizzatore prima della stampa? Sto considerando un simile "trucco" per ottenere il corretto rendering del mio documento. – Dennis
@DennisRoche: No, sfortunatamente non ho mai trovato una soluzione migliore di mostrare brevemente il documento sullo schermo prima di salvarlo in un file. Per favore fatemi sapere se trovate una soluzione migliore. –
Potrei avere una possibile soluzione che utilizza 'ContextualLayoutManager' per accedere alla struttura ad albero logico. Ti farò sapere se funziona ti farò sapere. Altrimenti ricorro a caricare il documento in un visualizzatore come hai fatto, tuttavia imposteremo la posizione della finestra su X: 10.000 Y: 10.000 in modo che l'utente non la veda. – Dennis