Conversion par lots des fichiers de cahier smartboard

2

Existe-t-il un moyen de convertir un *.notebookfichier SMART (format de fichier pour créer des présentations pour Smartboard) au format PDF?

J'ai environ mille de ces fichiers à convertir en pdf et le logiciel distribué avec Smartboard permet uniquement d'exporter au format pdf un par un.

mipe34
la source

Réponses:

3

Pour les cahiers simples , vous pouvez le faire vous-même.

.notebook Les fichiers sont simplement des fichiers .ZIP avec un manifeste (utilisé comme une épine dans les livres électroniques) qui vous permettent de naviguer dans les fichiers de page du cahier.

Et les fichiers de page sont au format SVG, vous pouvez donc les convertir facilement sous Linux, mais il existe aussi des outils pour Windows (et même des outils en ligne - je ne sais pas comment les utiliser pour des milliers de fichiers, le ToS l'interdit probablement) .

Pour tester, sous Linux ( cela devrait fonctionner aussi sous Windows, mais cela nécessite l'installation de Cygwin avec Perl ), j'ai essayé:

$ unzip -l Untitled.notebook
Archive:  Untitled.notebook
  Length      Date    Time    Name
---------  ---------- -----   ----
    11715  2013-08-21 14:28   page1377095283484.svg
     1251  2013-08-21 14:28   imsmanifest.xml
     7137  2013-08-21 14:28   page0.svg
---------                     -------
    20103                     3 files

Dans le fichier manifeste, je trouve:

<resource adlcp:scormType="asset" href="page0.svg" identifier="pages" type="webcontent">
  <file href="page0.svg"/>
  <file href="page1377095283484.svg"/>
</resource>

En exécutant svg2pdf , les deux pages peuvent être converties correctement au format PDF.

À ce stade, une simple exécution de pdftk m'a permis d'obtenir un seul fichier PDF avec les deux pages.

Pour envelopper tout cela dans un convertisseur, il faut un peu peaufiner les pages SVG du manifeste (dans CPAN, je devais le faire à force install App::Xml_grep2cause d'une erreur de test qui paraissait fallacieuse).

# Temporary files named from 1 to N. It is unlikely that
# any legitimate files exist with such names, but this has
# better be done in a temporary directory, just in case.

unzip $1

if [ ! -r imsmanifest.xml ]; then
    echo Sorry, this notebook seems to have no manifest.
    exit 2
fi

# Get page numbers
XPATH="//*[@identifier='pages']/*[local-name()='file']/@href"
PAGES=`xml_grep2 -t "$XPATH" imsmanifest.xml`

# Remove manifest, we need it no more.
rm imsmanifest.xml
N=0
for page in $PAGES; do
    # Create 
    N=$[ $N + 1 ]
    svg2pdf $page $N
    # Remove SVG page, we need it no more.
    rm $page
done
pdftk $( seq 1 $N ) output $1.pdf
# Now remove temporary files
rm $( seq 1 $N )

Je l'ai essayé avec quelques ordinateurs portables créés avec SmartTech Express , et cela fonctionne. Je ne peux donner aucune autre garantie.

Une fois enregistrés en tant que script, les éléments ci-dessus peuvent convertir de manière récursive un répertoire volumineux contenant des fichiers .notebook:

find . -name "*.notebook" -exec /path/to/converter \{\}\;

... à la fin, à côté de chaque fichier .notebook, il y aura (enfin, il devrait ...) un .notebook.pdffichier du même nom et du contenu converti (le script peut être modifié pour supprimer la partie .notebook du nom, c’est-à-dire convertir Sample.notebooken Sample.pdfutilisant l’ basenameutilitaire).

LSerni
la source
J'ai aussi une idée pour jouer avec ces fichiers * .svg. Mais lorsque je les ouvre, il perd tout le formatage, affichant uniquement l'écran vide avec du texte noir non formaté.
mipe34
Cela dépend du lecteur que vous utilisez. Bien que svg2pdf fonctionne, j'ai remarqué que svgtools, svgtopam et le visualiseur SVG interne de Firefox ne le faisaient pas. Si vous pouvez fournir l'un des cahiers, je peux essayer de le vérifier.
LSerni
J'ai marqué cette réponse, parce que c'est la réponse la plus proche de ce que je voulais. Cependant, comme vous l'avez dit, il ne peut être utilisé que pour de "simples" cahiers. Je n'ai pas trouvé et il n'y a probablement pas de convertisseur de ce type, qui pourrait aussi charger le flash caché à l'intérieur du cahier (même l'interface graphique charge le flash après avoir ouvert la page) et le convertir en pdf - ce qui est également l'une de mes exigences ...
mipe34
Il y a du Flash dans un cahier? Mais dans ce cas, vous ne pouvez pas le convertir en PDF; PDF ne le supporte pas, à ma connaissance. Si des cahiers "compliqués" sont disponibles quelque part, j'aimerais tester ma solution avec ceux-ci.
LSerni
Le format PDF ne prend pas en charge le flash, cependant, il ne doit pas nécessairement être interactif - la capture d'écran est suffisante pour voir que quelque chose se trouve sur la page (pas seulement l'écran blanc). Je ne trouve aucun exemple en ligne - je vais devoir en préparer.
mipe34
2

Je n'ai pas le logiciel que vous avez mentionné, mais s'il accepte les arguments en ligne de commande ou si le convertisseur / exportateur est un programme séparé, vous pouvez effectuer la conversion à l'aide d'un fichier de traitement par lots.

Par exemple, si le convertisseur / exportateur peut être activé en tapant converter.exe <input file> <output file>dans la ligne de commande, le fichier de commandes suivant convertira tous les *.notebookfichiers du même dossier que lui-même:

set PATH_TO_CONVERTER=<insert path here>
for %%a in ("*.notebook") do "%PATH_TO_CONVERTER%" "%%a" "newfiles\%%~na.pdf"

Dans la ligne 1, vous devez modifier <insert path here>le chemin complet du convertisseur, par exempleC:\Program Files\something\converter.exe

Si l'exportation ne peut être effectuée qu'à l'aide de l'interface graphique du logiciel, vous pouvez écrire un script permettant de cliquer à votre place, à l'aide d'un programme tel que AutoHotKey. Copiez d’abord tous les fichiers que vous voulez convertir. Le script devrait ressembler à ceci (les touches de raccourci ne sont que des exemples, elles sont probablement différentes dans le logiciel que vous utilisez):

Type Ctrl+O      -- Open the file chooser dialog
Wait a few seconds for it to open
Type down arrow  -- Select the first file
Type enter       -- Open the file
Wait a few seconds for it to open
Type Alt+F+X     -- Call the export command
Wait a few seconds for export dialog to open
Type enter       -- Export file
Type Ctrl+W      -- Close the file
Type Ctrl+O      -- Open the file chooser dialog
Wait a few seconds for it to open
Type down arrow  -- Select the first file
Type Del         -- We're done with the first file so delete it
Type Enter       -- Agree to delete
Type Esc         -- Close file chooser
Go back to beginning of script
Duc Nukem
la source
Oui, c'est comme ça que je voudrais le faire. Néanmoins, je ne suis au courant d'aucun de ces convertisseurs de console.
mipe34
Dans ce cas, vous devez écrire un script dans un programme tel que AutoHotKey pour faire automatiquement les clics et les appuis pour vous. Voir mon édition ci-dessus.
Duke Nukem
Il serait très difficile d’écrire ce genre de script - je ne vois pas comment vous écririez comme un script pour ouvrir des milliers de fichiers différents (pour le fichier suivant, vous devez cliquer sur environ 10 pixels ci-dessous, plus tard,
ouvrez
Le premier fichier étant supprimé à la fin du script, le fichier suivant devient le premier fichier à la prochaine itération. Donc, vous venez de boucler ce script pour chaque fichier, jusqu'à ce qu'il ne reste plus de fichiers non convertis. J'ai déjà écrit de nombreux scripts comme celui-ci - ils demandent un certain effort, mais ils sont très utiles dans de nombreuses situations.
Duke Nukem
1

Script Powershell. Nécessite des mises à jour de chemin d'accès pour les exécutables inkscape et pdftk, ainsi que l'installation de chocolatey (gestionnaire de paquets Windows) pour l'installation de XMLStarlet.

function SmartNotebook2PDF
{
    Param($notebookfile)
    $notebasename = (Get-Item $notebookfile).basename
    $zipfile = $notebasename + ".zip"
    Write-Host "Working on $notebookfile"
    Copy-Item $notebookfile -Destination $zipfile
    Expand-Archive $zipfile -Force
        if (!(Test-Path $notebasename\imsmanifest.xml)) {
        Write-Host "sorry, this notebook seems to have no manifest."
        Break
        }
    $pages = xml sel -t -v "//*/_:resource[@identifier='pages']/_:file/@href" $notebasename\imsmanifest.xml
    $n = 0
    ForEach ($page in $pages) {
        $n++
        Write-Host "Found $page, converting"
        inkscape $notebasename\$page --export-area-page --export-pdf=$n
        Remove-Item -path $notebasename\$page
    }
    Write-Host "Exported $n pages to PDF with Inkscape"
    pdftk $(1..$n) output "$notebookfile.pdf"
    Write-Host "PDF created with pdftk at $notebookfile.pdf. Cleaning up."
    del $(1..$n)
    Remove-Item -path $notebasename -recurse
    Remove-Item -path $zipfile
    Write-Host "Done."
}


$files = dir -recurse -ea 0 *.notebook | % FullName

ForEach ($file in $files) {
    SmartNotebook2PDF ($file)
    }

Quelqu'un plus intelligent que moi peut probablement trouver comment extraire nativement les attributs XML de PowerShell au lieu d'utiliser XMLStarlet.

poisson de mer
la source
0

Le commentaire précédent disait quelque chose à propos des scripts et des arguments de ligne de commande. J'ai sondé sur le site SmartBoard et j'ai trouvé ce fichier .pdf . Il est possible qu'une option de ligne de commande soit masquée dans la documentation, mais je n'ai ni ce logiciel ni ce produit, je ne peux donc pas vous aider. Ma recommandation ici est de chercher à fond.

J'ai vu des captures d'écran et il semble que .notebook ne se convertisse pas directement en .pdf; Je veux dire par là qu’un traitement préalable est nécessaire (ou souhaitable) pour les convertir. Un script ou un script à identificateur automatique peut finir par générer de nombreux fichiers .pdf inutilisables.

Doktoro Reichard
la source
J'ai lu ce document, mais rien ne dit de la conversion de la ligne de commande cmd en pdf. Il n'y a probablement pas de tel convertisseur. Le logiciel Smart Board permet uniquement de convertir au format PDF manuellement via une interface graphique.
mipe34
0

J'ai eu beaucoup de problèmes avec la solution fournie par Iserni. Par exemple, je n'ai trouvé nulle part xml_grep2 ou svg2pdf. Peut-être qu'il fallait juste une mise à jour. Voici ma solution:

#!/bin/bash

# Temporary files named from 1 to N. It is unlikely that
# any legitimate files exist with such names, but this has
# better be done in a temporary directory, just in case.

# un-comment for debug messages
# set -x

# always overwrite when unzipping
unzip -o "$1"

if [ ! -r imsmanifest.xml ]; then
  echo Sorry, this notebook seems to have no manifest.
  exit 2
fi

# Get page numbers
XPATH="//*/_:resource[@identifier='pages']/_:file/@href"
PAGES=`xmlstarlet sel -t -v "//*/_:resource[@identifier='pages']/_:file/@href" imsmanifest.xml`

N=0
for page in $PAGES; do
    # Create   
    ((N++))

    inkscape $page --export-area-page --export-pdf=$N
    #inkscape $page --export-area-drawing --export-pdf=$N

    # Remove SVG page, we need it no more.   
    rm $page   
done

pdftk $( seq 1 $N ) output "$1.pdf"

# Now remove temporary files
rm $( seq 1 $N )
rm -rf images annotationmetadata
rm metadata.rdf metadata.xml settings.xml preview.png
rm imsmanifest.xml

Pour l'exécuter pour plusieurs fichiers que j'ai utilisés:

find . -name "*.notebook" -exec convert.sh {} \;
flexus
la source