【问题标题】:"Image could not be read" in MigraDocMigraDoc 中的“无法读取图像”
【发布时间】:2016-08-16 18:22:54
【问题描述】:

当我指定图像的路径时,我收到一条消息,提示“无法读取图像”。我想看看我是否走错了路,所以我把这条路改成了为了测试而编造的东西。在此之后,我收到一条消息,说找不到图像。

所以,看来我确实有正确的路径,而且我之前在我的本地机器上尝试过这个没有任何问题(但是在另一个文件夹中)。当我在我的服务器上尝试它时出现了问题,它无法加载该文件夹中的所有图像。这与文件夹或类似的权限有关吗?为什么我看不到图片?

【问题讨论】:

    标签: pdfsharp migradoc


    【解决方案1】:

    可能与权限有关。应用程序是否在完全信任的情况下运行? IIS 应用程序?服务?尝试使用本地系统用户帐户 - 如果它可以工作,那就是权限问题。

    可能是图片格式的问题。 PDFsharp 依靠操作系统/框架来读取图像。从 GDI+ 构建切换到 WPF 构建或反之亦然可能会有所不同。

    在例程“private void CalculateImageDimensions()”中捕获了一个异常。也许您可以在消息框中显示异常或将其保存在文件中。这将有助于找出问题所在。

    【讨论】:

      【解决方案2】:

      PDFSharp 1.32 版本我也遇到过同样的问题。 ImageRenderer出现错误:

      A generic error occurred in GDI+. 
       at System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams)
       at PdfSharp.Pdf.Advanced.PdfImage.InitializeJpeg()
       at PdfSharp.Pdf.Advanced.PdfImage..ctor(PdfDocument document, XImage image)
       at PdfSharp.Pdf.Advanced.PdfImageTable.GetImage(XImage image)
       at PdfSharp.Pdf.PdfPage.GetImageName(XImage image)
       at PdfSharp.Drawing.Pdf.XGraphicsPdfRenderer.GetImageName(XImage image)
       at PdfSharp.Drawing.Pdf.XGraphicsPdfRenderer.Realize(XImage image)
       at PdfSharp.Drawing.Pdf.XGraphicsPdfRenderer.DrawImage(XImage image, XRect destRect, XRect srcRect, XGraphicsUnit srcUnit)
       at PdfSharp.Drawing.XGraphics.DrawImage(XImage image, XRect destRect, XRect srcRect, XGraphicsUnit srcUnit)
       at MigraDoc.Rendering.ImageRenderer.Render()
      

      正如我在 XImage.cs:241 中看到的,EXIF 格式不受官方支持:

      case "{B96B3CB2-0728-11D3-9D7B-0000F81EF32E}":  // exif
      
      default:
          throw new InvalidOperationException("Unsupported image format.");
      

      不幸的是,GDI+ 将我的 exif 格式图像定义为 JPEG,因此不会触发预期的情况。

      目前我没有找到任何理想的解决方案。在开发者论坛 (http://forum.pdfsharp.net/viewtopic.php?f=3&t=3304) 上,您可以找到有关类似问题的更多信息。似乎出现问题是因为图像是使用 Adob​​e 工具之一保存的。

      从其他角度来看 - 较新版本的 Windows 可以正确处理此问题,此问题仅在 Windows Server 2008 R2 上重现,因此也许更新可以解决此问题。

      【讨论】:

      • 异常发生在System.Drawing.Image.Save,所以看起来异常发生的地方与你显示的代码sn-p无关。我们尝试实现我们拥有图像文件的所有图像格式 - 我们的集合不包含任何返回 EXIF id 的文件,而且您似乎也没有。论坛中的主题似乎也不相关,因为它与框架报告为 RGB 的 CMYK 图像有关。
      • @PDFsharpExpert,首先我假设错误发生在 CalculateImageDimensions 中,但 ImageRenderer 在其他几种情况下也会显示“无法读取图像”。只需检查 ImageRenderer.RenderFailureImage,以防我们在 Render 函数中遇到异常时也会显示此消息。我无法获得任何支持格式的列表,但我尝试的图像有 EXIF 标头,所以我应该得到“不支持的格式”
      • 我假设“exif”GUID 可用于以该格式保存文件。我假设打开 EXIF 格式的文件时将返回“jpeg”GUID。如果 PDFsharp 只看到“jpeg”GUID,而看不到“exif”GUID,则无需实现“无法访问的代码”。在服务器上使用 GDI+ 可能会出现问题 - 在这种情况下,PDFsharp 的 WPF 版本可能是更好的选择。
      • @PDFsharpExpert 不幸的是,对于 WPF 构建,我得到的是空图像而不是错误消息。所以也许问题不仅在 GDI+ lib
      • 我在 PDFsharp 中实现了大部分图像处理,如果我得到一个 PDFsharp 不支持的图像文件,那么我可以看看发生了什么。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-05
      • 2012-10-26
      • 1970-01-01
      相关资源
      最近更新 更多