将代码跟踪到 PDF 或 PostScript 文件中

2023-11-22

有没有办法跟踪 PDF 的打开时间?也许通过将一些脚本嵌入到 pdf 本身中?

我看到下面的问题,我想对于 javascript 来说答案是“否”,但我想知道这是否可能。

Google Analytics 跟踪代码插入 pdf 文件


PDF 标准包括对 JavaScript 的支持,但正如 @Wes Hardaker 指出的那样,并不是每个 PDF 阅读器都支持它。然而,有时有总比没有好。

这是Adobe官方的Acrobat JavaScript 脚本编写指南。您最感兴趣的可能是doc对象有一个名为的方法getURL()。要使用它,你只需调用:

app.doc.getURL('http://www.google.com/');

将该事件绑定到文档的打开事件,您就拥有了一个跟踪器。我不太熟悉在 Adob​​e Acrobat 中创建事件,但从代码中创建事件非常简单。下面的代码是一个完整的 VS2010 C# WinForms 应用程序,它使用开源库 iTextSharp (5.1.1.0)。它创建一个 PDF 并将 JavaScript 添加到打开事件中。

一些笔记:只要文档访问外部资源,Adobe Acrobat 和 Reader 都会向用户发出警告。大多数其他 PDF 阅读器可能也会这样做。这是非常烦人的,因此仅出于这个原因就不应该这样做。就我个人而言,我不在乎是否有人跟踪我的文档打开情况,我只是不想每次都收到提示。其次,重申一下,此代码适用于 Adob​​e Acrobat 和 Adob​​e Reader,可能至少可以追溯到 V6,但可能适用于其他 PDF 阅读器,也可能不适用于。第三,没有安全的方法来唯一地识别用户。这样做将要求您创建并存储一些相当于“cookie”的内容,这将要求您写入用户的文件系统,这将被认为是不安全的。这意味着您只能检测打开次数,而不能检测唯一打开次数。第四,这可能并非在所有地方都是合法的。某些司法管辖区要求您在跟踪用户时通知他们,并为他们提供一种方式来查看您正在收集哪些信息。

但综上所述,我不能因为不喜欢而不给出答案。

