问题标签 [calibre]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2359 浏览

macos - How do you use any2mobi command line tool (part of Calibre) to make mobi files from HTML?

I am on MAC OS X 10.5.5. I installed Calibre, a tool for converting e-book files from one format to another. It has a GUI as well as command line tools. I am trying to run the command line tool "any2mobi" to convert HTML files to MOBI pocket format or Kindle AZW format, with a TOC.

I get the error "-bash: any2mobi: command not found". Clearly, any2mobi is not in my path. Where is it? I tried searching but came up empty.

I installed version 0.6.0b6 of Calibre.

0 投票
1 回答
799 浏览

android - 修改python USB设备驱动只使用vendor_id和product_id,不包括BCD

我正在尝试修改 calibre(一个电子书管理程序)的 Android 设备驱动程序,以便它仅通过供应商 ID 和产品 ID 识别设备,并且不包括 BCD。

该驱动程序是一个相当简单的 python 插件,目前设置为使用所有三个数字,但显然,当 Android 设备使用自定义 Android 构建(即 Nexus One 的 CyanogenMod)时,它会更改 BCD,因此 calibre 停止识别它。

当前代码看起来像这样,带有一个简单的供应商 ID 列表,然后允许产品 ID 和 BCD 与它们一起使用:

我特别想改变的行是:

也就是说,用于识别 Nexus One 的行。我的 N1,运行 CyanogenMod 5.0.5,有 BCD 0x226,而不是仅仅将它添加到列表中,我更愿意从识别过程中消除 BCD,以便任何具有供应商 id 0x18d1 和产品 id 0x4e11 的设备或0x4e12 将被识别。自定义 Android rom 的变化不足以让细节变得重要。

语法似乎需要括号中的 BCD。

我如何编辑它以使其匹配该字段中的任何内容?

0 投票
5 回答
8135 浏览

pdf - 批量转换和裁剪 postscript 为 pdf

我所知道的几乎不足以在这个数字世界中生存。

我有许多一页的附言文件(图形/图像),我希望将其转换为 pdf 并自动裁剪为一个窄框。我现在在 Windows 上(我也使用 linux,所以不要犹豫发布 linux 代码)

我过去通过结合 Ghostscript gswin32c.exe 和 Calibre pdfmanipulate.exe 取得了成功。这可能是这里许多人熟悉的方法。

但由于多种原因,这种方法充满了问题。

在我“升级”到 64 位 gswin64c.exe 后出现了一个问题。32 位版本的 gswin32c.exe 仍然可以在我的系统上运行,所以我不能抱怨太多。

在处理可能编码不正确的 postscript 文件时出现了另一个问题。似乎至少有两个问题,但我不确定哪个(如果有的话)是负责任的,或者两者都是。一个问题是边界框线,例如 %%BoundingBox: 135 179 484 587 并不总是放在从顶部开始的第二行。我知道这可能是一个问题。另一个问题是,上面的边界框对应于 Ghostscript 中的“纵向”方向,但裁剪遵循“横向”方向。我还没有发现的另一个问题是,对于某些文件,裁剪似乎很随机。

