【问题标题】:C# generated PDF files doesn't open in PDF readers. Error shows damaged or corrupt fileC# 生成的 PDF 文件无法在 PDF 阅读器中打开。错误显示损坏或损坏的文件
【发布时间】:2016-11-11 06:58:25
【问题描述】:

我正在尝试将 imageData 保存为服务器目录上的 pdf 文件。 Html5Canvas imageData 被发送到服务器并在字节数组中转换后,尝试保存为 PDF 文件。文件在指定路径上成功生成,但生成的文件无法在大多数 PDF 阅读器(即 Adob​​e Reader、Foxit 阅读器等)中正确打开,并显示文件已损坏或损坏但在 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();
            }

        }

【问题讨论】:

  • 那么您是在浏览器上创建 PDF 吗?由于您没有在此处进行任何转换

标签: c# pdf binary-data


【解决方案1】:

如果您只是保存带有.PDF 文件扩展名的光栅图像格式文件(如PNG 或JPG 文件),它不会使其成为PDF 文件;它仍然是一个图像文件,只是带有另一个扩展名。所以它可能适用于某些浏览器,因为它们可能会进行不单独基于扩展名的文件格式检测。

要生成实际的 PDF 文件,您需要进行一些转换。为此考虑以下库之一:

【讨论】:

  • iText 和 iTextSharp 作为免费/开源软件发布。免费/开源软件已获得许可。在 iText(Sharp) 的情况下,许可证是 AGPL。只要您在同一许可下分发自己的软件,AGPL 就允许您免费使用该软件。这类似于您使用 Stack Overflow 上的代码时的许可:eurostaffgroup.com/media-hub/…
  • @BrunoLowagie 感谢您的编辑。事实上,在使用某些东西之前检查free 在特定情况下的含义很重要。我还添加了 PDFSharp 的信息,该信息是在不太严格的 MIT License 下获得许可的。
  • 确实:我已经就许可进行了很多讨论,根据我的经验,开发人员并不总是意识到使用免费/开源软件的含义。例如:an introduction to IP and LegalHow can large open source projects be monetized?
  • 感谢@AndrewSklyarevsky,您建议的解决方案有效。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-05
  • 1970-01-01
  • 2011-01-12
相关资源
最近更新 更多