using System;
using System.Text;
using System.Windows.Forms;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //File that we will create
            string OutputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Events.pdf");

            //Standard PDF creation setup
            using (FileStream fs = new FileStream(OutputFile, FileMode.Create, FileAccess.Write, FileShare.None))
            {
                using (Document doc = new Document(PageSize.LETTER))
                {
                    using (PdfWriter writer = PdfWriter.GetInstance(doc, fs))
                    {
                        //Open our document for writing
                        doc.Open();

                        //Create an action that points to the built-in app.doc object and calls the getURL method on it
                        PdfAction act = PdfAction.JavaScript("app.doc.getURL('http://www.google.com/');", writer);

                        //Set that action as the documents open action
                        writer.SetOpenAction(act);

                        //We need to add some content to this PDF to be valid
                        doc.Add(new Paragraph("Hello"));

                        //Close the document
                        doc.Close();
                    }
                }
            }

            this.Close();
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将代码跟踪到 PDF 或 PostScript 文件中 的相关文章

  • 禁用右键单击嵌入元素内的 pdf

    我有一个embed我在其中提供路径的元素pdf文件 我想阻止它被下载 但是当我右键单击该 t 时 我会看到保存和打印 pdf 的选项 我想阻止这些选项 I tried 但它禁用除 PDF 之外的整个页面上的右键单击 一种不受 CORS 或
  • 使用 JavaScript 填写 PDF 表单

    这就是我所拥有的 用户填写很长的 html 表单 用户获取下载不同 pdf 的链接 这是可填写的表格 链接是使用 javascript 生成的 用户单击链接 生成 url 使用用户之前提交的数据 在表单中处理数据并完成字段 这是在表单内使用
  • 无法从 PDFA1-a 格式文档中提取图像

    我正在使用以下代码从 PDFA1 a 格式的 pdf 中提取图像 但我无法获取图像 List
  • 如何使用 PDFMiner 获取 PDF 中文本的位置? [复制]

    这个问题在这里已经有答案了 PDFMiner 的文档说 PDFMiner 允许获取页面中文本的确切位置 但是 我一直无法找到如何做到这一点 PDFMiner 的 文档 相当稀疏 所以我不明白如何做到这一点 您正在寻找bbox每个布局对象上的
  • Android - 使用 Intent 打开 PDF 文档关闭后不保存

    我面临的问题是 当尝试保存对使用此 URI 打开的 PDF 文档的更改时内容 xx xxx xxx fileprovider external Download Sync FileName pdf 我所做的任何更改在关闭文档后都不会保存 但
  • 以编程方式添加数字签名外观?

    我正在以编程方式对我的 PDF 文件进行签名 并且我想将签名外观添加到 PDF 我需要哪些对象才能实现此目的 我知道我必须Annotations BBox and XObject但我真的不知道按什么顺序以及是否需要其他东西 调试此类内容以找
  • 如何打开PDF并阅读?

    我如何打开 PDF 文件并使用 Python 读取其中的一些内容 这种语言是首选 但是 Ruby Perl 或 PHP 也可以 以防它被识别 不仅仅是图像 或报告说如果没有它就不可能光学字符识别 TIA 更新 感谢您的解决方案 我确信其中一
  • 使用 /CCITTFaxDecode 过滤器从 PDF 中提取图像

    我有一个通过扫描软件生成的 pdf 文件 该 pdf 每页有 1 个 TIFF 图像 我想从每个页面中提取 TIFF 图像 我正在使用 iTextSharp 我已经成功找到了图像 并且可以从PdfReader GetStreamBytesR
  • 如何直观地检查 PDF 的结构以对其进行逆向工程? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 如何检查 PDF 文件的结构 用例 我正在尝试以编程方式生成 PDF 文件 使用 iText 我在实现
  • 合并两个 Jasper 报告

    我有一个带有下拉菜单的网络应用程序 用户可以从中选择报告可视化的类型 报告 1 报告 2 报告 3 等 根据所选的报告 Jasper 报告将在服务器上编译并以 PDF 格式的弹出窗口打开 在服务器端 我使用下面的代码以单独的方法实现每个报告
  • ABCPdf 添加文档 javascript

    是否可以使用 ABCPdf 将文档 JavaScript 添加到生成的 PDF 中 如果你的意思是 在文档加载后执行的Javascript 那么看看本文档页面 http www websupergoo com helppdf8net sou
  • 如何使用Python从pdf文件中删除页面?

    我有一些超过 500 页的 pdf 文件 但每个文件中只需要几页 有必要保留文档的标题页 我确切地知道程序应该删除的页数 如何使用安装在 MS Visual Studio 上的 Python 2 7 环境来完成此操作 尝试使用PyPDF2
  • 使用其他应用程序打开 pdf

    我正在应用程序中显示 pdf 文件 我想在 nag bar 上显示 打开方式 选项 显示 iPhone 上安装的可以打开相同 pdf 的应用程序 如果用户选择任何应用程序 例如 pdf 查看器 则应该使用 pdf 查看器应用程序打开 pdf
  • JsPdf 库无法读取 PDF 中的阿拉伯语

    在 pdf 中显示阿拉伯值的代码不起作用 它向我展示了一些我无法理解的奇怪语言 var sm nature name nature1 ar 1 name nature2 ar 2 name nature3 ar 3 name nature4
  • 创建一个带有可填充字段的pdf python

    因此 我的任务是创建一个 pdf 允许最终用户在 pdf 中输入信息并打印或保存它 或者 我尝试创建的 pdf 是从具有可填充字段的 pdf 模板呈现的 我遇到的问题是 每次我使用任何 python 库 pypdf2 pdfrw repor
  • 仅生成一张电子表格的 PDF

    我需要一个只用一张电子表格创建 PDF 的脚本 我目前有一个生成 PDF 的脚本 但它处理整个文件 我无法将这些值复制到另一个文件 因为我需要导出的工作表是带有从另一个工作表中提取的数据的图形 你可以帮帮我吗 谢谢 function myF
  • 自动跟踪算法

    我正在尝试写一个simple跟踪例程来跟踪电影中的某些点 本质上我有一系列 100 帧长的电影 在黑暗背景上显示一些亮点 我每帧有大约 100 150 个点 它们在电影的过程中移动 我想跟踪它们 所以我正在寻找一些有效的 但可能不会过度实施
  • 使用 apache PDF-Box 插入 PDF 附件的缩略图

    我有一个代码可以将文件附加到 PDF 文件 PDDocument doc new PDDocument PDPage page new PDPage doc addPage page read attachment file File fi
  • 在 Swift 中从 UIScrollView 创建 PDF 文件

    我想从 UIScrollView 的内容创建一个 PDF 文件 func createPdfFromView aView UIView saveToDocumentsWithFileName fileName String let pdfD
  • 将文本从文本文件添加到 PDF 文件[重复]

    这个问题在这里已经有答案了 这是我的代码 using FileStream msReport new FileStream pdfPath FileMode Create step 1 using Document pdfDoc new D

