Hallo,
ich habe ein Problem mit IPreviewHandler und PDF. Ich habe folgende Implementierung:
object o = Activator.CreateInstance(a);
IInitializeWithFile fileInit = o as IInitializeWithFile;
IInitializeWithStream streamInit = o as IInitializeWithStream;
bool isInitialized = false;
if (streamInit != null)
{
_currentStream = File.Open(fileName, FileMode.Open);
StreamWrapper wrapper = new StreamWrapper(_currentStream);
streamInit.Initialize(wrapper, 0);
isInitialized = true;
}
else if (fileInit != null)
{
fileInit.Initialize(fileName, 0);
isInitialized = true;
}
if (isInitialized)
{
_pHandler = o as IPreviewHandler;
if (_pHandler != null)
{
RECT r = new RECT(viewRect);
_pHandler.SetWindow(handler, ref r);
_pHandler.DoPreview();
}
}
Für Office-Dokumente funktioniert die Implementierung, die Vorschau wird richtig angezeigt. Hier kommt IInitializeWithFile zum Einatz.
Bei der Pdf-Vorschau wird IInitializeWithStream genutzt und DoPreview liefert E_FAIL.
Eine Umstellung des Streams auf ein IStream-COM-Object im Speicher brachte auch keine Änderung:
private IStream GetStream(string filename)
{
IStream stream;
byte[] fileData = File.ReadAllBytes(filename);
IntPtr hGlobal = Marshal.AllocHGlobal(fileData.Length);
Marshal.Copy(fileData, 0, hGlobal, fileData.Length);
CreateStreamOnHGlobal(hGlobal, true, out stream);
return stream;
}
Muss ich noch etwas anderes aufrufen ? Was mache ich hier falsch?
Mit freundlichen Grüßen
Sebastian