7
votes

Suivi du code dans un fichier PDF ou PostScript

Y a-t-il un moyen de suivre quand un PDF est ouvert? Peut-être en incorporant un script dans le PDF lui-même?

J'ai vu la question ci-dessous et je suppose que la réponse est "non" pour JavaScript, mais je me demande si cela est possible du tout.

Insérer un code de code de suivi de Google Analytics dans le fichier PDF < / p>


0 commentaires

3 Réponses :


2
votes

Le problème avec les technologies comme celle-ci est qu'ils ne peuvent jamais être absolus.

Premièrement, il s'agit d'une violation de sécurité pour déclencher un événement externe et les écrivains de logiciel ne le soutiendraient probablement pas (ou, au moins i espoir non).

Deuxièmement, sa personne à charge des choses comme le réseau. Que se passe-t-il lorsque quelqu'un le télécharge et le lit ensuite en mode hors connexion dans un avion, par exemple? Vous n'obtiendrez pas la notification.

Troisième, il existe plusieurs façons de lire des fichiers PDF. Certaines personnes les lisent avec des lecteurs, vous n'avez probablement pas entendu parler de (ma préférée est une application Linux que j'aime bien mieux que la navigation d'Adobe).

Donc, même si vous pourrait le faire (et je dirais que vous ne devriez pas, mais cela ne répond pas à votre question), la vraie réponse est "non" mais même si le logiciel a soutenu , il ne serait toujours pas fiable en premier lieu.


3 commentaires

De toute évidence, il existe des préoccupations de confidentialité et de fiabilité avec tout type de suivi. Je ne débats pas ça. Mais pourquoi dites-vous "la vraie réponse est" non "" Ne les plus récents PDFS a-t-il du contenu dynamique? Je pense qu'ils ont une sorte de capacités de script pouvant supporter quelque chose comme ça.


Tous les lecteurs ne prennent pas en charge tout le contenu possible des fichiers PDF. Comme WES a souligné, juste parce que vous pouvez faire quelque chose avec Acrobat ne signifie pas que cela fonctionnera dans Foxit, Ghostscript, MUPDF, etc., etc.


Et le "non" est parce que, bien que j'admettais que je ne suis pas un vrai pdf ou un expert en PS, le soutien actuel de la langue PDF fait pas apporte un soutien à la langue pour interroger des entités externes (c.-à-d. Vous ne pouvez pas dire «Go Saisissez cette image de pixel à partir de ce site Web distant afin que je puisse vous suivre). Les PDF sont, par conçu, censés être autonomes.



16
votes

La norme PDF comprend la prise en charge de JavaScript mais @Wes Hardaker a souligné, tous les lecteurs PDF ne le supportent pas. Cependant, parfois, certains sont meilleurs qu'aucun.

Voici officiel d'Adobe Acrobat JavaScript Guide de script . Ce qui est probablement le plus intéressant pour vous est l'objet doc code> qui a une méthode appelée getturl () code>. Pour l'utiliser, vous venez d'appeler: P>

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();
        }
    }
}


1 commentaires

Wow, c'est la réponse que j'espérais mais je ne m'attendais pas. Merci!



0
votes

Étant donné que PostScript est un langage de programmation entièrement capable, il ne devrait y avoir aucune raison de ne pas être possible de suivre quand il est visualisé / exécuté.

Je devrais penser que la partie difficile à trouver les bibliothèques (ou en faisant les fonctions vous-même) de faire la partie de réseau de la journalisation.

Une note rapide, cependant, sur la fonctionnalité comme celle-ci, il est probablement préférable que vous rendez les choses toujours accessibles à l'échec; La raison en laquelle les gens ont tendance à se fâcher lorsque leurs médias deviennent soudainement indisponibles, ce qui serait exactement ce qui se passerait si vous avez forcé la résiliation à l'échec. (Pouvez-vous garantir que votre domaine de journalisation ne changera jamais? Qu'il sera toujours disponible? Que se passe-t-il dans le cas où Internet n'est pas disponible dans la situation de l'utilisateur?)


2 commentaires

La question concerne le PDF et votre réponse concerne PostScript. PostScript fonctionne-t-il réellement dans un PDF? Avez-vous une source avec plus d'informations sur leur relation?


(a) le titre mentionne explicitement PostScript, et (b) la relation entre PostScript et PDF est essentiellement que le PDF est [le résultat de] PS fonctionne par son traitement / programme; Ce fil sur Stackexchange est vraiment informatif: tex.stackexchange.com/questions/217511/...