Сгенерированные 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 (проприетарный)