Я должен распечатать целый исходный код проекта Java. Окончательная версия должна быть похожей: Eclipse: Файл-> Печать. Но с этой функцией можно только распечатать один файл сразу.
Существует ли способ распечатать (или создать pdf/rtf) целый проект (весь *.java, *.xml... файлы) с одной командой?
Я использую затмение galileo на Windows XP sp3
Править: Для каждого класса/файла страница должна (более или менее) быть похожей на это:
1 package utils.libraries;
2
3 import java.io.File;
9
10 /**
11 * @
12 * @
13 * @
14 */
15 public class LibraryExtractor {
16
17 /**
18 *
19 *
20 *
21 *
22 *
23 *
24 *
25 */
26 public static void extranctLibrary(String library, File targetFile) throws
IOException, URISyntaxException {
27 targetFile.getParentFile().mkdirs();
28 if (!targetFile.exists())
29 targetFile.createNewFile();
30
31 ClassLoader classLoader = LibraryExtractor.class.getClassLoader();
32 InputStream in = classLoader.getResourceAsStream(library);
33 OutputStream out = new FileOutputStream(targetFile);
34
35 byte[] buf = new byte[1024];
36 int len;
37
38 while ((len = in.read(buf)) > 0)
39 out.write(buf, 0, len);
40
41 in.close();
42 out.close();
43 }
44 }
45
РЕШЕНИЕ:
Если вы не возражаете против установки Cygwin или запуска под Linux, следующая команда сделает то, что вы хотите:
enscript -r -2 --file-align=2 --highlight --line-numbers -o - `find . -name '*.java'` | ps2pdf - files.pdf
enscript - это программа для преобразования текстовых файлов в различные выходные форматы; PostScript - это программа по умолчанию, но вы также можете создавать HTML, RTF и некоторые другие. Опция -r
говорит, что надо печатать в альбомном режиме, -2
- это две колонки на страницу (деревья сохранения), --file-align=2
говорит, что каждый новый файл должен начинаться на своей физической странице, --highlight
включает подсветку синтаксиса конкретного языка (он попытается разобраться в языке, или вы можете указать "java"), --line-numbers
должен быть очевиден, и -o -
посылает вывод в режим Standard-out (где он передается в ps2pdf).
find генерирует список файлов; здесь я говорю ему найти все Java-файлы в текущем каталоге. Вывод передается в качестве аргументов в enscript; для "50-100 файлов" вы должны быть в порядке, но вам может понадобиться прочитать о xargs. Вы можете избавиться от аргумента -name
, чтобы сгенерировать список всех файлов, или добавить несколько аргументов -name
, чтобы добавить больше типов файлов в список; я бы не стал использовать подход "все файлы", потому что тогда вы получите файлы с управлением исходным кодом.
ps2pdf берет вывод PostScript из enscript и преобразует его в PDF, который вы можете распечатать.
.Я не думаю, что вы можете сделать это в Eclipse (конечно, вы можете написать плагин, который сделает это).
Если вы используете Ant в качестве инструмента сборки, вы можете использовать concat
и затем распечатайте получившийся файл
<concat destfile="${concat.src.dir}/concat.txt" force="no">
<filelist dir="${src.dir}" includes="**/*.java **/*.xml" />
</concat>
Если вы хотите, чтобы форматирование было точно таким же, как в Eclipse, то вам, вероятно, придется распечатать из Eclipse. Вы потратите больше времени, пытаясь дублировать форматирование, которое у вас есть в Eclipse, другим способом.
Другой важный момент: если вы используете фальцовку в текстовых редакторах в Eclipse, то сложенные строки не будут отображаться в печатной версии.
Если вам действительно нужно представить исходный код в виде деревьев, то я бы посоветовал вам попытаться убедить ваших клиентов, что цвет и подсветка синтаксиса не важны, а затем отформатировать все в Eclipse, и печатать откуда угодно. Есть предложения по номерам строк и т.д. в других ответах
.Если вы можете позволить себе потратить 50 долларов, купите Ultraedit, откройте все файлы и распечатайте...
Ультраредактированные функции о печати включает в себя:
Вариант, который выглядит причудливым, это использовать vim в пакетном режиме для генерации кучи цветных HTML-файлов, а затем печатать, перетаскивая их все на принтер (я знаю, что это можно сделать, некоторое время назад коллега распечатала весь J2SE API, и я надеюсь, что она не распечатала его страницей за страницей xD).
find -name "*.java" -exec vim '+set nu' +TOhtml +wq +q '{}' \;
Я бы использовал пигменты с включенным белье, как описано в http://pygments.org/docs/formatters/