如何在 PDF 中用白色 space 替换所有“\t”(制表符)
How to substitude all "\t" (tab characters) with white space in a PDF
您好,我正在尝试使用 Calibre 将一本关于编程的 pdf 书籍转换为 mobi 格式。
我面临的问题是转换后的版本中的代码块完全失去了缩进。
我设法使用正则表达式正确缩进了使用空格缩进的行。我这样做是将每两个空格转换为两个不间断空格。
不幸的是,某些代码块使用制表符缩进,因此正则表达式在这些情况下不起作用。
我开始意识到,在从 pdf 到 mobi 的转换过程中,有一个中间步骤,pdf 被转换为 hmtl,并且标签信息丢失,因为没有生成特殊标签来携带此信息.
所以我认为最好的解决方案是编辑 pdf 本身并将所有制表符 (\t) 替换为两个空格 (\s\s)。这样我之前提到的正则表达式将适用于所有代码块引用并且代码将正确缩进。
但我不知道该用哪个软件有这种替换pdf元素的功能。
我怀疑 'tabs' 是否作为标签包含在 PDF 中。 'tab' 字符(ASCII 中的 0x04)在 PDF 中没有特殊意义,特别是它不会移动当前点,它只是绘制一个字形。因此,如果您执行 (A\tB),您将在呈现 PDF 时看到 'AB'。或者 'A*B' 其中 * 是您没有想到的其他字符(通常是正方形)
所以你实际上可能必须将当前点移动运算符转换为白色 space 绘图没有可以自动化的现实方法,因为没有工具可以判断移动在哪里 'tab' 并且这是一个重新定位。
因此您需要手动完成。
这里的挑战是页面内容流可能会被压缩,因此您要做的第一件事就是解压缩 PDF。有许多工具可以为您完成此操作,MuPDF 是一个,我认为 pdftk 是另一个。
然后您需要找到要插入的位置 space,这可能具有挑战性,因为字体可能会重新编码为 ASCII 以外的其他内容,因此可能很难识别正确的位置。一旦你这样做了,你可以将你想要的 space(s) 插入到文本字符串中,再次记住正在使用的字体可能会被重新编码和子集。这意味着 space 可能不是 0x20,实际上字体甚至可能不包含 space 字形。当然,你需要删除重新定位当前点的操作。
最后,修改完内容后,请记住PDF是二进制格式,外部参照table包含文件中每个元素的位置。如果您编辑了该文件,您可能会更改一个或多个元素的长度,这将更改任何后续元素的偏移量,因此您需要重新计算这些元素并更新外部参照 table.
我怀疑您会发现修改从 PDF 到 HTML 的转换或修改 HTML 比尝试更改 PDF 文件更容易。
您好,我正在尝试使用 Calibre 将一本关于编程的 pdf 书籍转换为 mobi 格式。
我面临的问题是转换后的版本中的代码块完全失去了缩进。
我设法使用正则表达式正确缩进了使用空格缩进的行。我这样做是将每两个空格转换为两个不间断空格。
不幸的是,某些代码块使用制表符缩进,因此正则表达式在这些情况下不起作用。
我开始意识到,在从 pdf 到 mobi 的转换过程中,有一个中间步骤,pdf 被转换为 hmtl,并且标签信息丢失,因为没有生成特殊标签来携带此信息.
所以我认为最好的解决方案是编辑 pdf 本身并将所有制表符 (\t) 替换为两个空格 (\s\s)。这样我之前提到的正则表达式将适用于所有代码块引用并且代码将正确缩进。
但我不知道该用哪个软件有这种替换pdf元素的功能。
我怀疑 'tabs' 是否作为标签包含在 PDF 中。 'tab' 字符(ASCII 中的 0x04)在 PDF 中没有特殊意义,特别是它不会移动当前点,它只是绘制一个字形。因此,如果您执行 (A\tB),您将在呈现 PDF 时看到 'AB'。或者 'A*B' 其中 * 是您没有想到的其他字符(通常是正方形)
所以你实际上可能必须将当前点移动运算符转换为白色 space 绘图没有可以自动化的现实方法,因为没有工具可以判断移动在哪里 'tab' 并且这是一个重新定位。
因此您需要手动完成。
这里的挑战是页面内容流可能会被压缩,因此您要做的第一件事就是解压缩 PDF。有许多工具可以为您完成此操作,MuPDF 是一个,我认为 pdftk 是另一个。
然后您需要找到要插入的位置 space,这可能具有挑战性,因为字体可能会重新编码为 ASCII 以外的其他内容,因此可能很难识别正确的位置。一旦你这样做了,你可以将你想要的 space(s) 插入到文本字符串中,再次记住正在使用的字体可能会被重新编码和子集。这意味着 space 可能不是 0x20,实际上字体甚至可能不包含 space 字形。当然,你需要删除重新定位当前点的操作。
最后,修改完内容后,请记住PDF是二进制格式,外部参照table包含文件中每个元素的位置。如果您编辑了该文件,您可能会更改一个或多个元素的长度,这将更改任何后续元素的偏移量,因此您需要重新计算这些元素并更新外部参照 table.
我怀疑您会发现修改从 PDF 到 HTML 的转换或修改 HTML 比尝试更改 PDF 文件更容易。