所以我有一个通过打开模板,修改某些字段的值然后保存的动态创建的PDF。
使用:
不起作用:
我使用的是Windows 10,我正在使用的应用程序是在ASP.Net中完成的。无论我返回FileStreamResult,FilePathResult还是File。
,它的工作方式都是一样的我现在非常确定问题是微软的产品而不是我的代码。
知道为什么Microsoft产品无法正确打开我的PDF?他们是否必须以某种特定的方式扁平化?
编辑(评论中要求的更多信息):
File.WriteAllText(fileName,fileText);
编写文件,其中fileText通过File.ReadAllText(fileTemplateName);
答案 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。