Мое приложение получает PDF в виде строки base64 с дефлированной zLib в XML-файле.По крайней мере, это тот формат, в котором, как мне сказали, он находится. Он сохраняется в базе данных, а затем мне нужно заново создать PDF-файл из этой строки.Я создал тестовое приложение, чтобы понять это.Приведенная ниже функция берет строку и должна вернуть ее в декодированном, раздутом формате, который, я думаю, я смогу использовать для перестроения оригинального PDF (я еще не там).
Я провел много исследований и нашел несколько разных библиотек и способов сделать это, а также получил Java-программу от разработчика, который отправляет мне PDF-файл для использования в качестве примера.Однако я не могу получить строку в пригодном для использования формате.Использование ManagedZLib.dll и функции, представленной ниже, кажется мне наиболее близким.Насколько я могу судить по отладке, все работает, пока я не попытаюсь распаковать:
zStream.Read(decompressedBytes, 0, decodedBytes.Length - 1)
Это приводит к "ошибке zLib: -3".Единственная информация, которую я могу найти об этой ошибке - это «ошибка данных».В Интернете очень мало другой информации об этом.
Любая помощь в преодолении этой ошибки или мысли о другом / лучшем подходе к достижению моей конечной цели очень ценится.
Public Function DecompressString4(ByVal origString As String) As String
Dim returnString = Nothing
' get the base64 content into String
ManagedZLib.ManagedZLib.Initialize()
'// parse the string into a byte array
Dim b64bytes() As Byte = System.Text.Encoding.UTF8.GetBytes(origString)
Dim decodedBytes() As Byte = Nothing
'decode the byte array into another byte array, but this time of Base 64.
Using ms As New MemoryStream(b64bytes)
Using zStream As New ManagedZLib.Base64Stream(ms, Base64Options.Decode)
ReDim decodedBytes(b64bytes.Length)
zStream.Read(decodedBytes, 0, b64bytes.Length)
End Using
End Using
decmpStrTxtBox.Text = Convert.ToString(decodedBytes)
Dim decompressedBytes() As Byte = Nothing
' inflate the base64 array
Using ms2 As New MemoryStream(decodedBytes)
Using zStream As New ManagedZLib.CompressionStream(ms2, CompressionOptions.Decompress)
'ReDim decompressedBytes(origString.Length)
ReDim decompressedBytes(decodedBytes.Length)
zStream.Read(decompressedBytes, 0, decodedBytes.Length - 1)
End Using
End Using
'write output to a stream
returnString = Convert.ToString(decompressedBytes)
ManagedZLib.ManagedZLib.Terminate()
Return returnString
End Function