1

我有大量DJVU 文件,我需要将它们全部转换为 TIFF 文件。它们都是本地网站的一部分。本地我的意思是未发布的网站。它像地图一样构建,使用具有透明度的 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 是地图的名称,也是瑞典韦姆兰县一个小村庄的名称。根据 ISO 3166,字母 S 是县的名称。最后一部分是地图制作的年份间隔。

我的问题是这需要时间手动完成,而且我很容易在长时间执行此操作后感到厌烦而引入错误。如何实现自动化?我不是一个真正的程序员。事实上,我最近才开始学习 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涵盖整个韦姆兰县。其他县也有其他类似的文件。我需要对那些做同样的事情。

我想使用 Image Magick 之类的工具进行转换过程。它可以将 DJVU 转换为 TIFF,它允许我将压缩显式设置为无。我不想在不问我的情况下使用应用 LZW 压缩的工具。

(对于好奇的人来说,HEK 是“Härads-Ekonomisk-Karta”的缩写。“härad”是以前在瑞典使用的一种地理划分。它与英格兰和其他英语国家使用的“Hundred”相当。 )


开始.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>

索引.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 网络服务器,它允许你访问文件系统,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 回答