Problème de récupération de Formulaire

Tout ce qui concerne le langage TeX/LaTeX et ses variantes. Ce langage est utilisable sur le forum via les balises tex.
[participation réservée aux utilisateurs inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
SB
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 280
Inscription : lundi 07 juillet 2008, 08:15

Problème de récupération de Formulaire

Message non lu par SB »

Bonjour,

j'ai appris à faire des formulaires avec hyperref, cela me permettait de créer des exercices aléatoirisés par élève, et un programme en python fait avec mes petites mains me permettait de récupérer les réponses avec le module pypdf.

J'ai souhaité ces jours derniers intégrer une animation avec animate, dans un exercice aléatoirisé et là bouuh ça ne marche pas comme je le souhaiterais.

Voici un ECM en latex
-> un champ à saisir +une animation (vide)

Code : Tout sélectionner

\documentclass{article}  
  
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{pst-all}
\usepackage{hyperref}
\usepackage{animate}

\begin{document}

\begin{Form}
\begin{itemize}
\item Saisir un chiffre : \TextField[name=Ab0,align=1,height=5mm,width=5mm]{}
\item Ci-dessous une animation :
\begin{center}
\begin{animateinline}[controls={play,step,stop}]{1}
  \multiframe{1}{rA=0.0+10}{%
\begin{pspicture*}(0,0)(9.5,6.3)
%
\end{pspicture*}
}
\end{animateinline}
\end{center}
\end{itemize}
\end{Form}

\end{document}
Le code suivant permet de récupérer un dictionnaire censé intégrer le formulaire du pdf, il nécessite l'installation du module pypdf (faite via pip install pydf, pour ma part)

Code : Tout sélectionner

import pypdf

# récupération du formulaire du pdf rendu
rendu='ECM_00.pdf'
reader = pypdf.PdfReader('./'+rendu)
output=reader.get_fields()
print(output)
- Si l'animation est présente, le champ n'est pas dans le dictionnaire, pour info, ci-dessous ce que je récupère :

Code : Tout sélectionner

{'0.EndRight': {'/T': '0.EndRight', '/FT': '/Btn', '/Ff': 65536, '/AA': {'/D': {'/JS': 'a0_stopLast();', '/S': '/JavaScript'}}, '/_States_': ['/Filter', '/Type', '/Subtype', '/FormType', '/BBox', '/Matrix', '/Resources', '/Off']}, '0.StepRight': {'/T': '0.StepRight', '/FT': '/Btn', '/Ff': 65536, '/AA': {'/D': {'/JS': 'a0_stepFwd();', '/S': '/JavaScript'}}, '/_States_': ['/Filter', '/Type', '/Subtype', '/FormType', '/BBox', '/Matrix', '/Resources', '/Off']}, '0.PlayPauseRight': {'/T': '0.PlayPauseRight', '/FT': '/Btn', '/Ff': 65536, '/AA': {'/D': {'/JS': 'a0_playPauseFwd();', '/S': '/JavaScript'}}, '/_States_': ['/Filter', '/Type', '/Subtype', '/FormType', '/BBox', '/Matrix', '/Resources', '/Off']}, '0.PlayRight': {'/T': '0.PlayRight', '/FT': '/Btn', '/Ff': 65537, '/_States_': ['/Filter', '/Type', '/Subtype', '/FormType', '/BBox', '/Matrix', '/Resources', '/Off']}, '0.PauseRight': {'/T': '0.PauseRight', '/FT': '/Btn', '/Ff': 65537, '/_States_': ['/Filter', '/Type', '/Subtype', '/FormType', '/BBox', '/Matrix', '/Resources', '/Off']}, '0.PlayPauseLeft': {'/T': '0.PlayPauseLeft', '/FT': '/Btn', '/Ff': 65536, '/AA': {'/D': {'/JS': 'a0_playPauseBwd();', '/S': '/JavaScript'}}, '/_States_': ['/Filter', '/Type', '/Subtype', '/FormType', '/BBox', '/Matrix', '/Resources', '/Off']}, '0.PlayLeft': {'/T': '0.PlayLeft', '/FT': '/Btn', '/Ff': 65537, '/_States_': ['/Filter', '/Type', '/Subtype', '/FormType', '/BBox', '/Matrix', '/Resources', '/Off']}, '0.PauseLeft': {'/T': '0.PauseLeft', '/FT': '/Btn', '/Ff': 65537, '/_States_': ['/Filter', '/Type', '/Subtype', '/FormType', '/BBox', '/Matrix', '/Resources', '/Off']}, '0.StepLeft': {'/T': '0.StepLeft', '/FT': '/Btn', '/Ff': 65536, '/AA': {'/D': {'/JS': 'a0_stepBwd();', '/S': '/JavaScript'}}, '/_States_': ['/Filter', '/Type', '/Subtype', '/FormType', '/BBox', '/Matrix', '/Resources', '/Off']}, '0.EndLeft': {'/T': '0.EndLeft', '/FT': '/Btn', '/Ff': 65536, '/AA': {'/D': {'/JS': 'a0_stopFirst();', '/S': '/JavaScript'}}, '/_States_': ['/Filter', '/Type', '/Subtype', '/FormType', '/BBox', '/Matrix', '/Resources', '/Off']}, 'anm0': {'/T': 'anm0', '/FT': '/Btn', '/Ff': 65536, '/AA': {'/PO': {'/JS': IndirectObject(49, 0, 1555790551024), '/S': '/JavaScript'}, '/PI': {'/JS': IndirectObject(50, 0, 1555790551024), '/S': '/JavaScript'}, '/PV': {'/JS': IndirectObject(49, 0, 1555790551024), '/S': '/JavaScript'}, '/D': {'/JS': 'try{if(a0_playing){a0_pause();}}catch(e){}', '/S': '/JavaScript'}, '/U': {'/JS': 'try{if(event.shift)a0_playsRight=!a0_playsRight;var\ndoplay=true;if(a0_idx==0&&a0_playsRight){a0_stopFirst();}if(a0_idx==0&&!a0_playsRight){a0_stopLast();}if(doplay){if(a0_playsRight){a0_playRight();}else{a0_playLeft();}}}catch(e){}', '/S': '/JavaScript'}, '/PC': {'/JS': IndirectObject(50, 0, 1555790551024), '/S': '/JavaScript'}}, '/_States_': ['/Filter', '/Type', '/Subtype', '/FormType', '/BBox', '/Matrix', '/Resources', '/Off']}, '0.0': {'/T': '0.0', '/FT': '/Btn', '/Ff': 65537, '/_States_': ['/Filter', '/Type', '/Subtype', '/FormType', '/BBox', '/Matrix', '/Resources', '/Off']}}
- Si je commente la ligne relative à l'animation , cela fonctionne correctement et j'obtiens :

Code : Tout sélectionner

{'Ab0': {'/T': 'Ab0', '/FT': '/Tx', '/V': '', '/DV': ''}}
Je sais que cette question n'est pas purement latex et vous remercie de votre attention.
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2314
Inscription : samedi 29 décembre 2007, 00:58

Re: Problème de récupération de Formulaire

Message non lu par projetmbc »

Bonjour.

Pourrais-tu partager tes outils, car la venue des automatismes au Bac de 1ière pourrait les rendre très utiles à des collègues ?
SB
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 280
Inscription : lundi 07 juillet 2008, 08:15

Re: Problème de récupération de Formulaire

Message non lu par SB »

Bonjour projetmbc,

ma réponse sera nette peut-etre brusque et je ne développerai pas : non.
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2314
Inscription : samedi 29 décembre 2007, 00:58

Re: Problème de récupération de Formulaire

Message non lu par projetmbc »

Chacun est libre de ses choix, même s'ils ne sont pas libres. Je comprends, car pour certains de mes projets je fais pareil. ;-)
SB
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 280
Inscription : lundi 07 juillet 2008, 08:15

Re: Problème de récupération de Formulaire

Message non lu par SB »

Bonjour,

je souhaiterais savoir s'il y a un moyen, sous windows (11), de fusionner des pdf en ligne de commande.
Je sais qu'il existe par exemple le logiciel SAM (split and merge) mais je souhaiterais le faire de manière automatique et python peut le faire.

Je précise qu'includepdf, commme indiqué dans la doc ne me conviendra pas car les animations sont perdues à l'issue de la fusion.

Merci de votre attention.
MB
Administrateur
Administrateur
Messages : 8117
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: Problème de récupération de Formulaire

Message non lu par MB »

Bonjour, voir éventuellement du côté de MuPDF ?
MB. Rejoignez notre partenaire pCloud et bénéficiez de 10Go de stockage gratuits ou d'une offre premium !
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2314
Inscription : samedi 29 décembre 2007, 00:58

Re: Problème de récupération de Formulaire

Message non lu par projetmbc »

J'utilise https://www.coherentpdf.com/. Simple pour les tâches simples...
SB
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 280
Inscription : lundi 07 juillet 2008, 08:15

Re: Problème de récupération de Formulaire

Message non lu par SB »

Bonjour

merci MB, je viens de tester et je retesterai plus tard car j'ai pas du faire comme il fallait : la fusion fonctionne mais j'ai une erreur lorsque je fais défiler les pages du pdf en sortie.
merci projetmbc, je vais regarder.
SB
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 280
Inscription : lundi 07 juillet 2008, 08:15

Re: Problème de récupération de Formulaire

Message non lu par SB »

Bon, en fait le module pypdff fait très bien l'affaire pour fusionner des pdf.
SB
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 280
Inscription : lundi 07 juillet 2008, 08:15

Re: Problème de récupération de Formulaire

Message non lu par SB »

J'ai posé la question sur un forum dédié à pypdf via GitHub, le fil a été fermé : le problème ne viendrait pas de pypdf.

Je diffère depuis longtemps l'apprentissage du langage Tex, peut-être saurais-je me faire ma propre opinion en l'apprenant. Je pense que non, parce qu'il y a aussi le langage javascript dans l'histoire. Et l'interaction entre les deux c'est en quoi ?

J'ai opté pour le renvoi vers une annexe dans un autre fichier afin de préserver la correction automatisée et la rétro-compatibilité.

Voici ce que cela donne, vous pouvez me répondre en complétant un fichier de type énoncé (suffixe _e.pdf)
Pièces jointes
préambule_3.txt
(357 octets) Téléchargé 127 fois
2GT_02-EXERCICE_EXOMATIK-MATHS-01_e.zip
(166.97 Kio) Téléchargé 109 fois
2GT_02-EXERCICE_EXOMATIK-MATHS-01_a.zip
(193.36 Kio) Téléchargé 118 fois
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2314
Inscription : samedi 29 décembre 2007, 00:58

Re: Problème de récupération de Formulaire

Message non lu par projetmbc »

Le code suivant est une base pour fusionner des PDFs.

Code : Tout sélectionner

from pathlib import Path

import pymupdf

PDFS_DIR  = Path("/chemin/absolu/vers/dossier_des_PDFS_élèves")
PDF_MERGE = PDFS_DIR/ "merged-pdf.pdf"

final_pdf = pymupdf.open()

for pdfpath in PDFS_DIR.glob("*.pdf"):
    if pdfpath == PDF_MERGE:
        continue

    final_pdf.insert_pdf(pymupdf.open(pdfpath))

final_pdf.save(PDF_MERGE)
final_pdf.close()
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2314
Inscription : samedi 29 décembre 2007, 00:58

Re: Problème de récupération de Formulaire

Message non lu par projetmbc »

SB a écrit : lundi 16 juin 2025, 19:24 Je diffère depuis longtemps l'apprentissage du langage Tex, peut-être saurais-je me faire ma propre opinion en l'apprenant. Je pense que non, parce qu'il y a aussi le langage javascript dans l'histoire. Et l'interaction entre les deux c'est en quoi ?
Comment coder un programme basé sur JS et LaTeX sans chercher à en comprendre les rouages de base ?

Le fonctionnement de LaTeX est comparable à celui du langage C : il faut un compilateur du source. Par exemple, TeXLive et MikTeX propose pdflatex, lualatex, xetex... pour compiler des documents. Il faut donc invoquer un tel compilateur.

Certains langages proposent leur compilateur : par exemple, sous Rust, il existe tectonic qui semble actif à ce jour.

Qu'entendez-vous par JS ? Est-ce côté client uniquement, ou aussi côté serveur via nodejs par exemple ?
SB
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 280
Inscription : lundi 07 juillet 2008, 08:15

Re: Problème de récupération de Formulaire

Message non lu par SB »

Merci projetmbc pour votre réponse précédente qui me donne ou en donnera à d'autres une solution avec MuPdf.

On ne peut pas coder si on ne connaît pas les bases, j'en suis convaincu, pour répondre à votre question.

Toutefois les couches qui ont été rajoutées au programme tex initial, plain-Tex me semble-t-il, donnent l'impression de pouvoir des choses que je trouve extraordinaire à base de tex sans faire du tex.
Par ailleurs les bases changent : ce qui pour moi était une variable en BASIC (une boîte avec un nom en algorithmique) ne l'est plus en python.

Je vais humblement reprendre la lecture de l'ouvrage Apprendre à programmer en Tex, qui est une merveille de pédagogie : faire aimer ce qui n'est pas plaisant parce que difficile et non immédiat, dans l'ordre (à partir de la base vers l'algorithmique), avec des exercices qui remuent ma petite tête à chaque fois.
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2314
Inscription : samedi 29 décembre 2007, 00:58

Re: Problème de récupération de Formulaire

Message non lu par projetmbc »

Il existe aussi d'autres paradigmes de codage en LaTeX. Pour ma part, je suis fan de L3, anciennement expl3. On peut aussi coder des logiques complexes via lua en compilant via lualatex.

Quant à Python, il y a différents niveaux d'utilisation qui en font à mes yeux un langage efficace, utile et vite pris en main.