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

标签 javascript jquery html tiff djvu

我有大量 DJVU 文件,我需要将它们全部转换为 TIFF 文件。它们都是本地网站的一部分。我所说的本地是指未发布的网站。它的构建就像 map 一样,使用 JPEG 图像、PNG 和 GIF(具有透明度)概述 map 的布局、HTML、CSS 和一些 JavaScript(使用 jquery)。概览图的每个部分都与特定的 DJVU 文件相关联。当您单击 map 的一部分时,将打开一个新的浏览器窗口,并向您显示 DJVU 文件中存储的实际地理 map 。

我将尝试在这里解释一下结构。 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 是 map 的名称,也是瑞典韦姆兰省一个小村庄的名称。根据 ISO 3166,字母 S 是县的名称。最后一部分是制作 map 的年份间隔。

我的问题是,这需要时间手动完成,而且在长时间这样做后我会感到无聊,很容易引入错误。如何实现自动化?我不是一个真正的程序员。事实上我最近才开始学习 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>那里的标签太多,无法在这里发布。但它们都具有相同的语法,但 map 页名称不同,DJVU 文件名不同, map 年份也不同。所以Vitsand','112_87_10_0.djvu','1883-95是这里最重要的部分。文件lan_s.js覆盖整个韦姆兰省。其他县还有类似的其他文件。我需要对它们做同样的事情。

我想使用像 Image Magick 这样的工具来进行转换过程。它可以将 DJVU 转换为 TIFF,并且允许我将压缩显式设置为无。我不想在没有询问我的情况下使用应用 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>\
\
";

最佳答案

您无法仅使用 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 位,该代码中实际上没有任何内容对问题有任何重要性,而只是用来混淆重要的位。

关于javascript - 如何通过解析 JavaScript 文件将数百个 DJVU 文件转换为 TIFF 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22248191/

相关文章:

javascript - 如何在对象构造函数中命名某个对象的 Discord 用户名?

javascript - 使用 jquery 修改 HTML 元素

javascript - 单击时更改 div 的内容(图标)

jquery - 如果通过 jQuery 匹配某个字符串,则获取 "target"属性的值

javascript - 循环浏览系列中的所有产品 |商城

javascript - 当我的脚本正在进行一些繁重的处理时,如何强制浏览器重绘?

javascript - 使用使用 inboxsdk 创建的自定义按钮发送邮件?

javascript - 如何访问 AngularJS 指令元素索引

javascript - 检查是否在 Angular 中注入(inject)了依赖项

javascript - Document.ready 带/不带函数,并将数组添加到现有代码中