Ajoute le plugin Acrobat Pro d'imposition (acrobat-plugin/)

Suite d'imposition professionnelle en Folder-Level Scripts JS (7 modules +
verification de licence Vision), avec un plugin natif hybride optionnel
(WinINet + Registre) pour deplacer la verification de licence en code
compile. Installeur install.bat sur le meme modele que celui du projet
desktop (git portable, detection automatique des dossiers Acrobat).
This commit is contained in:
Jules
2026-06-21 22:16:24 +02:00
parent 202834a794
commit de76c1776c
14 changed files with 2856 additions and 0 deletions

View File

@@ -0,0 +1,109 @@
// PluginMain.cpp
// ---------------------------------------------------------------------------
// Squelette de plugin Acrobat (.api) dont l'unique role est d'appeler
// CDImpLicence::VerifierLicence() au demarrage d'Acrobat et d'ecrire le
// verdict dans le Registre (voir LicenceVerifier.h/.cpp). Ce fichier ne
// touche a aucune fonctionnalite d'imposition : tout le reste de la suite
// reste dans les Folder-Level Scripts JS deja en place
// (/mnt/homeshare/Documents/Projet/imposing/src/), qui lisent ce verdict.
//
// ============================================================================
// AVERTISSEMENT MAJEUR - A LIRE AVANT DE COMPILER
// ============================================================================
// Le code ci-dessous suit le squelette de plugin le plus communement
// documente dans les exemples du Plug-in SDK Acrobat ("HelloWorld" et
// derives), MAIS :
// - cet environnement de developpement n'a ni le SDK Acrobat, ni Windows,
// ni Visual Studio : ce fichier n'a PU ETRE NI COMPILE NI TESTE ;
// - les macros/signatures exactes de handshake (PIHandshake, gExtensionID,
// PIPlugInInit, l'enregistrement de l'export HFT) varient legerement
// entre versions du SDK (et notamment entre les SDK 32 bits historiques
// et les SDK modernes 64 bits) ;
// - il FAUT remplacer ce squelette par le vrai boilerplate fourni dans le
// dossier "Sample Plug-ins" du SDK que vous installez (generalement
// PIMain.cpp dans chaque exemple), et n'y inserer que l'appel a
// CDImpLicence::VerifierLicence() + EcrireVerdictRegistre() dans la
// fonction d'initialisation du plugin.
// La partie fiable et reutilisable telle quelle est LicenceVerifier.cpp/.h
// (Win32 pur, deja validable independamment via TestConsole.cpp).
// ============================================================================
#include "PIHeaders.h" // a fournir par le SDK Acrobat (non present ici)
#include <windows.h>
#include "LicenceVerifier.h"
// Identifiants a definir selon votre enregistrement developpeur Adobe
// (Tools > JavaScript Debugger n'est pas concerne ici : c'est l'ID
// d'extension attribue lors de l'inscription au programme Acrobat
// Solutions/Integration Partner, requis pour distribuer un plugin signe).
extern "C" const char* gExtensionID = "com.copydev.imposingacrobat.licence";
static const wchar_t* SERVEUR_LICENCE = L"https://vision.copydev.fr/api/license.php";
static const wchar_t* PRODUIT = L"imposing-acrobat";
// -----------------------------------------------------------------------
// Verification effectuee une fois, a l'initialisation du plugin (donc une
// fois par session Acrobat). Suffisant pour la semantique de tolerance
// hors-ligne deja en place cote serveur (offline_timeout_hours).
// -----------------------------------------------------------------------
static void EffectuerVerificationLicence() {
// La cle de licence est lue depuis le Registre si deja saisie via le
// dialogue JS "Gerer la licence..." (Imposition-00b-Licence.js stocke
// global.cdImpLicenceCle via global.setPersistent, qui est in fine
// persiste par Acrobat dans son propre stockage de preferences - PAS le
// meme emplacement que celui utilise ici cote natif). Pour partager la
// cle entre JS et natif de facon fiable, le plus simple est de la
// stocker aussi dans le Registre depuis le JS (a ajouter dans
// Imposition-00b-Licence.js : ecrire la cle saisie sous
// HKCU\Software\Copydev\ImposingAcrobat\CleLicence via
// WScript.Shell.RegWrite, en plus de global.setPersistent).
wchar_t cleLicence[256] = { 0 };
HKEY hCle;
if (RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\Copydev\\ImposingAcrobat",
0, KEY_READ, &hCle) == ERROR_SUCCESS) {
DWORD taille = sizeof(cleLicence);
RegQueryValueExW(hCle, L"CleLicence", nullptr, nullptr, (LPBYTE)cleLicence, &taille);
RegCloseKey(hCle);
}
if (wcslen(cleLicence) == 0) {
// Aucune cle connue cote natif : on n'ecrit aucun verdict, le JS
// retombera sur sa propre verification (voir Imposition-00b-Licence.js).
return;
}
std::wstring machineId = CDImpLicence::ObtenirMachineId();
std::wstring hostname = CDImpLicence::ObtenirHostname();
CDImpLicence::ResultatVerification resultat = CDImpLicence::VerifierLicence(
SERVEUR_LICENCE, cleLicence, machineId, hostname, PRODUIT);
if (resultat.succesReseau) {
CDImpLicence::EcrireVerdictRegistre(resultat.valide, resultat.offlineTimeoutHeures);
}
// Si la requete reseau echoue, on n'ecrit rien : le verdict precedent
// (s'il existe, avec son timestamp d'expiration) reste en place et sera
// evalue tel quel par le JS (logique de tolerance hors-ligne).
}
// -----------------------------------------------------------------------
// Point d'entree d'initialisation du plugin. Le nom exact et la signature
// de cette fonction DOIVENT etre repris du boilerplate PIMain.cpp de votre
// SDK (le nom "PluginInit" ci-dessous est indicatif).
// -----------------------------------------------------------------------
ACCB1 ASBool ACCB2 PluginInit(void) {
EffectuerVerificationLicence();
return true; // true = le plugin s'est initialise correctement
}
// -----------------------------------------------------------------------
// Handshake / export table : A REMPLACER INTEGRALEMENT par le contenu du
// boilerplate de votre version du SDK (PIMain.cpp, PIRequir.h, etc.). Conserve
// ici uniquement comme rappel de la structure generale attendue.
// -----------------------------------------------------------------------
/*
ACCB1 ASBool ACCB2 PIHandshake(...) {
// ... initialisation standard du SDK ...
return PluginInit();
}
*/