8

背景

OpenOffice Writer 缺乏链接到 ASCII 文本源文件、应用语法突出显示、将其包装在框架中以及在源文件更改时更新框架内容的能力。但是,OpenOffice Writer 可以链接到图像,并且会在图像更改时自动更新图像。

问题

图像必须是高分辨率(300 dpi 或更高),具有适合白色背景(即打印页面)的语法着色。

问题

如何从源代码文件中自动创建高质量的图像,例如:

  • SQL;
  • PostgreSQL 函数;
  • 爪哇;
  • bash 脚本;和
  • R 和 PL/R?

尝试

大多数尝试都是以下主题的变体:

$ enscript --color -f Courier12 -B -1 --highlight=sql -h -o - source.sql |\
  convert - -trim -border 10 source.png

这种方法存在一些问题:

  1. 缺乏解决方案(使用-resample-density没有提供任何改进)。
  2. 语法高亮不适合白页(可能会改变 enscript 的颜色主题)。
  3. 使用Courier100会产生几个.png文件,这些文件需要拼接在一起。
  4. 意外地将-border 10背景颜色从白色变为浅灰色。

手动解决方案

将源文件转换为 PostScript——完全避免 ImageMagick——然后将它们导入到 GIMP 中将产生所需的结果。不幸的是,该解决方案涉及一些手动工作,而我的 GIMP 批处理编程经验几乎为零。

4

2 回答 2

7

软件要求

以下软件包可用于 Windows 和 Linux 系统,并且是完整、有效的解决方案所必需的:

  • gvim - 用于将语法突出显示的源代码导出到 HTML。
  • moria - 语法高亮的配色方案。
  • wkhtmltopdf - 将 HTML 文档转换为 PDF 或 PostScript (PS) 文档。
  • Ghostscript - 用于将 PS 转换为 PNG。
  • ImageMagick - 用于修剪 PNG 并添加边框。

一般步骤

以下是解决方案的工作原理:

  1. 将源代码加载到可以添加颜色的编辑器中。
  2. 将源代码导出为 HTML 文档(带有嵌入FONT标签)。
  3. 将 HTML 文档转换为 PS 文件。
  4. 将 PS 文件转换为 PNG 文件。
  5. 修剪PNG的白色边框和过分热心的源代码边框。
  6. 在图像周围添加边框,使用与 HTML 文档相同的背景颜色。
  7. 删除临时文件。

安装

将组件安装到以下位置:

  • gvim -C:\Program Files\Vim
  • 莫里亚-C:\Program Files\Vim\vim73\colors
  • wkhtmltopdf -C:\Program Files\wkhtml
  • 鬼脚本-C:\Program Files\gs
  • ImageMagick -C:\Program Files\ImageMagick

注意:ImageMagick 有一个名为 的程序convert.exe,它不能取代 Windowsconvert命令。因此,convert.exe必须在批处理文件中硬编码 to 的完整路径(而不是将 ImageMagick 添加到PATH.

环境变量

添加或更新以下环境变量

  • GS_LIB =C:\Program Files\gs\gs9.00\lib
  • GS_PROG =C:\Program Files\gs\gs9.00\bin\gswin32.exe
  • 路径="C:\Program Files\Vim\vim73";"C:\Program Files\wkhtml";"C:\Program Files\gs\gs9.00\bin"

批处理文件

这是批处理源文本:

@ECHO OFF

ECHO Converting %1 to %1.html ...

gvim -e %1 -c "set nobackup" -c ":colorscheme moria" -c :TOhtml -c wq -c :q

ECHO Converting %1.html to %1.ps ...

wkhtmltopdf --quiet --dpi 1200 %1.html %1.ps

ECHO Converting %1.pdf to %1.png ...
IF EXIST %1.png DEL /q %1.png

gswin32 -q -dBATCH -dNOPAUSE -dSAFER -dNOPROMPT ^
 -sDEVICE=png16m -dDEVICEXRESOLUTION=600 -dDEVICEYRESOLUTION=600 ^
 -dDEVICEWIDTH=4958 -dDEVICEHEIGHT=7017 -dNOPLATFONTS ^
 -dTextAlphaBits=4 -sOutputFile=%1.png %1.ps

ECHO Trimming %1.png ...

move %1.png %1.orig.png

"C:\Program Files\ImageMagick\convert.exe" -trim +repage -trim +repage ^
  -bordercolor "#f0f0f0" -border 25x25 %1.orig.png %1.png

ECHO Removing old files ...
IF EXIST %1.orig.png DEL /q %1.orig.png
IF EXIST %1.html DEL /q %1.html
IF EXIST %1.ps DEL /q %1.ps
于 2010-11-23T03:29:53.783 回答
0

另一种选择是使用catageCodeSnapPolaCodecarbon-now-cli

CodeSnap 和 PolaCode 是 Visual Studio Code 扩展,在命令行中使用它们可能有些困难,但它们使用起来很简单。将它们安装到编辑器中时,请按照说明进行操作。此解决方案适用于 Visual Studio Code 支持的所有操作系统。

如果您使用的是基于 Debian 的 Linux 发行版,并且安装了 Docker,那么您可以使用以下 shell 脚本创建一个 catage Docker 映像:

#!/bin/bash
sudo docker build -t catage:local - <<EOF
FROM buildkite/puppeteer
USER node
ENV NPM_CONFIG_PREFIX=/home/node/.npm-global
ENV PATH=$PATH:/home/node/.npm-global/bin
RUN mkdir /home/node/.npm-global
WORKDIR /home/node/app
RUN npm install -g catage
EOF

同样,可以使用以下脚本创建 carbon-now-cli Docker 映像:

#!/bin/bash
sudo docker build -t carbon-now:local - <<EOF
FROM alekzonder/puppeteer
USER root
RUN apt-get update
RUN apt-get install git -yq
RUN yarn global add carbon-now-cli
USER pptruser
EOF

在 shell 脚本中使用这些 Docker 图像,如下所示,从您的代码片段生成 PNG 图像:

#!/bin/bash
alias catage="sudo -E docker run --rm -it -v $PWD:/home/node/app catage:local catage"
alias carbon-now="sudo -E docker run --rm -it --init --cap-add=SYS_ADMIN --shm-size=1gb --user pptruser -v $PWD:/home/pptruser/app --workdir /home/pptruser/app carbon-now:local carbon-now"
catage --language java --no-line-numbers --theme Material --frame-title "My Code Snippet" --format png "my_code_snippet.java" "my_code_snippet.png" 
carbon-now "my_code_snippet.java" --target "my_code_snippet" --headless

Docker 方法适用于 Docker 支持的所有操作系统。您可能需要根据操作系统的功能修改上述 shell 脚本示例,但基本命令保持不变。

于 2020-04-06T13:55:11.097 回答