Распечатать исходный код всего проекта Java

Мне нужно распечатать весь исходный код java-проекта. Окончательная версия должна выглядеть так: Eclipse: Файл -> Печать. Но с помощью этой функции вы можете распечатать только один файл за раз.

Есть ли способ распечатать (или создать pdf/rtf) весь проект (все *.java, *.xml,... файлы) с помощью одной команды?

Я использую eclipse galileo на Windows XP SP3


EDIT: для каждого класса/файла страница должна (более или менее) выглядеть так:

C:\..\..\..\LibraryExtractor.java

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

РЕШЕНИЕ:

  1. enscript (с Cygwin)

  2. Java2Html Eclipse-Plugin (работает только с Европа)


person oliver31    schedule 17.12.2009    source источник
comment
Количество файлов? Количество проектов?   -  person Thorbjørn Ravn Andersen    schedule 17.12.2009
comment
50 - 100 файлов для одного проекта   -  person oliver31    schedule 17.12.2009
comment
Где была Технология? Бумага была заменена электронными копиями... и доступно множество систем контроля версий. Почему вы хотите распечатать все файлы?   -  person Gopi    schedule 17.12.2009
comment
потому что это необходимо... это точно была не моя идея -.-   -  person oliver31    schedule 17.12.2009
comment
Я вижу, вы добавили награду. Но вы задали этот вопрос 17 декабря, а это значит, что за это время у вас было достаточно времени, чтобы распечатать файлы один за другим. Просто откройте их все и нажмите ctrl+p на каждом из них. Всего 50-100 раз. Может быть, один час работы, но уж точно не 3 недели работы. Ты действительно был таким ленивым?   -  person BalusC    schedule 06.01.2010
comment
@BalusC: В марте мне нужно сделать десятидневный проект. В конце я должен распечатать всю документацию (управление проектами, uml-диаграммы, прочее) + весь исходный код как минимум дважды. я действительно не хочу/имею время печатать каждый файл один за другим.   -  person oliver31    schedule 06.01.2010
comment
Скорее используйте пакетный/шелл-скрипт или напишите что-нибудь на Java самостоятельно с помощью javax.print API.   -  person BalusC    schedule 06.01.2010
comment
Никому из вас это не понадобилось для школы? Не знаю, относится ли это к @r3zn1k, но я помню, как один из моих учителей (у которого были серьезные проблемы с навыками) пролистал всю распечатку кода и попросил меня объяснить, о чем был весь автоматически сгенерированный код SOAP. .. Это было после того, как он спросил одного из моих однокурсников о типе принтера, на котором он был напечатан..   -  person Boris Callens    schedule 11.01.2010
comment
Также небольшое предупреждение: вы понимаете, что ваша функция называется extranctLibrary?   -  person Boris Callens    schedule 11.01.2010


Ответы (8)


Если вы не возражаете против установки 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 - отправляет вывод на стандартный вывод (откуда он передается в ps2pdf).

find создает список файлов; здесь я говорю ему найти все файлы Java в текущем каталоге. Вывод передается в качестве аргументов в enscript; для "50-100 файлов" все должно быть в порядке, но вам может понадобиться прочитать о xargs. Вы можете избавиться от аргумента -name, чтобы сгенерировать список всех файлов, или добавить несколько аргументов -name, чтобы добавить в список больше типов файлов; Я бы не стал использовать подход «все файлы», потому что тогда вы получите файлы контроля версий.

ps2pdf берет вывод PostScript из enscript и преобразует его в PDF, который можно распечатать.

person kdgregory    schedule 06.01.2010
comment
Не читал всю вашу команду до тех пор, пока я не прокомментировал - обратите внимание, что если вы отбросите -o -, enscript будет выполнять буферизацию непосредственно на принтер (или вы можете указать принтер с помощью -P <printer-name>), и вы можете пропустить канал до ps2pdf. - person Lytol; 08.01.2010
comment
Примечание: вместо Cygwin можно использовать соответствующие команды из GnuWin32 (gnuwin32.sourceforge.net). В частности, Enscript для Windows (gnuwin32.sourceforge.net/packages/enscript.htm) и FindUtils для Windows (gnuwin32.sourceforge.net/packages/findutils.htm) - см. опцию execdir find для запуска команды для каждого файла. - person MaD70; 13.01.2010
comment
Это кажется отличным советом, но я не могу найти ps2pdf в пакетах Cygwin? Как установить эту утилиту для Cygwin? - person Piotr Sobczyk; 20.07.2012

Если вы можете позволить себе потратить 50 долларов, купите Ultraedit, откройте все файлы и распечатайте...

