Я разработал веб-приложение С#, которое вызывает веб-службу, которая возвращает массив с кодировкой base64 (файл PDF). Затем я преобразовываю этот массив в объект UCOMIStream (я знаю, что он устарел, но используемая мной DLL требует его как параметра). Для выполнения преобразования, который работает отлично, я использую следующий код. Я могу передать этот объект в DLL, чтобы я мог распечатать PDF.
Это отлично работает на веб-сервере, но требование заключается в том, чтобы печатать его локально.
Byte[] bBuffer = statementOut.statementcycle.statementdata.content;
int size = bBuffer.Length;
IntPtr mem = Marshal.AllocHGlobal(size);
Marshal.Copy(bBuffer, 0, mem, size);
// Create an OLE Stream object.
System.Runtime.InteropServices.UCOMIStream str; //obsolete but the createstreamonhglobal outputs it
CreateStreamOnHGlobal(mem, true, out str);
DLL находится на клиенте, поэтому я могу использовать ActiveX для создания объекта с помощью javascript и/или VBscript, однако мне не удалось выяснить, как получить объект потока от клиента, чтобы перейти к DLL.
Как это можно достичь?
Не могли бы вы просто создать PDF файл на сервере и загрузить его клиент?
Попросите клиента загрузить этот закодированный массив base64, а затем перевести данные в объект UCOMIStream и создать PDF-клиент на стороне клиента.