Сгенерированные C# файлы PDF не открываются в программах чтения PDF. Ошибка показывает поврежденный или поврежденный файл

Я пытаюсь сохранить imageData в виде файла PDF в каталоге сервера. Html5Canvas imageData был отправлен на сервер и после преобразования в байтовый массив попытался сохранить его в формате PDF. Файл успешно создан по указанному пути, но созданный файл не открывается правильно в большинстве программ чтения PDF (т. Е. Adobe Reader, Foxit Reader и т. Д.) И выдает ошибку, что файл поврежден или поврежден, но он правильно открывается в браузере MS Edge. Я хочу, чтобы они также отображались в обычном PDF-ридере. Можете ли вы предложить решение. Вот мой код на стороне сервера.

public static string SaveImage(string imageData, string userEmail, int quantity)
    {
        string completePath = @"~\user-images\";
        string imageName = "sample_file2.pdf";
        string fileNameWitPath = completePath + imageName;
        byte[] bytes = Convert.FromBase64String(imageData);
        File.WriteAllBytes(HttpContext.Current.Server.MapPath(fileNameWitPath), bytes);
    }

Тот же вывод, сгенерированный для этого кода

        FileStream fs = new FileStream(HttpContext.Current.Server.MapPath(fileNameWitPath), FileMode.OpenOrCreate);
        fs.Write(bytes, 0, bytes.Length);
        fs.Close();

и для этого тоже.

 using (FileStream fs = new FileStream(HttpContext.Current.Server.MapPath(fileNameWitPath), FileMode.Create))
        {

            using (BinaryWriter bw = new BinaryWriter(fs))
            {

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

                bw.Write(data);

                bw.Close();
            }

        }

1 ответ

Если вы просто сохраните файл формата растрового изображения (например, PNG или JPG) с .PDF расширение файла не делает его PDF-файлом; это все еще остается файл изображения только с другим расширением. Так что это, вероятно, работает в некоторых браузерах, потому что они могут обнаруживать формат файла, который основан не только на расширении.

Чтобы сгенерировать настоящий PDF-файл, вам понадобится конвертация. Для этого рассмотрим одну из следующих библиотек:

  • iTextSharp: https://sourceforge.net/projects/itextsharp/ (AGPL = лицензия на бесплатное программное обеспечение, допускающее некоммерческое использование. Для коммерческого использования вам необходимо приобрести коммерческую лицензию)
  • PDFSharp http://www.pdfsharp.net/ (бесплатно, лицензия MIT)
  • ABCpdf.NET http://www.websupergoo.com/products.htm (проприетарный)
Другие вопросы по тегам