【发布时间】:2018-12-21 20:05:09
【问题描述】:
在 Acrobat 中打开文档时可以正常工作,但在 Google Chrome 等 Web 浏览器中打开相同的 PDF 文档时无法正常工作。 this.closeDoc() 没有在浏览器中执行。
字符串路径2 = @"D:\test\input.pdf"; 字符串输出 = @"D:\test\output.pdf";
if (File.Exists(path2))
{
iText.Kernel.Pdf.PdfWriter writer = new iText.Kernel.Pdf.PdfWriter(output);
iText.Kernel.Pdf.PdfDocument pdfDocument = new iText.Kernel.Pdf.PdfDocument(new iText.Kernel.Pdf.PdfReader(path2) ,writer);
pdfDocument.AddNewPage();
String js = "var rightNow = new Date();"
+ "var endDate = new Date('2017-07-13');"
+ "if(rightNow.getTime() > endDate){"
+ "app.alert('This Document has expired, please contact us for a new one.',1);"
+ "this.closeDoc();}"
+ "else{}";
pdfDocument.GetCatalog().SetOpenAction(iText.Kernel.Pdf.Action.PdfAction.CreateJavaScript(js));
pdfDocument.Close();
}
【问题讨论】:
-
“在 Acrobat 中打开文档时效果很好” - 任何具有基本技术背景的人都知道,他只需要在 Acrobat 中停用 JavaScript 即可绕过该机制。
-
@mkl 你能建议我如何保护它或在到期日后使 pdf 损坏
-
一种选择是使用专业的 DRM 解决方案。如果您不希望这样,毕竟它要花钱,您可以尝试将处于不可读状态的 PDF 发送给用户(例如,用一些固定图像覆盖每个页面,或者将每个页面的媒体框移到使用区域之外,或类似的东西)并且只有在成功检查的情况下(您上面的
else {}分支)才能使 PDF 可读(通过迭代页面并删除覆盖图像或更正媒体框)。这当然意味着没有启用 JavaScript 的 PDF 查看器的用户根本无法阅读 PDF…… -
这样的机制显然也可以被规避,但这需要非法用户做更多的工作。
-
@mkl 如果你能提供一些很棒的例子,那听起来不错
标签: javascript c# itext adobe spire.doc