【问题标题】:Print the sourcecode of a whole java project打印整个java项目的源代码
【发布时间】:2010-12-27 15:06:56
【问题描述】:

我必须打印一个 java 项目的整个源代码。 最终版本应如下所示:Eclipse: File -> Print。 但使用此功能一次只能打印一个文件。

有没有办法用一个命令打印(或创建一个 pdf/rtf)整个项目(所有 *.java、*.xml、... 文件)?

我在 windows xp sp3 上使用 eclipse galileo


编辑:对于每个类/文件,页面应该(或多或少)如下所示:

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 插件(仅限 与欧罗巴合作)

【问题讨论】:

  • 因为它是必需的……这肯定不是我的主意-.-
  • 我看到你增加了赏金。但是你在 12 月 17 日问了这个问题,这意味着在此期间你有足够的时间一个一个地打印文件。只需将它们全部打开并按 ctrl+p 即可。 “仅”50-100 次。也许一小时的工作,但肯定不是三周的工作。你真的那么懒吗?
  • @BalusC:我必须在三月份做一个为期十天的项目。最后,我必须打印整个文档(项目管理、uml 图表、其他东西)+ 整个源代码至少两次。我真的不想/没有时间一个一个地打印每个文件。
  • 宁可使用批处理/shell 脚本或借助 javax.print API 自己用 Java 编写一些东西。
  • 你们没有人需要它上学吗?不知道这是否是@r3zn1k 的情况,但我记得我的一位老师(他的技能受到严重挑战)翻阅了整个代码打印输出并要求我解释所有自动生成的 SOAP 代码是关于什么的。 .. 这是在他向我的一位同学询问打印它的打印机类型之后..

标签: java eclipse printing


【解决方案1】:

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

这将创建所有 PDF 并具有相当好的语法突出显示,但是它们都在单独的文件中。但是有很多方法可以组合 pdf 文件

【讨论】:

    【解决方案2】:

    我过去使用过 Eclipse 中的 Java2Html。看看它是否适合您的需求。

    【讨论】:

    • 感谢您的回答。我的“问题”可以用 Java2Html Eclipse-Plugin 解决。好的,它不适用于 Galileo(它适用于 Europa),并且使用多个文件转换为 RTF 不起作用,但您仍然可以将所有内容转换为 HTML(编辑 HTML),然后将 HTML 输出复制到 RTF文件。如果您不想安装 Cygwin,这是最好的解决方案。
    【解决方案3】:

    如果您想要完全按照 Eclipse 中的格式设置,那么您可能必须从 Eclipse 中打印。您将花费更多时间尝试使用另一种方法复制 Eclipse 中的打印格式。

    还有一点很重要:如果您在 Eclipse 的文本编辑器中使用折叠,那么折叠的行将不会显示在打印版本中。

    如果您真的必须将源代码提供为树,那么我建议您尝试说服您的客户颜色和语法突出显示并不重要,然后在 Eclipse 中格式化所有内容,然后从其他地方打印。其他答案中有关于行号等的建议。

    【讨论】:

      【解决方案4】:

      一个看起来很花哨的选项是在批处理模式下使用vim生成一堆彩色的HTML文件,然后通过将它们全部拖到打印机来打印(我知道可以这样做,前一段时间一个同事打印了整个J2SE API,我希望她没有一页一页地处理 xD)。

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

      【讨论】:

        【解决方案5】:

        我会使用启用了 linenos 的 pygments,如 http://pygments.org/docs/formatters/ 中所述

        【讨论】:

          【解决方案6】:

          如果你有能力花 50 美元购买 Ultraedit,打开所有文件并打印...

          Ultraedit features关于打印包括:

          • 打印预览
          • 打印行号
          • 打印命令不打印隐藏线
          • 页眉/页脚(带有对齐命令)、边距和分页符
          • 以彩色打印语法高亮
          • 在一张纸上以横向或纵向模式打印 2 页
          • 显示器和打印机的单独字体选择(支持所有安装的字体,包括 True Type 字体)
          • 打印所有打开的文件

          【讨论】:

          • 刚查了一下,它有免费试用版,所以这可能会暂时解决你的问题。
          • 我记得不久前使用过。这非常好,因为我可以连接到 FTP 并从那里读/写文件。
          • @David 我用的是 PSPad,而且我最喜欢的功能是一样的:通过 FTP 连接并直接在服务器上编辑文件。
          • 感谢您的回答。 “打印所有打开的文件”对少数文件很有用。对于整个项目来说,这不是最好的解决方案……
          【解决方案7】:

          如果您不介意安装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 参数以将更多文件类型添加到列表中;我不会采用“所有文件”的方法,因为那样你会得到源代码控制文件。

          ps2pdfenscript 获取 PostScript 输出并将其转换为可以打印的 PDF。

          【讨论】:

          • 在我发表评论之前没有阅读您的整个命令 -- 请注意,如果您删除 -o -,enscript 将直接打印到打印机(或者您可以使用 -P <printer-name> 指定打印机)你可以跳过管道到ps2pdf
          • 旁注:可以使用来自 GnuWin32 (gnuwin32.sourceforge.net) 的相关命令来代替 Cygwin。特别是 Windows 的 Enscript (gnuwin32.sourceforge.net/packages/enscript.htm) 和 Windows 的 FindUtils (gnuwin32.sourceforge.net/packages/findutils.htm) - 请参阅 find 的 execdir 选项来为每个文件运行命令。
          • 这似乎是一个很好的提示,但我在 Cygwin 包中找不到 ps2pdf?如何为 Cygwin 安装此实用程序?
          【解决方案8】:

          我认为你不能在 Eclipse 中做到这一点(当然你可以编写一个插件来做到这一点)。

          如果您使用 Ant 作为构建工具,您可以使用 concat 任务,然后打印生成的文件

          <concat destfile="${concat.src.dir}/concat.txt" force="no">
              <filelist dir="${src.dir}" includes="**/*.java **/*.xml" />
          </concat>
          

          【讨论】:

          • 你在你的问题中没有说什么
          • 是的,r3zn1k,在您的问题中实际说明您的要求对您很有帮助。 :)
          • 最终版本应该类似于“Eclipse: File -> Print” == linenumbers and syntax-highlighting
          • 实际上,如果在文本编辑器属性中选中了行号复选框,eclipse 只会打印行号。因此,如果我没有打开行号,那么我就不会得到行号。
          猜你喜欢
          • 2010-12-19
          • 2019-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-20
          • 1970-01-01
          • 2012-10-29
          • 1970-01-01
          相关资源
          最近更新 更多