所以这是我的 32 位方法(适用于高质量文件),然后是 64 位适配,但它不起作用(如果我理解https 的话,可能是因为它在我的机器上调用了一些 pypdf 脚本,而不是 calibre 提供的修补脚本: //bugs.launchpad.net/ubuntu/+source/calibre/+bug/800551http://www.mobileread.com/forums/archive/index.php/t-103097.html,但我只是猜测并且无论如何都不知道解决方法):

上述 32 位方法适用于高质量文件,例如由 PSTricks 或 Maple 的标准 2D 绘图驱动程序生成的 Postscript level 3,但不适用于较旧的文件,例如。由 Maple 的经典情节驱动程序制作的后记 2 级(如果有的话)。

我找到了一些此类文件的解决方法。它包括使用 (MiKTeX) LaTeX 发行版中的 epstopdf。它适用于那些 Maple 经典文件。不幸的是,它不适用于我几年前使用 PSTricks 和其他软件(如 Matlab)生成的其他一些后记文件。

所以我需要进行一些转换并选择那些有效的。我想知道你是否有一些建议可以让我的生活更轻松。如果我能解决 BoundingBox 和 Portrait/Landscape 问题,我应该很满意。

我提前感谢您的任何建议。一个linux建议是可以接受的。我的偏好将是一个解决方案,它可能能够通过一次“返回”键来处理文件的多样性。

当然,我正在寻找一种无损类型的裁剪,它仅包括解释边界框,而不是将其转换为(可能)质量较低的 pdf。

编辑:我忘了说。当我将 gswin32c/pdfmanipulate 应用于高质量的 3 级 postscript 文件时,名为“bounding”的文件会填充以下信息:

%%BoundingBox:34 128 567 667 %%HiResBoundingBox:34.364390 128.875004 566.054069 666.071980

在上面的示例中,文件已经被裁剪了很多。注意 %%BoundingBox 和 %%HiResBoundingBox 之间的接近程度

但应用于低质量级别 2(或声称是)postscript 文件,“边界”文件填充:

%%BoundingBox:189 137 574 467 %%HiResBoundingBox:189.485994 137.843996 573.299983 466.668478

但边界框真的应该是 %%BoundingBox: 135 179 484 587 上面的(135 179 484 587)是后记文件本身提供的边界框(我通过复制粘贴移动到第二行)它是与 Ghostview/Ghostscript 在纵向时解释的边界框一致。

但是它被Ghostscript完全忽略了......

我不知道 189 137 574 467 来自哪里——这是非常错误的......

编辑 2. 我想澄清几点,以回应肯的问题:

嗨,肯,谢谢你的回复,

对不起,如果我的问题不清楚——不过你似乎已经理解了它的要点——让我依次回答你的问题:

我不确定您为什么使用 2 个应用程序,应该可以仅使用 Ghostscript 执行整个转换。

我没有找到使用 Ghostscript 完成所有操作的方法,所以我使用了另一种方法。我在这里找到了 Ghostscript/Calibrate 建议,http://www.mobileread.com/forums/archive/index.php/t-72885.html和其他地方,尝试过它并且直到最近才起作用。

我并不是说不可能用 Ghostscript 做到这一切,我只是说我没有找到办法。

“我“升级”到 64 位 gswin64c.exe 后出现了一个问题”您还没有说问题是什么,您是否将其报告为错误?如果人们不报告错误,他们就不会得到修复......

我在这里给出了描述问题和错误报告的链接:https : //bugs.launchpad.net/ubuntu/+source/calibre/+bug/800551,http ://www.mobileread.com/forums/archive/ index.php/t-103097.html,我的问题是完全相同的。

您似乎在 PostScript 程序和评论之间有些混淆。PostScript 程序中任何以'%' 开头的行都是注释,对程序的运行没有影响。所以 BoundingBox 评论根本不会做任何事情。

如果可以的话,我请求不同。取一个后记文件,删除 %%Bounding Box,保存并在 Ghostview 中打开它。Ghostview 会抛出错误消息,然后在不使用边界框信息的情况下显示它,例如被大量空白包围的图形,而不是被边界框紧紧包围。所以,是的,这条评论至少在 Ghostview 中起到了作用。删除 %%Bounding Box 后,如果您随后使用 Calibre/pdfmanipulate 裁剪 pdf,则在使用 %%Bounding Box 的情况下会错误地裁剪它。所以这个“注释”在显示和裁剪的上下文中非常有用。

请注意,不需要它是文件的第二行.....

它由 Adob​​e 推荐。引用adobe,

“第二个必需的 DSC 标头注释提供有关 EPS 文件大小的信息,并且必须存在,以便包含应用程序可以正确转换和剪辑 EPS 文件。这是边界框注释。”

http://partners.adobe.com/public/developer/en/ps/5002.EPSF_Spec.pdf

Adobe 说“必须”。就我个人而言,我不在乎它是否必须,只要我可以从我的 eps 中生成正确界定的 pdf。

一般来说,Ghostscript 会忽略 DSC 注释,但是如果您将 ProcessDSC 设置为 true,那么它将非常有限地使用它(主要是 BoundingBox 注释来设置页面大小)。

使用 pdfmanipulate 它可以在正确裁剪的 pdf 和不正确裁剪的 pdf 之间产生所有差异。

继续。您说您使用的是 LaTeX ps2pdf,如果您已经有 PostScript 文件,您可以将其发送到 Ghostscript 以转换为 PDF。我不清楚在这种情况下您到底在使用 Ghostscript 做什么,只是为了找到页面的真正边界框?

是的。

我不清楚你所说的“无损”裁剪是什么意思,如果你裁剪内容,你必须清楚地丢失一些东西,即使它只是空白......

我的意思是我不希望裁剪过程“光栅化”(或者不管它叫什么,你会知道这个术语)整个图像。被裁剪的文件部分对我没有用,所以损失不大。裁剪中的文件部分应与原始文件具有相同的质量。这是一般的想法。

你可以在这里找到关于这个的评论,这是我找到有用信息的地方, http://www.charlietanksley.net/philtex/reading-pdfs-on-portables/

如果您知道要裁剪的大小,则可以很容易地一次性完成转换,

不,我不知道大小,这就是为什么我要花这么多时间让软件为我计算它,这显然不是一件简单的事情,因为 Ghostscript 和 epstopdf 并不总是就最佳裁剪达成一致,一个得到它适用于某些文件但不适用于其他文件,另一个适用于其他文件但不适用于某些文件...

如果您不知道大小,那么您可以只使用 Ghostscript 通过首先提取 BoundingBox 来完成 2 遍。这将为您提供 4 个数字,即边界框的左下角和右上角(如果我没记错的话)。然后,您创建一个“翻译”PostScript 操作来向下和向左移动页面的内容(使其从左下角 0,0 开始)。您还可以创建一个页面设备请求来设置页面大小,该大小由宽度 = 右 - 左和高度 = 上 - 下给出。将原始文件连同 PostScript 运算符一起输入到 Ghostscript 并选择 pdfwrite 设备,您将获得一个 PDF 文件。

如果您有一个方便的批处理文件示例,那就太好了。我已经看到了几个基于 pdfwrite 的示例,但我尝试过的都没有。魔鬼在细节中。

就边界框而言,它可能是一个错误,或者可能是文件做了一个标记,可能在外部位置使用了白色墨水。在这种情况下,边界框设备仍会将其视为页面内容的一部分。您可能可以看到它不是,但设备不能。考虑一下页面是否首先填充了深色背景,然后使用白色墨水勾勒出内容。

这些文件都是用 Matlab、Maple、PSTricks 等软件创建的,在 %%Bounding Box 给出的区域之外不太可能(但显然并非不可能)出现不可见的白色标记。

在许多情况下,%%Bounding Box 注释包含所有需要的信息,我想要 Ghostscript 或 Caliber 或 pdfwrite 或任何使用该信息的人。

如果不进一步了解您想要做什么,并且最好查看一个或多个有问题的文件,我就无法提供全面的解决方案。

那很容易,我怎样才能发布一个后记文件供您查看?它是 420 KB。

谢谢肯,希望我们能找到一个可行的解决方案。

编辑 3. 我已经确定了问题的很大一部分。

我的后记文件有以下边界框,非常接近最佳裁剪:%%BoundingBox: 135 179 484 587

当我运行 Ghostscript gswin64c/gswin32c 来计算边界框时,即

我得到:

%%BoundingBox:145 189 475 574 %%HiResBoundingBox:145.331574 189.485994 474.155986 573.299983

当我运行 ps2pdf 后跟 Ghostscript gswin64c 时,即

我得到以下边界框:

%%BoundingBox:189 137 574 467 %%HiResBoundingBox:189.395994 137.843996 573.299983 466.668478

所以问题是使用 ps2pdf 从 ps 到 pdf 的转换引入了边界框信息的变化,从而导致不正确的裁剪。所以用其他东西代替 ps2pdf ,比如 eps2pdf 解决了这里的问题。当然还有其他解决方案。正如 Ken 和 luser droog 所建议的,特别有价值的是仅涉及 Ghostcript 的解决方案。他们非常有价值(并且优于我的快速修复)的建议如下。像这样的东西已经奏效:

0 投票
2 回答
3607 浏览

epub - Kindlegen 的 MOBI 输出中的内部链接/锚点问题

我有一个结构良好的 EPUB 文件,并尝试使用 KindleGen 生成一个 mobi 文件... EPUB 充满了脚注/注释,它们是内部链接/锚点。所有的格式都很好,HTML 很好……但是 Kindlegen 创建的 MOBI 文件令人窒息:

  • Kindle Fire - 一切都好
  • Kindle - 链接不起作用
  • Kindle DX - 链接失效
  • Kindle iPhone - 链接在 Previewer 中有效,但在我的 iPhone 上无效
  • Kindle iPad - 链接失效

使用 Calibre 进行转换,链接没有问题。

我们使用的代码如下:

注意链接,来自文本内部:

脚注回注的代码是:

我试着把锚标签拉出来,所以:

但这没有用。

有什么想法吗?建议?

0 投票
1 回答
1336 浏览

build - 如何为自定义编译器编写 waf 文件?

我厌倦了在 make 中查找魔法符号并决定尝试waf

我正在尝试使用 calibre 制作电子书,我想创建一个 wscript,它接收一个文件,运行一个包含该文件的一些参数的程序,并产生一个输出。仅当输入文件比输出文件新时才应构建 Waf。

在make中,我会写一个像这样的makefile:

其中 % 是文件基本名称的魔术符号,$ 是输出文件名 (basename.epub) 的符号。

我可以打电话make soverflow.epub,它会在 soverflow.recipe 上运行 ebook-convert。如果 .recipe 自上次构建以来没有更改,则它不会做任何事情。

我怎样才能在 waf 中做类似的事情?

(为什么是 waf?因为它使用了一种我已经知道的真实语言。如果这在 scons 中真的很容易使用,那也是一个很好的答案。)

0 投票
1 回答
438 浏览

python - Python,Calibre,从 URL 链接打开 exe

我希望能够从 Calibre 程序内部打开一个 .exe。 http://calibre-ebook.com/(用 python 编码的开源代码)

目前,一个详细信息窗口将显示一个用户定义的 URL,它将在默认浏览器中打开,我所追求的是某种方式来接收该 url,所以我可以打开一个 exe 文件。

或者从 Calibre 中打开 exe 文件的任何方式,即从其中一个条目,可能是批处理文件支持或其他东西

不知道这是否可能、容易或难以做到,但如果有人能指出我需要寻找的方向,我将不胜感激。

(IT Pro,但没有编程经验)

0 投票
3 回答
1503 浏览

python - 如何使用正则表达式替换一定数量的空格?

我正在使用 Calibre 将 PDF 转换为 MOBI,但它无法解释空格缩进的代码块。这些块包含很多空间,但数量不同。有些行甚至缩进了 31 个空格。

Calibre 允许 3 个正则表达式在转换之前在书中进行搜索和替换。

这是我尝试过的。

用。。。来代替:

问题是,它只替换了其中一个空格。我希望将它们全部替换为相同数量的 .

我也尝试过第一组的懒惰版本等。

这是正则表达式不足的情况之一吗?我认为这个正则表达式引擎是 python 标准。

0 投票
1 回答
371 浏览

javascript - Javascript使管理我的Kindle删除匹配的项目?

我有一个 kindle 并使用Calibre发送文件。因为我启用了个人文档存档(并且不想禁用它),亚马逊将我所有的新闻项目都存储在存档中。这些无关的项目使我很难找到我想要存档的书籍。

我在这里找到了下面的代码,将所有项目作为书签删除。我如何过滤它以仅删除其中一些?我对Javascript不是很熟悉,但是学习很有趣,对吧?

0 投票
1 回答
358 浏览

python - 来自单个标签或类别的 Google Reader API 列表提要

我正在编写一个 python 脚本(实际上是一个 Calibre 食谱)来检索我的阅读列表中特定标签或类别下的所有项目。我能够从该类别中检索整个项目,但我想逐个提要检索项目,因此我需要一种方法来列出在特定类别下提交的提要(就像您单击 Google 阅读器 UI 时所做的那样在文件夹上)。我找不到执行此操作的 API。有什么建议么?谢谢。

0 投票
1 回答
4204 浏览

python - 从网站获取图像

我尝试改进calibre的配方,并用当前报纸的封面图片替换默认的封面图片。

要走的路与get_cover_url链接)有关。

有两个问题:

  1. 封面图片的 URL 每天都在变化。
  2. 我对python几乎一无所知。

我希望有这样的解决方案(在伪代码中):

有没有办法在 python*) 中实现这一点(仅使用 python 标准库)?

*) Calibre-Recipes 似乎是 python 代码

[编辑] 这是我的一个朋友提供的解决方案: