1

膨大な数の DJVU ファイルがあり、それらをすべて TIFF ファイルに変換する必要があります。それらはすべてローカル Web サイトの一部です。ローカルとは、未公開のウェブサイトを意味します。これは地図のように構築されており、JPEG 画像、PNG および GIF を使用して概観図のレイアウトを透明化し、HTML、CSS、およびいくつかの JavaScript (jquery を使用) を使用します。概観図の各部分は、特定の DJVU ファイルに関連付けられています。マップの一部をクリックすると、新しいブラウザ ウィンドウが開き、DJVU ファイルに保存されている実際の地理マップが表示されます。

ここで構造を説明しようと思います。DJVU ファイルの例:

112_87_10_0.djvu

これは、次のように TIFF に変換し、名前を変更する必要があります。

HEK_S044_Vitsand_1883-95.tif

また、同様の名前の新しいフォルダーに保存する必要があります。この例では、フォルダーの名前は次のようになります。

044 Vitsand

したがって、変換されたファイルの検索パスは次のようになります。

044 Vitsand\HEK_S044_Vitsand_1883-95.tif

0 が先行する 44 という数字は単なる数字です。Vitsand はマップ シートの名前であり、スウェーデンの Värmland 郡にある小さな村の名前でもあります。文字 S は、ISO 3166 に準拠した郡の指定です。最後の部分は、マップが作成された年の間隔です。

私の問題は、これを手動で行うには時間がかかることです。また、これを長時間行った後、退屈するだけで簡単にエラーが発生する可能性があります。これをどのように自動化できますか? 私は実際にはプログラマーではありません。実際、私は最近 JavaScript を学び始めたばかりです。誰か私のためにスクリプトを書きたいと思う人はいますか? 少なくとも、使用する言語、方法、ツールなどについて、いくつかの指針を教えてください。

という名前のファイルlan_s.jsを調べてみると、手動でファイルに名前を付けるために使用しているすべての情報が含まれていることがわかります。上記の DJVU ファイルに対応する行は次のようになります。

<area onmouseover=\"tooltip.show('Vitsand', 150);\" onmouseout=\"tooltip.hide();\" href=\"javascript: openMapEx('Värmlands län', 'J112-87-10','Vitsand','112_87_10_0.djvu','1883-95')\" alt=\"Vitsand\" shape=\"poly\" coords=\"144,154,166,155,166,172,143,171\">\

<map name=\"slan_harads\">\これは と の間に格納され</map>\ます。これらのバックスラッシュが何を表しているのかはわかりませんが、冗長なようです。他にも<area>タグがたくさんありますが、ここに投稿するには多すぎます。しかし、それらはすべて同じ構文を持っていますが、マップ シート名が異なり、DJVU ファイル名が異なり、マップの年が異なります。したがって、Vitsand','112_87_10_0.djvu','1883-95ここが最も重要な部分です。このファイルlan_s.jsは、Värmland 郡全体をカバーしています。他の郡と同様のファイルが他にもあります。私はそれらと同じことをする必要があります。

変換処理には Image Magick などのツールを使用したいと考えています。DJVU を TIFF に変換でき、圧縮を明示的になしに設定できます。LZW 圧縮を無断で適用するツールを使用したくありません。

(ちなみに、HEK は「Härads-Ekonomisk-Karta」の略です。「härad」は、スウェーデンで以前使用されていた地理的区分の一種でした。これは、イギリスや他の英語圏の国で使用されている「100」に匹敵します。 )


start.html

<html>
<head>
<title>Welcome!</title>
<style type="text/CSS">

</style>
<script type="text/javascript">
window.onload=timeout;
function timeout(){
window.setTimeout("redirect()",3000)}

function redirect(){
window.location="DATA/index.html"
return}
</script>
</head>
<body>
<img src="DATA/images/new_splash.jpg">
<body onload="timeout()" onClick="redirect()">
</body>
</html>

index.html

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=7; IE=EDGE" />
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>Häradsekonomiska kartan</title>
    <link rel="stylesheet" href="style.css" type="text/css" />

    <script type="text/javascript" src="hek.js"></script>    
    <script type="text/javascript" src="jquery.min.js"></script>
    <script type="text/javascript" src="jquery.maphilight.min.js"></script>
      <script type="text/javascript">$(function() { $('.map').maphilight(); });</script>
      <script language="javascript" src="lan.js"></script>

    <script type="text/javascript" src="lan_bd.js"></script>
    <script type="text/javascript" src="lan_ab.js"></script>
    <script type="text/javascript" src="lan_c.js"></script>
    <script type="text/javascript" src="lan_d.js"></script>
    <script type="text/javascript" src="lan_e.js"></script>
    <script type="text/javascript" src="lan_k.js"></script>
    <script type="text/javascript" src="lan_m.js"></script>
    <script type="text/javascript" src="lan_n.js"></script>
    <script type="text/javascript" src="lan_o.js"></script>
    <script type="text/javascript" src="lan_s.js"></script>
    <script type="text/javascript" src="lan_t.js"></script>
    <script type="text/javascript" src="lan_u.js"></script>
    <script type="text/javascript" src="lan_w.js"></script>
    <script type="text/javascript" src="hlp.js"></script>


    <style type="text/css" media="screen">
      /* local styles here */
    </style>
  </head>

ここでは body タグを意図的に省略しています。やりすぎて、線が永遠に横に伸びていく。

lan_s.js

上記で参照した JavaScript ファイルは次のとおりです。

var lan_s = "\
<map name=\"slan_harads\">\

LINES LINES LINES...

<area onmouseover=\"tooltip.show('Vägsjöfors', 150);\" onmouseout=\"tooltip.hide();\" href=\"javascript: openMapEx('Värmlands län', 'J112-87-15','Vägsjöfors','112_87_15_0.djvu','1883-95')\" alt=\"Vägsjöfors\" shape=\"poly\" coords=\"143,171,166,172,165,189,142,188\">\
<area onmouseover=\"tooltip.show('Vitsand', 150);\" onmouseout=\"tooltip.hide();\" href=\"javascript: openMapEx('Värmlands län', 'J112-87-10','Vitsand','112_87_10_0.djvu','1883-95')\" alt=\"Vitsand\" shape=\"poly\" coords=\"144,154,166,155,166,172,143,171\">\
<area onmouseover=\"tooltip.show('Kärnberget', 150);\" onmouseout=\"tooltip.hide();\" href=\"javascript: openMapEx('Värmlands län', 'J112-87-5','Kärnberget','112_87_5_0.djvu','1883-95')\" alt=\"Kärnberget\" shape=\"poly\" coords=\"145,138,167,139,166,155,144,154\">\

MORE LINES...

</map>\
\
\
<img src=\"ROOT/LAN/images/s.gif\" usemap=\"#slan_harads\" border=0>\
\
";
4

1 に答える 1

1

JavaScript にはファイルシステムへの固有のアクセス権がないため、Javascript だけでこれを行うことはできません。

オプション:

  • Node.js: ファイルシステムにアクセスできる単純な nodejs Web サーバーを立ち上げることができます。nodejs には、画像を処理するためにインストールできる imagemagick モジュールもあります。
  • php: ローカル サーバーに php をセットアップすると、ファイル システムにアクセスできるようになります。また、画像処理用の php 拡張機能も使用できます。
  • Python: Python でこれを実装し、numpy をインポートして、単純なループ スクリプトを記述してすべてのファイルを取得し、魔法を実行するのは簡単です。

目の前の本当の問題は、名前変更スキームが、自動化されたスクリプトを作成するための適切なルールにどのように適合するかを判断することです。

Taking Example of DJVU file: 112_87_10_0.djvu
and convert/rename to: HEK_S044_Vitsand_1883-95.tif

次のロジックを適用できるパターンが必要です。

  1. 変換するディレクトリ内のすべてのファイルを取得します。
  2. いくつかの重要な並べ替え値で並べ替えます (数値の昇順ですか?)
  3. 各変換をソート順に取り、対応する値に名前を付けます。

現時点では、次のようなすべてのファイルを変換するスクリプトを簡単に作成できます。

112_87_10_0.djvu ==> 112_87_10_0.tif

ただし、名前変更スキーマに追加のルールセットを提供できるようになるまで、残りの質問には答えられません。

編集

さらに検討すると、命名スキーマの取得に関していくつかの情報を提供していることがわかります..もう少し見て、私の答えを修正します. ただし、可能であれば、質問から無関係な情報、特に start および index.html ビットをすべて削除してください。そのコードには、質問にとって重要なものは実際には何もなく、単に重要なビットを難読化するのに役立ちます。

于 2014-03-07T13:28:22.650 に答える