2015-12-07 6 views
1

Я создал программу, которая шифрует и расшифровывает PDF-файлы. Я хочу, чтобы они были заблокированы для кого угодно, кроме меня, и чтобы открыть их только через мою программу. После того, как я зашифрую pdf, я получаю его в байтовом массиве. Есть ли в любом случае отображение дешифрованного байтового массива pdf-файла в форму без развертывания файла на диске?Показать pdf от байтового массива до C# winforms

+0

Итак, вы хотите избежать записи байта [] файла pdf на диск? И вы просто хотите показать байт [] (отображаемый в виде текста, например, шестнадцатеричный редактор) на winform? – itsmatt

+0

Да, я не хочу писать дешифрованный pdf-диск на диск, потому что тогда все было бы излишним. Я хочу представить дешифрованные байты, хранящиеся в моей памяти – Erez

ответ

1

Что вам нужно, это компонент просмотра WinForms PDF, который может загружать PDF из массива байтов. С просмотра PDF из Gnostice PDFOne .NET, вот код:

PDFViewer PDFViewer1; 
byte[] baPDF; // load the decrypted PDF to this byte array 
... 
PDFViewer1.LoadDocument(baPDF); 

http://www.gnostice.com/docs/pdfone_dot_net/[email protected][].html

ПРИМЕЧАНИЕ: Я работаю в этой компании Gnostice. Любой другой компонент просмотра PDF, если он может загрузиться из массива байтов, будет работать.

Нет необходимости сохранять расшифрованный PDF-файл на диск.

+0

Спасибо большое! только одна мелочь. Когда я попытался использовать LoadDocument в расшифрованном массиве байтов PDF, я получаю исключение. Затем я попытался загрузить обычный байтовый массив PDF (с File.ReadAllBytes, без манипуляций) и все еще исключение PDFException .. вы, возможно, знаете почему? – Erez

+0

Даже с строкой, содержащей фактическое pdf, то же исключение. – Erez

+0

В этом случае вам необходимо отправить расшифрованный PDF-файл в поддержку пользователей библиотеки. – gn1

0

Если предположить, что у вас есть некоторые функции под названием GetDecrypedBytes(), которая имеет подпись:

public byte[] GetDecryptedBytes(); 

Как зашифровать/расшифровать вещи выходит за рамки вопроса под рукой, и я предполагаю, что вы знаете, как это сделать ,

Тогда вы могли бы написать функцию, такие как:

public static string ByteArrayToString(byte[] bytes) 
{ 
    StringBuilder hex = new StringBuilder(bytes.Length * 2); 
    foreach (byte b in bytes) 
    hex.AppendFormat("{0:x2}", b); 
    return hex.ToString(); 
} 

И что бы превратить байты в текст, который может отображаться где-то.

И тогда вы могли бы сделать что-то на вашем UI, такие как:

myTextBox.Text = ByteArrayToString(GetDecryptedBytes());

Очевидно, можно настроить функцию ByteArrayToString, чтобы изменить способ отображения шестнадцатеричное представление байтов.

+0

Спасибо, но это не так, это просто показывает шестнадцатеричное представление PDF-файла, не представляя его. – Erez

+0

Вам нужно будет либо отправить PDF в браузер с помощью adobe add- использовать или использовать сторонний элемент управления. Кроме того, вы можете конвертировать его в формат XPS и иметь элементный элемент, отображающий элемент управления WPF, который может отображать данные XPS. В WinFotms нет встроенного средства просмотра PDF. – itsmatt

Смежные вопросы