背景:我在 Windows Server 2016 上用 C# .NET 创建了一个自定义 Windows 服务,用于从各种输入数据文件加载数据。它会轮询收件箱文件夹中的文件并将其数据加载到我们的数据库中。多年来一直运行良好。
对于 PDF 文件,我们使用 iTextSharp 从表单中抓取 XML,直到它被弃用。我们购买了 itext7 的商业许可证,并通过 NuGet 更新到 itext7 版本 7.2.4。
代码通过 VS 调试器运行没有问题,或者作为服务器上以管理员身份执行的可执行文件运行,但作为 Windows 服务,在尝试创建 PdfDocument 对象时会出现以下错误:
“iText.Commons.Actions.EventManager”的类型初始值设定项引发异常。 在 iText.Kernel.Pdf.PdfDocument.Open(PdfVersion newPdfVersion)
代码非常简单,我确保执行服务的帐户具有文件和文件夹访问权限。我什至将该帐户添加到本地管理员组中,但仍然不起作用。我的代码是:
pdfFileToLoad 是一个字符串,其值类似于“C:\PDFFolder\pdfFileName.pdf” xmlFile 是一个字符串,其值类似于“C:\XMLFolder\pdfFileName.xml”
PdfReader pdfFileToRead = new PdfReader(pdfFileToLoad);
PdfDocument pdfDoc = new PdfDocument(pdfFileToRead);
PdfAcroForm form = PdfAcroForm.GetAcroForm(pdfDoc, true);
XfaForm xfa = form.GetXfaForm();
// Get XFA data under datasets/data.
XElement node = xfa.GetDatasetsNode();
IEnumerable<XNode> list = node.Nodes();
foreach (XNode item in list)
{
if (item is XElement && "data".Equals(((XElement)item).Name.LocalName))
{
node = (XElement)item;
break;
}
}
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
XmlWriter writer = XmlWriter.Create(xmlFile, settings);
node.WriteTo(writer);
writer.Close();
pdfDoc.Close();
它在 PdfDocument pdfDoc = new PdfDocument(pdfFileToRead) 处收到异常错误。
我尝试将运行服务的帐户添加到本地管理员组。我已经在互联网上搜索过,但无法在 itext7 中看到有关此错误的扩展文档。我还查找了有关从 iext7 获取这些异常详细信息以传递给我的错误处理的文档和/或示例,但 API 文档是基本的。
还有其他人遇到过这个问题或者有关于提取 itext7 异常消息的信息吗?
有谁知道 itext7 在 Windows Server 2016 上需要什么权限才能正确执行?我确实知道 Windows Server 2016 确实具有更多安全功能,尤其是在执行 Windows 服务时。
我也有同样的问题。有解决办法吗?