Преобразовать строку в кодировке Base64 в PDF - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть строка Base64, представляющая файл PDF, который необходимо преобразовать в файл PDF, и открыть с помощью программы чтения PDF-файлов или браузера по умолчанию в C #.

Я написал только часть строки Base64, посколькуздесь слишком длинная строка для вставки.

public void DownloadPDF()
{
    string pdflocation = "E:\\";
    string fileName = "softcore.pdf";
    // This is only part of Base64 string
    var base64String = "JVBERi0xLjQKJdP0zOEKMSAwIue704O58dOXPgst+hmQ+laj/"; 
    int mod4 = base64String.Length % 4;
    if (mod4 > 0)
    {
        base64String += new string('=', 4 - mod4);
    }
    byte[] data = Convert.FromBase64String(base64String);        

    if (Directory.Exists(pdflocation))
    {
        pdflocation = pdflocation + fileName;
        using (MemoryStream Writer = new System.IO.MemoryStream())
        {
            Response.ContentType = "application/pdf";
            Response.AddHeader("content-disposition", "attachment; filename=" + fileName);
            Response.AddHeader("content-length", data.Length.ToString());
            Writer.WriteTo(Response.OutputStream);
            Response.Flush();
            Response.End();
            //Writer.Write(data, 0, data.Length);
        }                
    }
}

Проблема, с которой я сталкиваюсь, заключается в том, что она отображается как генерирующая pdf, но в конце она говорит об ошибке сети.

Декодированная строка извходная закодированная строка Base64: enter image description here

1 Ответ

0 голосов
/ 13 сентября 2018

Этот код работает нормально, если PDF преобразован в base 64 с какой-либо онлайн-платформы, такой как freeformatter.com / base64-encoder.html , и используйте эту строку base 64 в приведенном ниже коде:

                 string pdflocation = "D:\\";
                  string fileName = "softcore.pdf";

                  // put your base64 string converted from online platform here instead of V
                  var base64String = V;

                  int mod4 = base64String.Length % 4;

                  // as of my research this mod4 will be greater than 0 if the base 64 string is corrupted
                  if (mod4 > 0)
                  {
                        base64String += new string('=', 4 - mod4);
                  }
                  pdflocation = pdflocation + fileName;

                  byte[] data = Convert.FromBase64String(base64String);

                  using (FileStream stream = System.IO.File.Create(pdflocation))
                  {
                        stream.Write(data, 0, data.Length);
                  }

Это должно сохранить файл PDF в D:\\, снова проблема в вашей кодированной строке base 64

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...