スマートボードノートブックファイルのバッチ変換


2

SMART *.notebook(Smartboardのプレゼンテーションを作成するためのファイル形式)を一括でPDFに変換する方法はありますか?

PDFに変換するこのようなファイルは約1000個あり、Smartboardで配布されるソフトウェアでは、pdfに1つずつしかエクスポートできません。

回答:


3

以下のために、簡単なノートブック、あなたはこの自分を行う可能性があります。

.notebook ファイルは、ノートブック内のページファイルをナビゲートできるようにするマニフェスト(電子書籍の背骨のように使用される)を備えた単なる.ZIPファイルです。

また、ページファイルはSVG形式のファイルであるため、Linuxで簡単変換できますが、Windows用のツールもあります(オンラインツールでさえ- 数千のファイルに使用することはわかりませんが、ToSではおそらく禁止されています) 。

Linuxでテストするには(Windowsでも動作するはずですが、CygwinとPerlをインストールする必要があります)、私は試しました:

$ 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

マニフェストファイルで、私は見つけます:

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

svg2pdfを実行すると、両方のページを取得してPDFに正しく変換できます。

この時点で、pdftkを簡単に実行することで、2つのページを持つ1つのPDFを取得できました。

これをすべてコンバーターにラップするには、マニフェストからSVGページを簡単に調整するために少し調整する必要があります(CPANではforce install App::Xml_grep2、テストエラーが原因で偽に見えたため)。

# 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 )

SmartTech Expressで作成したいくつかのノートブックで試してみましたが、動作します。他の保証は一切できません。

スクリプトとして保存すると、上記は.notebookファイルでいっぱいの大きなディレクトリを再帰的に変換できます。

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

...最後に、すべての.notebookファイルの側で(まあ、そこだろう必要があります ...)も.notebook.pdf同じ名前のファイルやコンテンツを変換する(スクリプトがを取り除くために変更することができ.notebookの一部名前の、つまり、ユーティリティを使用してに変換Sample.notebookします)。Sample.pdfbasename


また、*。svgファイルで遊ぶことも考えています。しかし、それらを開くと、すべての書式設定が失われ、書式設定されていない黒いテキストで空白の画面のみが表示されます。
mipe34

それは、使用するビューアによって異なります。svg2pdfは動作しますが、svgtools、svgtopam、Firefoxの内部SVGビューアは動作しないことに気付きました。ノートブックのいずれかを提供できる場合は、試してみてください。
LSerni

これが私が望んでいたものに最も近い答えだからです。ただし、あなたが言ったように、「シンプルな」ノートブックにのみ使用できます。私は見つかりませんでしたが、おそらくそのようなコンバータはありません。ノートブック内に隠されたフラッシュをロードし(ページを開いた後にGUIがフラッシュをロードすることさえできます)、それをpdfに変換します-私の要件の1つでもあります...
mipe34

ノートブックにFlashがありますか?ただし、その場合はPDFに変換できません。PDFはそれをサポートしていません、私は知っています。どこかで「複雑な」ノートブックが入手できる場合、それらを使用して自分のソリューションをテストしたいと思います。
LSerni

PDFはフラッシュをサポートしていませんが、インタラクティブである必要はありません。スクリーンショットで十分です。ページに何かが表示されます(空白の画面だけではありません)。オンラインでサンプルを見つけることができません-いくつか準備する必要があります。
mipe34

2

言及したソフトウェアはありませんが、コマンドライン引数を受け入れる場合、またはコンバーター/エクスポーターが別のプログラムである場合、バッチファイルを使用して変換を行うことができます。

たとえばconverter.exe <input file> <output file>、コマンドラインに入力することでコンバーター/エクスポーターをアクティブにできる場合、次のバッチファイルは*.notebook、同じフォルダー内のすべてのファイルを変換します。

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

1行目で<insert path here>は、コンバーターへのフルパスに変更する必要があります。たとえば、C:\Program Files\something\converter.exe

ソフトウェアのグラフィカルインターフェイスを使用してのみエクスポートを実行できる場合は、AutoHotKeyなどのプログラムを使用して、クリックを実行するスクリプトを作成できます。最初に、変換するすべてのファイルを新しいフォルダーにコピーします。スクリプトは次のようにする必要があります(ショートカットキーは単なる例であり、使用しているソフトウェアによって異なる可能性があります)。

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

はい、これが私がやりたい方法です。それにもかかわらず、私はそのようなコンソールコンバータのいずれにも気付いていません。
mipe34

その場合、AutoHotKeyなどのプログラムでスクリプトを作成して、クリックとキーの押下を自動的に行う必要があります。上記の私の編集を参照してください。
デュークニューケム

このような種類のスクリプトを記述するのは非常に困難です-さまざまなファイルを開くスクリプトを想像することはできません(次のファイルについては、以下の約
10ピクセル

最初のファイルはスクリプトの最後で削除されるため、次のファイルは次の反復で最初のファイルになります。したがって、変換されていないファイルがなくなるまで、すべてのファイルに対してこのスクリプトをループするだけです。私は以前にこのようなスクリプトをたくさん書きました。慣れるには多少の努力が必要ですが、多くの状況で非常に役立ちます。
デュークニューケム

1

Powershellスクリプト。inkscapeおよびpdftk実行可能ファイルのパスの更新、およびXMLStarletのインストールにはchocolatey(windowsパッケージマネージャー)のインストールが必要です。

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

私よりも賢い人なら、おそらくXMLStarletを使用する代わりに、PowershellからXML属性をネイティブに取得する方法を理解できるでしょう。


0

前のコメントは、スクリプトとコマンドライン引数について何かを述べました。SmartBoardサイトを調べてみると、この.pdfが見つかりました。コマンドラインオプションがドキュメントに隠れている可能性がありますが、そのソフトウェアまたは製品がないため、私は助けられません。ここでの私の推奨事項は、徹底的に検索することです。

スクリーンショットをいくつか見てきましたが、.notebookは.pdfに直接変換されないようです。これにより、それらを変換するために必要な(または望ましい)前処理があります。スクリプトまたはオートクリッカースクリプトにより、多くの使用できない.pdfファイルが作成される場合があります。


私はこのドキュメントを読みましたが、cmd行をpdfに変換することについては何もありません。おそらくそのようなコンバータはありません。スマートボードソフトウェアでは、GUIを使用して手動でPDFに変換することしかできません。
mipe34

0

lserniが提供するソリューションには多くの問題がありました。たとえば、どこにもxml_grep2またはsvg2pdfが見つかりませんでした。たぶん、更新が必要だったのかもしれません。ここに私の解決策があります:

#!/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

私が使用した複数のファイルに対して実行するには:

find . -name "*.notebook" -exec convert.sh {} \;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.