如何在PDF中使用JavaScript来识别用户的操作系统
How to use JavaScript in PDF to discern a user's operating system
我想构建一个能够检测打开它的用户的操作系统的 PDF,从而根据访问 PDF 的 OS 提供不同的信息。
我在弄清楚我需要用来完成看似简单的任务的 JS 时遇到了很多麻烦。我不能使用它,因为它是一个浏览器变量:
let platform = navigator.platform;
我对 Web 非常了解 JavaScript 并且可以解决大多数问题,但我也无法弄清楚如何在 JS 中为 PDF-JS 使用正确的方法。
所以我的问题是,有人可以告诉我使用 JavaScript 访问 PDF 中的操作系统信息的正确方法吗(因为我认为这是唯一可能的方法)?您能否提供一些代码示例,说明我将如何从文档中包含的代码写入 PDF?
例如,用户打开 PDF 并且他们在 Windows/Mac/Linux 设备上,因此显示 "Welcome from Windows/Mac/Linux"。
更新
这是我想出的使用 Adobe API 的 JS。正如我所问,如何写入正在打开的实际文档,这样我就不必打开二级报告?有一个 Doc 对象,但输出不是简单的文本,它被某种类型的彩色元素包围。
这是有效的报告版本,但打开了一个辅助文档:
var rep = new Report();
rep.size = 1.2;
rep.color = color.black;
switch(app.platform.toString()){
case "WIN":
rep.writeText("Hello from Windows!");
break;
case "MAC":
rep.writeText("Hello from Mac!");
break;
case "UNIX":
rep.writeText("Hello from Unix!");
break;
default:
rep.writeText("Hello from...maybe solaris?");
break;
}
// open created report
var docRep = rep.open("welcome.pdf");
docRep.info.Title = "Custom Title";
这是写入页面但不只是纯文本的版本,它是可编辑的,这是我不想要的:
var fieldName = "welcome";
var inch = 100;
var fvalue = this.addField(fieldName, "text", 0, [inch*4,inch*5,inch*2,inch*3]);
switch(app.platform.toString()){
case "WIN":
fvalue.value = "Hello from Windows!";
break;
case "MAC":
fvalue.value = "Hello from Mac!";
break;
case "UNIX":
fvalue.value = "Hello from Unix!";
break;
default:
fvalue.value = "Hello from...somewhere else";
break;
}
您可以使用 app.platform
:
platform
The platform that the script is currently executing on. There are three valid values:
- WIN
- MAC
- UNIX
参考:https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/js_api_reference.pdf
我想构建一个能够检测打开它的用户的操作系统的 PDF,从而根据访问 PDF 的 OS 提供不同的信息。
我在弄清楚我需要用来完成看似简单的任务的 JS 时遇到了很多麻烦。我不能使用它,因为它是一个浏览器变量:
let platform = navigator.platform;
我对 Web 非常了解 JavaScript 并且可以解决大多数问题,但我也无法弄清楚如何在 JS 中为 PDF-JS 使用正确的方法。
所以我的问题是,有人可以告诉我使用 JavaScript 访问 PDF 中的操作系统信息的正确方法吗(因为我认为这是唯一可能的方法)?您能否提供一些代码示例,说明我将如何从文档中包含的代码写入 PDF?
例如,用户打开 PDF 并且他们在 Windows/Mac/Linux 设备上,因此显示 "Welcome from Windows/Mac/Linux"。
更新
这是我想出的使用 Adobe API 的 JS。正如我所问,如何写入正在打开的实际文档,这样我就不必打开二级报告?有一个 Doc 对象,但输出不是简单的文本,它被某种类型的彩色元素包围。
这是有效的报告版本,但打开了一个辅助文档:
var rep = new Report();
rep.size = 1.2;
rep.color = color.black;
switch(app.platform.toString()){
case "WIN":
rep.writeText("Hello from Windows!");
break;
case "MAC":
rep.writeText("Hello from Mac!");
break;
case "UNIX":
rep.writeText("Hello from Unix!");
break;
default:
rep.writeText("Hello from...maybe solaris?");
break;
}
// open created report
var docRep = rep.open("welcome.pdf");
docRep.info.Title = "Custom Title";
这是写入页面但不只是纯文本的版本,它是可编辑的,这是我不想要的:
var fieldName = "welcome";
var inch = 100;
var fvalue = this.addField(fieldName, "text", 0, [inch*4,inch*5,inch*2,inch*3]);
switch(app.platform.toString()){
case "WIN":
fvalue.value = "Hello from Windows!";
break;
case "MAC":
fvalue.value = "Hello from Mac!";
break;
case "UNIX":
fvalue.value = "Hello from Unix!";
break;
default:
fvalue.value = "Hello from...somewhere else";
break;
}
您可以使用 app.platform
:
platform
The platform that the script is currently executing on. There are three valid values:
- WIN
- MAC
- UNIX
参考:https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/js_api_reference.pdf