将源ASCII文件转换为JPEG

时间:2009-07-25 19:26:30

标签: html imagemagick jpeg pretty-print

我发布技术书籍,印刷版,PDF版和Kindle / MOBI版,途中还有EPUB。

Kindle不支持等宽字体,这对源代码列表很有用。执行等宽字体的唯一方法是将文本(Java源,HTML,XML等)转换为JPEG图像。更具体地说,由于分页问题,​​给定的输入ASCII文件需要被分成每行约6行的片段,每个片段变成JPEG,因此列表可以跨越屏幕。这是一种皇室痛苦。

我目前的机制包括:

  1. 运行expand以设置一致的2空格标签大小,其中包含...
  2. a2ps,它管道......
  3. 一个小的Perl片段,用于添加"%%LanguageLevel: 3\n"行,用于管道...
  4. ImageMagick的convert,获取(E)PS并使用适当的背景制作JPEG,裁剪为575x148+5+28等。
  5. 那曾经100%的时间都在工作。它现在95%的时间都有效。剩下的时间里,我得到convert: geometry does not contain image个错误,我似乎无法摆脱,部分原因是因为我不明白这个问题是什么。

    在此过程之前,我曾经使用漂亮的打印引擎(source-highlight)从源代码中获取HTML ...但是我唯一能找到的将HTML转换为JPEG的方法就是从嵌入式Gecko引擎中自动屏幕抓取。可靠性发臭,这就是我改用现有机制的原因。

    所以,如果你是你,并且你需要以自动方式将源列表转换为JPEG图像,你会怎么做?奖励积分,如果它提供某种漂亮的打印过程(例如,粗体关键字)!

    或者,如果您知道通常导致convert: geometry does not contain image的原因,那可能会有所帮助。我目前的流程很难看,但如果我能恢复到100%的可靠性,那现在就好了。

    提前致谢!

5 个答案:

答案 0 :(得分:8)

您可以考虑使用html2ps,然后使用imagemagick的转换。

一个想法:如果您的目标(Kindle?)支持PNG,请使用优先于JPEG的文本渲染。

答案 1 :(得分:1)

html2ps是一个优秀的程序 - 我用它来制作一本1300页的书,但是如果你只想要纯文本那就太过分了 - >后记。请考虑使用enscript。

答案 2 :(得分:1)

由于已经回答了将HTML转换为JPG的问题,我将在漂亮的打印机上提出建议。我发现Pygments非常棒。它支持不同的主题,并且几乎可以使用任何语言的词法分析器(它们宣传它甚至突出显示brainfuck)。有一个命令行工具,它可以在大多数Linux发行版上使用。

答案 3 :(得分:0)

您的Linux发行版可能包含pango-view和各种字体。 这适用于我的FC6系统:

pango-view --font=DejaVuLGCSansMono --dpi=200 --output=/tmp/text.jpg -q /tmp/text

您需要识别系统上安装的等宽字体。环顾/usr/share/fonts/

Pango支持Unicode。

在您进行实验时不要使用-q,它会显示在窗口而不是文件中。

答案 4 :(得分:0)

不要使用jpeg。它针对照片进行了优化,并且在文本和线条艺术方面做得非常糟糕。请改用gif或png。我的理解是gif现在没有专利,所以我会用它。