使用此 OCR 保留代码将 djvu 转换为 pdf 时出现问题

使用此 OCR 保留代码将 djvu 转换为 pdf 时出现问题

我想将 djvu 转换为 pdf,同时保留 OCR。这描述了如何执行此操作,但我得到了一个空白的 html 文件。

在 /home/steven/Documents/djvu2pdf/1/ 中,djvu2hocr -p 1 Intro.djvu给我:

Converting 'Intro.djvu':
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta name="ocr-system" content="djvu2hocr 0.7.9" />
  <meta name="ocr-capabilities" content="ocr_carea ocr_page ocr_par ocrx_block ocrx_line ocrx_word" />
  <title>DjVu hidden text layer</title>
</head>
<body>
*** [1-11711] Failed to open 'Intro.djvu': No such file or directory.
*** (ByteStream.cpp:693)
*** 'DJVU::GUTF8String DJVU::ByteStream::Stdio::init(const DJVU::GURL&, const char*)'


</body>
</html>
Traceback (most recent call last):
  File "/usr/bin/djvu2hocr", line 7, in <module>
    _.main(sys.argv)
  File "/usr/share/ocrodjvu/lib/cli/djvu2hocr.py", line 325, in main
    djvused.wait()
  File "/usr/share/ocrodjvu/lib/ipc.py", line 114, in wait
    raise CalledProcessError(return_code, self.__command)
subprocess.CalledProcessError: Command 'djvused' returned non-zero exit status 10

导致出现一个空白的 html 文件,所以当我运行

sed 's/ocrx/ocr/g' > pg1.html

它只是无限循环运行。

我还有一个辅助程序,叫做 djvu2pdf,我在http://0x2a.at/s/projects/djvu2pdf, 但

djvu2pdf Intro.djvu

给我

-e Error: /usr/bin/djvu2pdf: File 'Intro.djvu' not found

OCR 文件可以正常打开。

答案1

我修复了文件 /home/steven/Documents/djvu2pdf/1/Intro.djvu。结果发现我的所有 djvu 文件都没有扩展名,但 Linux 还是可以打开它们。

使用单页文档进行测试

我先跑cd /home/steven/Documents/djvu2pdf/1/

然后跑:djvu2hocr -p 1 1.djvu

DjVu hidden text layer - Page #1 Traceback (most recent call last): File "/usr/bin/djvu2hocr", line 7, in _.main(sys.argv) File "/usr/share/ocrodjvu/lib/cli/djvu2hocr.py", line 323, in main process_page(page_zone, options) File "/usr/share/ocrodjvu/lib/cli/djvu2hocr.py", line 263, in process_page result = process_zone(None, page_text, last=True, options=options) File "/usr/share/ocrodjvu/lib/cli/djvu2hocr.py", line 238, in process_zone parent.append(child) AttributeError: 'NoneType' object has no attribute 'append'

命令: djvu2hocr -p 1 1.djvu > tmp.html做了同样的事情 Converting '1.djvu': - Page #1 Traceback (most recent call last): File "/usr/bin/djvu2hocr", line 7, in _.main(sys.argv) File "/usr/share/ocrodjvu/lib/cli/djvu2hocr.py", line 323, in main process_page(page_zone, options) File "/usr/share/ocrodjvu/lib/cli/djvu2hocr.py", line 263, in process_page result = process_zone(None, page_text, last=True, options=options) File "/usr/share/ocrodjvu/lib/cli/djvu2hocr.py", line 238, in process_zone parent.append(child) AttributeError: 'NoneType' object has no attribute 'append'

sed 's/ocrx/ocr/g' tmp.html > pg1.html

我得到了一个 html 和 tmp.html 说这个

http://pastebin.com/APwUPwk4

不得不把它贴在那里,因为出于某种荒谬的原因,这个网站不允许我发布该代码,使用 html、代码、预标签都不起作用。另外,管道到底是什么,更确切地说,我在那篇文章中哪里错过了它?我是 Linux 终端的新手,只是通过谷歌搜索学习

答案2

首先,尝试使用文件的完整路径运行该程序。运行以下命令以确保文件确实存在

file /home/steven/Documents/djvu2pdf/1/Intro.djvu

然后尝试

djvu2hocr -p 1 /home/steven/Documents/djvu2pdf/1/Intro.djvu

其次,以下命令本身存在问题:

sed 's/ocrx/ocr/g' > pg1.html

这不会“无限循环”运行,而只会等待标准输入(在您的情况下是键盘),因为您没有使用参数或作为管道的一部分运行 sed。sed 不知道您要处理哪个文件。

您引用的页面明确指定您应该将其作为管道的一部分运行。或者,您可以按如下方式执行此操作:

 djvu2hocr -p 10 /home/steven/Documents/djvu2pdf/1/Intro.djvu > tmp.html
 sed 's/ocrx/ocr/g' tmp.html > pg10.html

相关内容