Как конвертировать PDF Base64 в PDF, а затем PDF в изображение в C# - PullRequest
0 голосов
/ 17 марта 2020

следующий код добавлен: Объект изображения находится в library.imaging.

"using System.Drawing;"
"using System.Drawing.Imaging;"
{
  byte[] b = Convert.FromBase64String("R0lGODlhAQABAIAAA");
  Image image;
  using (MemoryStream memstr = new MemoryStream(b))
  {
    image = Image.FromStream(memstr);
  }
}

Вот новый код, над которым я работаю:

{
  string base64BinaryStr = " ";
  byte[] PDFDecoded = Convert.FromBase64String(base64BinaryStr);
  string FileName = (@"C:\Users\Downloads\PDF " + DateTime.Now.ToString("dd-MM-yyyy-hh-mm"));

  BinaryWriter writer = new BinaryWriter(File.Create(FileName + ".pdf"));            
  writer.Write(PDFDecoded);
  string s = Encoding.UTF8.GetString(PDFDecoded);
}   

Ответы [ 2 ]

2 голосов
/ 17 марта 2020

Итак, это ваш текущий код:

byte[] PDFDecoded = Convert.FromBase64String(base64BinaryStr);
string FileName = (@"C:\Users\Downloads\PDF " + DateTime.Now.ToString("dd-MM-yyyy-hh-mm"));

BinaryWriter writer = new BinaryWriter(File.Create(FileName + ".pdf"));            
writer.Write(PDFDecoded);

На самом деле вам не нужно BinaryWriter для этого. File.Create уже дает вам FileStream:

FileStream writer = File.Create(FileName + ".pdf");
writer.Write(PDFDecoded, 0, PDFDecoded.Length);

Но это все равно будет иметь проблему, с которой вы столкнулись, потому что вы не сбрасываете в нее данные. Нам также нужно закрыть файл. К счастью, мы можем обернуть его в using, и он будет делать для нас оба:

using (FileStream writer = File.Create(FileName + ".pdf"))
{
    writer.Write(PDFDecoded, 0, PDFDecoded.Length); 
}

Но более простой способ сделать это:

File.WriteAllBytes(FileName + ".pdf", PDFDecoded);

Что касается PDF -> Image, вам, вероятно, придется посмотреть, есть ли доступная библиотека для этого (поиск "PDF to Image NuGet"), которая может помочь вам в этом, поскольку я не думаю, что есть что-то встроенное.

0 голосов
/ 19 марта 2020

Просто подумайте, вам не нужно создавать физический файл PDF, вы можете иметь его в памяти и преобразовать его в изображение оттуда.

Теперь проблема в том, что вы не можете использовать Image из System.Drawing.Imaging для этого он не поддерживает чтение PDF-файла.

Вместо этого вам нужно будет найти библиотеку, которая может это сделать.
Например, попробуйте GemBox.Pdf , вы можете использовать его так:

string base64String = "...";
byte[] pdfBytes = Convert.FromBase64String(base64String);

using (PdfDocument pdfDocument = PdfDocument.Load(new MemoryStream(pdfBytes)))
{
    ImageSaveOptions imageOptions = new ImageSaveOptions(ImageSaveFormat.Png);

    string imageName = DateTime.Now.ToString("dd-MM-yyyy-hh-mm") + ".png";
    pdfDocument.Save(@"C:\Users\Downloads\" + imageName, imageOptions);
}

Я использовал код, предоставленный в этом примере Convert .

...