如何通过解析JavaScript文件将数百个DJVU文件转换为TIFF文件?

时间:2014-03-07 10:57:11

标签: javascript jquery html tiff djvu

我有一个巨大的数量的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,它允许我将压缩显式设置为none。我不想在不问我的情况下使用应用LZW压缩的工具。

(好奇的是,HEK是“Härads-Ekonomisk-Karta”的缩写。“härad”是瑞典以前使用过的一种地理区域。它与英国使用的“Hundred”相当和其他英语国家。)


的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>

我故意在这里遗漏了身体标签。这太过分了,线条在水平方向上永久延伸。

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>\
\
";

1 个答案:

答案 0 :(得分:1)

您将无法使用Javascript执行此操作,因为javascript没有对文件系统的固有访问权。

选项然后:

  • Node.js:你可以站起来一个简单的nodejs webserver,它允许你访问文件系统,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. 按排序顺序进行每次转换,并将其命名为相应的值。
  4. 截至目前,您可以轻松编写一个脚本来转换所有文件,例如:

    112_87_10_0.djvu ==> 112_87_10_0.tif
    

    但是,除非您可以为重命名架构提供一些额外的规则集,否则您的其余问题仍无法解决。

    修改

    经过进一步审核后,我确实看到您提供了一些有关获取命名架构的信息。我将再详细介绍一下并修改我的答案。如果可以的话,请从你的问题中删除所有不相关的信息,特别是start和index.html位,这个代码中没有任何重要的问题,只是用来模糊重要的部分。