随机推荐

  • Rails 7:如何完全删除 Turbo?

    我有一个 Rails 7 应用程序 经过一些开发后 我发现 Turbo Hotwired 产生了太多问题 我不需要它用于此应用程序 有没有办法从现有的 Rails 应用程序中完全删除 Turbo 建议的删除方法是什么 你需要删除gem tu
  • 如何在 JavaScript 中检查 XMLHttpRequest 对象是否支持 W3C 进度事件?

    有没有办法在 JavaScript 中检查是否XMLHttpRequest物体支撑W3C 进展事件 我的意思是这里如果设置onload onprogress onabort onerror等某些处理函数的属性将使这些函数调用这些事件 如所述
  • 在 perl6 语法中放松空白的最佳方法是什么?

    我想要一个在是否存在空格方面宽松的语法 我想匹配 this
  • 创建一个非常简单的链表

    我试图创建一个链接列表只是为了看看我是否可以 但我很难理解它 有谁有一个使用 C 非常简单地实现链表的示例吗 到目前为止我发现的所有例子都有点过头了 链表的核心是一堆链接在一起的节点 因此 您需要从一个简单的 Node 类开始 public
  • Makefile 始终运行目标

    我可能会错过这个 Makefile 中一些非常明显的东西 convert devel bar touch convert init devel foo echo init devel foo mkdir p devel touch deve
  • 读/写音频/视频文件的元数据

    我需要一些帮助来读取 写入音频 视频文件的元数据信息 我进行了很多搜索 但没有找到任何有用的东西 Taglib Sharp 是一个开源库 为读取 写入元数据提供帮助 使用标签库我可以编辑一些值 但不是全部 TagLib File video
  • 如何在 PHP 中显示取决于用户输入的长查询的 MySQL 错误? [复制]

    这个问题在这里已经有答案了 在 PHP 中 我尝试执行一个依赖于用户输入的长 MySQL 查询 但是 我的查询失败并显示以下消息 Query Failed 实际上 每当查询失败时 我都会打印此消息 但我很难查找此失败背后的原因 不幸的是 我
  • 来自存储在表中的值的 SQL 动态 SELECT 语句

    我已经研究了几天了 感觉自己在兜圈子 我有 SQL 的基本知识 但有很多地方我不明白 我有一个表 用于存储数据库中所有其他表的名称和字段 tblFields TableName FieldName BookmarkName Customer
  • 为什么除了没有捕获这个错误?

    我有一个程序可以模拟掷骰子并将它们与图表 一组字符串列表 中的值进行比较 我目前从 TEdit 获取值 如果该框为空 则会引发 EConvertError 该错误应该由我的 Try Except 语句捕获 但事实并非如此 想法和建议 下面的
  • 如何保护项目中的数据库配置文件? [复制]

    这个问题在这里已经有答案了 我已经创建了 php 文件来与数据库服务器建立连接 在这个文件中 我正在使用mysql connect 函数的参数为 我的数据库服务器的主机 用户名和密码 public class DatabaseConnect
  • 在网页上实时显示数据[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我不确定如何用最好的方式来表达它 但我正在寻找一种在网页可用时在网页上显示数据的方法 示例 在网页上显示 IRC 频道消息 当消息发送到 IRC 频
  • 生成正则表达式

    通常在我们的工作中我们会使用正则表达式capture or match运营 但是 可以使用正则表达式 至少手动 来生成与正则表达式匹配的合法句子 当然 有些正则表达式可以匹配无限长的句子 例如表达式 我有一个问题可以通过使用正则表达式句子生
  • IntelliJ:命令行太长。在 SBT 项目中缩短命令行...

    当我尝试运行我的应用程序时 IntelliJ 刚刚开始告诉我 命令行太长 缩短 my app 或应用程序默认配置的命令行 the my app是一个蓝色链接 可通往 编辑配置 窗口 自动选择并突出显示类路径缩短器的下拉列表 我选择了建议的选
  • Android:ListViews 和 CheckBoxes 的问题

    我有一个 ListView 在每个列表项中我有一些 TextView 和一个 CheckBox 当我检查复选框并且 onCheckedChangeListener 触发时 一切都会按预期工作 然而 一旦选中一个复选框 就会随机选中其他复选框
  • .Maui 静态 Web 资源构建问题

    严重性代码 说明 项目文件行抑制状态 未找到 obj Debug net6 0 android android x86 staticwebassets build json 处的错误清单文件 MauiApp3 C Program Files
  • 如何更改 seaborn 对图中绘图元素的 z 顺序

    这是一个片段 用于重现我的示例图像 import pandas as pd import numpy as np import seaborn as sns np random seed 42 df pd DataFrame np rand
  • Environment.UserName 返回应用程序池名称而不是用户名

    下面一行 Environment UserName 在 Visual Studio 的调试模式下 返回我需要的用户身份 然后 当我在 IIS 中设置站点并运行代码时 同一行返回该站点使用的应用程序池的名称 我怎样才能让它仍然返回用户名 尝试
  • 如何在 Spring Webflux / Reactor Netty Web 应用程序中执行阻塞调用

    在我的用例中 我有一个带有 Reactor Netty 的 Spring Webflux 微服务 我有以下依赖项 org springframework boot spring boot starter webflux 2 0 1 发布 o
  • CSS 样式 <音频>

    有没有一种方法可以设置时间线拇指 搜索者 的样式
  • 将代码跟踪到 PDF 或 PostScript 文件中

    有没有办法跟踪 PDF 的打开时间 也许通过将一些脚本嵌入到 pdf 本身中 我看到下面的问题 我想对于 javascript 来说答案是 否 但我想知道这是否可能 Google Analytics 跟踪代码插入 pdf 文件 PDF 标准