如何在 iTextSharp v5 中添加 link 以在没有 Win10 安全警告的情况下打开文件
How to add a link to open a file without a Win10 security warning in iTextSharp v5
使用 iTextSharp 创建新的 PDF 文件时,我可以使用 .SetAnchor 方法在文档中创建 link,单击时导航到指定的 URL,例如
anchor.SetAnchor(...some URL...);
然而,我真正想要的只是在本地 Win10 机器上打开或执行指定文件,如果我只指定文件而不是 URL,这也有效,例如
anchor.SetAnchor("notepad.exe");
问题是我必须使用 iTextSharp 创建 PDF 文件的许多版本,每个版本本身都有不同的文件名,link 打开的文件也有不同的名称。虽然我没有问题让它工作,但令人烦恼的是,每当我在新版本中单击 link 时,我都会从 Windows 弹出一个“安全警告”,想知道“连接”是否应该被允许。
因为警告中提到了“连接”,我感觉可能有一种类似 SetAnchor 的方法会产生一个 link 专门用于打开文件而不是 URLs 并且它将每次更改 link 代表的文件名时不会导致安全警告。如果是这样,它是什么?如果不是,是否有其他合理的方法来避免安全警告?这些都在我的本地机器上使用,所以我知道 PDF 或打开的文件没有安全问题。
我找到了 iTextSharp 和 iText7 的答案,如下所示。我怀疑如果我真的了解更多的话 iText7 版本可以被简化,但我目前只使用 iTextSharp 并且对它也不是很了解。两个版本都可以在不受 Windows 10 security:
干扰的情况下打开文件
iTextSharp:
Paragraph p = new Paragraph(
new Chunk("Click to open")
.SetAction(
new PdfAction("C:/temp/Doc1.pdf", "")
)
);
document.Add(p);
iText7:
PdfDocument pdfDoc = new PdfDocument(writer);
Document document = new Document(pdfDoc);
document.SetFontProvider(new BasicFontProvider());
PdfFont font = PdfFontFactory.CreateFont();
PdfFileSpec spec = PdfFileSpec.CreateExternalFileSpec(pdfDoc, "C:/temp/Doc1.pdf");
PdfAction action = PdfAction.CreateLaunch(spec);
Paragraph p = new Paragraph(new Link("Click to open", action));
document.Add(p);
使用 iTextSharp 创建新的 PDF 文件时,我可以使用 .SetAnchor 方法在文档中创建 link,单击时导航到指定的 URL,例如
anchor.SetAnchor(...some URL...);
然而,我真正想要的只是在本地 Win10 机器上打开或执行指定文件,如果我只指定文件而不是 URL,这也有效,例如
anchor.SetAnchor("notepad.exe");
问题是我必须使用 iTextSharp 创建 PDF 文件的许多版本,每个版本本身都有不同的文件名,link 打开的文件也有不同的名称。虽然我没有问题让它工作,但令人烦恼的是,每当我在新版本中单击 link 时,我都会从 Windows 弹出一个“安全警告”,想知道“连接”是否应该被允许。
因为警告中提到了“连接”,我感觉可能有一种类似 SetAnchor 的方法会产生一个 link 专门用于打开文件而不是 URLs 并且它将每次更改 link 代表的文件名时不会导致安全警告。如果是这样,它是什么?如果不是,是否有其他合理的方法来避免安全警告?这些都在我的本地机器上使用,所以我知道 PDF 或打开的文件没有安全问题。
我找到了 iTextSharp 和 iText7 的答案,如下所示。我怀疑如果我真的了解更多的话 iText7 版本可以被简化,但我目前只使用 iTextSharp 并且对它也不是很了解。两个版本都可以在不受 Windows 10 security:
干扰的情况下打开文件iTextSharp:
Paragraph p = new Paragraph(
new Chunk("Click to open")
.SetAction(
new PdfAction("C:/temp/Doc1.pdf", "")
)
);
document.Add(p);
iText7:
PdfDocument pdfDoc = new PdfDocument(writer);
Document document = new Document(pdfDoc);
document.SetFontProvider(new BasicFontProvider());
PdfFont font = PdfFontFactory.CreateFont();
PdfFileSpec spec = PdfFileSpec.CreateExternalFileSpec(pdfDoc, "C:/temp/Doc1.pdf");
PdfAction action = PdfAction.CreateLaunch(spec);
Paragraph p = new Paragraph(new Link("Click to open", action));
document.Add(p);