функции Ultraedit о печати включают:

  • Предварительный просмотр печати
  • Печатать номера строк
  • Команда печати не печатает скрытые строки
  • Верхние/нижние колонтитулы (с командами выравнивания), поля и разрывы страниц
  • Печать подсветки синтаксиса цветом
  • Печать 2 страниц на одном листе в альбомном или портретном режимах
  • Отдельный выбор шрифта для дисплея и принтера (поддерживаются все установленные шрифты, включая шрифты True Type)
  • Распечатать все открытые файлы
person JuanZe    schedule 06.01.2010
comment
Только что проверил, у него есть бесплатная пробная версия, так что это, вероятно, решит вашу проблему на данный момент. - person Edan Maor; 06.01.2010
comment
Я помню, как использовал это некоторое время назад. Это было довольно приятно, так как я мог подключиться к FTP и читать/записывать файлы оттуда. - person David Brunelle; 06.01.2010
comment
@David Я использую PSPad, и функция, которая мне нравится больше всего, такая же: подключение через FTP и редактирование файлов прямо на сервере. - person JuanZe; 07.01.2010
comment
Спасибо за Ваш ответ. Печатать все открытые файлы полезно для нескольких файлов. Для всего проекта это не лучшее решение... - person oliver31; 13.01.2010

Я использовал Java2Html из Затмение в прошлом. Посмотрите, соответствует ли он вашим потребностям.

person Gregory Pakosz    schedule 10.01.2010
comment
Спасибо за ваш ответ. Моя проблема может быть решена с помощью Java2Html Eclipse-Plugin. Хорошо, это не работает с Galileo (это работает с Европой), и преобразование в RTF с несколькими файлами не работает, но вы все равно можете преобразовать все в HTML (отредактировать HTML), а затем скопировать HTML-вывод в RTF файл. Если вы не хотите устанавливать Cygwin, это лучшее решение. - person oliver31; 13.01.2010

Я не думаю, что вы можете сделать это в Eclipse (конечно, вы можете написать плагин, который делает это).

Если вы используете Ant в качестве инструмента сборки, вы можете использовать задачу concat, а затем распечатать полученный файл.

<concat destfile="${concat.src.dir}/concat.txt" force="no">
    <filelist dir="${src.dir}" includes="**/*.java **/*.xml" />
</concat>
person jitter    schedule 17.12.2009
comment
Вы ничего не сказали об этом в своем вопросе - person jitter; 17.12.2009
comment
Да, r3zn1k, это хорошо, если вы действительно изложите свои требования в своем вопросе. :) - person delfuego; 17.12.2009
comment
Окончательная версия должна выглядеть как Eclipse: Файл -> Печать == номера строк и подсветка синтаксиса - person oliver31; 18.12.2009
comment
Фактически, eclipse печатает номера строк только в том случае, если флажок номера строки установлен в свойствах текстового редактора. Поэтому, если у меня не включены номера строк, я не получаю номера строк. - person Matthew Farwell; 06.01.2010

Вариант, который выглядит причудливым, состоит в том, чтобы использовать vim в пакетном режиме для создания набора раскрашенных HTML-файлов, а затем распечатать, перетащив их все на принтер (я знаю, что это можно сделать, некоторое время назад коллега распечатал весь J2SE API, и я надеюсь, что она не делала это страница за страницей xD).

find -name "*.java" -exec vim '+set nu' +TOhtml +wq +q '{}' \;
person fortran    schedule 06.01.2010

Если вы хотите, чтобы форматирование было таким же, как в Eclipse, вам, вероятно, придется печатать из Eclipse. Вы потратите больше времени, пытаясь воспроизвести форматирование печати, которое есть в Eclipse, с помощью другого метода.

Еще один важный момент: если вы используете фальцовку в текстовых редакторах в Eclipse, то в печатной версии линии фальцовки отображаться не будут.

Если вам действительно нужно предоставить исходный код в виде деревьев, то я бы посоветовал вам попытаться убедить своих клиентов в том, что цвет и подсветка синтаксиса не важны, а затем отформатировать все в Eclipse и распечатать из другого места. В других ответах есть предложения по номерам строк и т. Д.

person Matthew Farwell    schedule 06.01.2010

http://sourceforge.net/projects/javasrc2pdf/?source=typ_redirect

Это создает все PDF-файлы с достаточно хорошей подсветкой синтаксиса, однако все они находятся в отдельных файлах. Но есть много способов объединить PDF-файлы.

person Stuart Clark    schedule 01.04.2015

Я бы использовал pygments с включенными линиями, как описано в http://pygments.org/docs/formatters/

person Xavier Combelle    schedule 06.01.2010