我想将 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 说这个
不得不把它贴在那里,因为出于某种荒谬的原因,这个网站不允许我发布该代码,使用 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