标题: JOR苹果Mac OS X下有问题 [打印本页] 作者: flashcloud 时间: 2010-11-16 14:52 标题: JOR苹果Mac OS X下有问题
一.问题描述:
1.模型定义面板的右键菜单无法弹出
2.tomcat.with.jor 目录必须手动添加 logs 目录,否则 Tomcat 无法启动,报告:tomcat.with.jor/logs/catalina.out: No such file or directory
3. designer/bin/start.sh 的执行脚本也有误。正确脚本见附件。
4.运行Tomact中的示例时,在有数据的情况下,点击导出PDF时,报告:
HTTP Status 500 -
javax.servlet.ServletException: The document has no pages.
jatools.server.ReportExporter.service(ReportExporter.java:246)
jatools.server.JatoolsReportServlet.jrservice(JatoolsReportServlet.java:57)
jatools.server.JatoolsReportServlet.doGet(JatoolsReportServlet.java:81)
javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
二.系统环境:
1.Mac OS X 版本: 10.6.5
2.JDK 版本: 1.6.0_22-b04-307-10M3261
1.说明:报表显示有数据,itext.jar包未作替换
2.堆栈信息:
2010-11-16 15:35:24 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jatoolsreport threw exception
ExceptionConverter: java.io.IOException: The document has no pages.
at com.lowagie.text.pdf.PdfPages.writePageTree(PdfPages.java:107)
at com.lowagie.text.pdf.PdfWriter.close(PdfWriter.java:848)
at com.lowagie.text.pdf.PdfDocument.close(PdfDocument.java:1043)
at com.lowagie.text.Document.close(Document.java:497)
at jatools.engine.export.pdf.PdfExport.close(PdfExport.java:141)
at jatools.engine.export.pdf.PdfExport1.close(PdfExport1.java:91)
at jatools.engine._Job.printAsPDF(_Job.java:87)
at jatools.engine.ReportJob.printAsPDF(ReportJob.java:109)
at jatools.server.ReportExporter.export(ReportExporter.java:82)
at jatools.server.ReportExporter.service(ReportExporter.java:241)
at jatools.server.JatoolsReportServlet.jrservice(JatoolsReportServlet.java:57)
at jatools.server.JatoolsReportServlet.doGet(JatoolsReportServlet.java:81)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:680) 作者: admin 时间: 2010-11-16 16:00
经跟踪调试,在你提到的_Job. generatePage() 方法中 pages.length输出是正确的。
pages = printer.getPages();
for (int i = 0; i < pages.length; i++) {
runner.view = pages;
runner.index = i;
runner.run();
count++;
}
错误发生在 for 循环体内的 runner.run(); 语句,调用此语句后的错误堆栈如下,我猜测应该是与 jatools.properties 中无法读取字体路径有关。暂时未找到解决办法。赐教了!
ExceptionConverter: ExceptionConverter: java.lang.Exception: 既找不到字体 [Dialog ],也找不到默认字体.
at com.lowagie.text.pdf.DefaultFontMapper.awtToPdf(DefaultFontMapper.java:61)
at com.lowagie.text.pdf.PdfGraphics2D.getCachedBaseFont(PdfGraphics2D.java:895)
at com.lowagie.text.pdf.PdfGraphics2D.setFont(PdfGraphics2D.java:887)
at com.lowagie.text.pdf.PdfGraphics2D.<init>(PdfGraphics2D.java:167)
at com.lowagie.text.pdf.PdfContentByte.createGraphics(PdfContentByte.java:2312)
at jatools.engine.export.pdf.PdfExport.export(PdfExport.java:113)
at jatools.engine.export.pdf.PdfExport1.export(PdfExport1.java:79)
at jatools.engine.export.runnable.PdfRunnable.run(PdfRunnable.java:41)
at jatools.engine._Job.generatePage(_Job.java:157)
at jatools.engine._Job.printAsPDF(_Job.java:85)
at jatools.engine.ReportJob.printAsPDF(ReportJob.java:109)
at jatools.server.ReportExporter.export(ReportExporter.java:82)
at jatools.server.ReportExporter.service(ReportExporter.java:241)
at jatools.server.JatoolsReportServlet.jrservice(JatoolsReportServlet.java:57)
at jatools.server.JatoolsReportServlet.doGet(JatoolsReportServlet.java:81)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.eclipse.equinox.http.registry.internal.ServletManager$ServletWrapper.service(ServletManager.java:180)
at org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61)
at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:126)
at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:60)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet.service(HttpServerManager.java:318) 作者: flashcloud 时间: 2010-11-18 22:18
我将 jatools.properties 文件中的 “font.dirs=c:/winnt/fonts;d:/winnt/fonts;c:/windows/fonts;d:/windows/fonts;”
替换为“font.dirs=/Library/Fonts;/System/Library/Fonts” ,即 Mac OS X 的系统字体路径依然无法解决。我看了下iText.jar,楼主对 DefaultFontMapper 类作了更改,不知症结地否在此。 作者: flashcloud 时间: 2010-11-18 23:19 标题: 解决了!分享下,希望对楼主提高JOR的跨平台及Mac的苹果粉丝们有帮助!
是的,有些Mac字体是非ttf的,但标准的ttf也似出错。一劳永逸的办法就是将 Office of Mac 的 宋体字体文件 SimSun.ttf 所在的路径 /Library/Fonts/Microsoft 加入到 jatools.properties 。更多的测试以后有时间了再给出真正答案了。虽然只能用宋体,但能导出PDF就达到目的了。 作者: flashcloud 时间: 2010-11-20 15:04 标题: 关于 Mac 下设计器的 模型定义面板等 树形右键菜单无法弹出已找到答案
由于Mac 与 Windows 的操作模式问题,两者弹出触发器的时机不一样。
“ 上下文菜单
上 下文菜单在Java中称为弹出菜单,Mac OS X平台完全支持这种菜单。在Mac OS X上,上下文菜单可以通过Control-click键或者right-click来触发。请注意,虽然Control-click和right- click会产生相同的结果,但它们是不同的鼠标事件。在Windows平台上,鼠标的右键是上下文菜单的标准触发器。
public void mouseReleased(MouseEvent e) {
if (enablePopup) { String os = System.getProperty("os.name");
if (e.isPopupTrigger() || "Mac OS X".equalsIgnoreCase(os)) {
int row = getRowForLocation(e.getX(), e.getY());