IE10 / Edge PDF未显示正确的值

时间:2016-04-08 16:25:21

标签: asp.net internet-explorer pdf microsoft-edge

所以我有一个通过打开模板,修改某些字段的值然后保存的动态创建的PDF。

使用:

  • 如果我在Chrome中打开文件,我的值就会正确。
  • 如果我将文件保存到磁盘并使用Adobe Reader DC(或其他任何名称)打开它,我会得到正确的值。

不起作用:

  • 当我在IE 10中打开文档时,它会在Edge中打开,并显示"默认"字段的值。
  • 当我将文件保存到磁盘并使用IE打开时,它显示"默认"值。
  • 当我使用" PDF阅读器 - 文档查看器和管理器"打开文件时它显示"默认"值。

我使用的是Windows 10,我正在使用的应用程序是在ASP.Net中完成的。无论我返回FileStreamResult,FilePathResult还是File。

,它的工作方式都是一样的

我现在非常确定问题是微软的产品而不是我的代码。

知道为什么Microsoft产品无法正确打开我的PDF?他们是否必须以某种特定的方式扁平化?

编辑(评论中要求的更多信息):

  • 使用PdfSharp创建文档。
  • 他们拥有动态替换为值的字段(即[MyFieldA]替换为" ActualValueA")。
  • 合并字段替换为实际值后,使用File.WriteAllText(fileName,fileText);编写文件,其中fileText通过File.ReadAllText(fileTemplateName);
  • 获取

比较字段的比较图像: Comparison

1 个答案:

答案 0 :(得分:0)

所以我找到了问题的解决方案,看起来它可能是一个双重的东西。

我相信的一个难题是用于创建PDF的内存流。它在内部作用域中声明,在对外部作用域中声明的var的赋值中的PdfReader.Open调用中使用,然后作用域结束,而var仍在使用中。我将memorystream声明移动到var声明所在的外部作用域,以便它们在同一作用域中。此外,内存流未通过memoryStream.Close()调用或using (var memoryStream = new MemoryStream()) { }块关闭。所以我添加了对memoryStream.Close()的调用。

另一部分是PDF模板表单字段具有一些默认显示值。似乎Microsoft的东西(Edge,PDF Viewer)可能无法获取插入的值,而是读取字段的默认显示值并显示这些值。删除所有默认显示值后,Edge开始打开PDF并正确显示值。

由于这两件作品是串联完成的,我无法肯定地说它们在这方面起着同等的作用,但这些是为了让值开始正确显示而进行的唯一两项改变。我的直觉是问题在于默认显示值和Edge。