Asp.net IE10/Edge PDF未显示正确的值

Asp.net IE10/Edge PDF未显示正确的值,asp.net,internet-explorer,pdf,microsoft-edge,Asp.net,Internet Explorer,Pdf,Microsoft Edge,因此,我有一个PDF,它是通过打开模板,修改某些字段的值,然后保存而动态创建的 作品: 如果我在Chrome中打开文件,我就有了正确的值 如果我将文件保存到磁盘并用AdobeReaderDC(或其他任何名称)打开它,我会得到正确的值 不起作用: 当我在IE 10中打开文档时,它会在Edge中打开,并显示字段的“默认”值 当我将文件保存到磁盘并用IE打开它时,它会显示“默认”值 当我使用“PDF阅读器-文档查看器和管理器”打开文件时,它会显示“默认”值 我使用的是Windows 10,我正

因此,我有一个PDF,它是通过打开模板,修改某些字段的值,然后保存而动态创建的

作品:

  • 如果我在Chrome中打开文件,我就有了正确的值
  • 如果我将文件保存到磁盘并用AdobeReaderDC(或其他任何名称)打开它,我会得到正确的值
不起作用:

  • 当我在IE 10中打开文档时,它会在Edge中打开,并显示字段的“默认”值
  • 当我将文件保存到磁盘并用IE打开它时,它会显示“默认”值
  • 当我使用“PDF阅读器-文档查看器和管理器”打开文件时,它会显示“默认”值
我使用的是Windows 10,我正在使用的应用程序是在ASP.Net中完成的。无论我返回FileStreamResult、FilePathResult还是File,其工作方式都是相同的

我现在很确定问题出在微软的产品上,而不是我的代码

你知道为什么微软的产品不能正确打开我的PDF吗?它们必须以某种特定的方式被压扁吗

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

  • 这些文档是使用PdfSharp创建的
  • 它们的字段被动态替换为值(即,[MyFieldA]被替换为“ActualValueA”)
  • 用实际值替换合并字段后,使用
    file.WriteAllText(fileName,fileText)写入文件
    其中fileText是通过
    File.ReadAllText(fileTemplateName)获得的
不稳定字段的比较图像:
因此我找到了问题的解决方案,看来这可能是双重的

我相信其中的一个难题是用于创建PDF的memorystream。它是在一个内部作用域中声明的,用于PdfReader.Open调用,该调用在分配给一个在外部作用域中声明的变量时使用,然后该作用域结束,而该变量仍在使用中。我将memorystream声明移动到外部作用域中,var声明位于外部作用域中,以便它们位于相同的作用域中。此外,memorystream没有使用
memorystream.Close()
调用或使用(var memorystream=new memorystream()){}
块在
中关闭。因此,我添加了对
memoryStream.Close()的调用

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


由于这两个部分是同时完成的,我不能肯定它们在这方面起到了同等的作用,但这是为使值开始正确显示而进行的唯一两项更改。我的直觉是,问题在于默认的显示值和边缘。

你必须包括更多关于如何创建文档以及如何填充IE中似乎缺失的数据的详细信息。@WiktorZychla我在文章底部添加了更多信息。我第一次深入研究了文档创建过程,并将在发现信息时不断更新。一位同事提出的一个理论是,文档模板是在Acrobat 5中创建的,IE10/Edge无法充分处理,因为另一位同事对Acrobat 6中创建的模板(与IE10/Edge兼容)有问题。请分享一份PDF样本,以说明分析问题。由于保密协议,我不能这样做。我将给出一张PDF的屏幕截图though@mkl-我添加了一点差异。这与使用不同程序打开时显示的文件在同一个文件中的位置完全相同。关于第一个可能的原因:由于您的问题中没有显示可用的代码,因此没有人能够在不疯狂猜测的情况下给出该方向的提示。关于第二个可能的原因:除了普通字段值之外,PDF表单字段还可以提供外观流(关于布局字段内容)。然后,查看器可以选择显示预先布局的外观流,或者使用普通字段值从头创建一个外观流。这些外观流可能是您的默认显示值。注意,有些预览器无法从头开始创建预览。这是很有可能的。我以前没有在这个领域工作过,所以盲目地遇到了这个bug。我只是碰巧是这群人中的“臭虫斗牛犬”,在问题解决之前,他们不会放过它。