用Java寫打印預覽組件﹐希望大家都來討論一下。不停散分。

jxxiaojian 2002-07-29 10:27:25
比如我想要做一個打印預覽組件﹐主要應用于報表方面。
基本能實現像crystal report,DataReport等軟件功能﹐
當然不需要實現人機對話的拉制報表的功能。
只要能夠手工加東西到預覽里﹐像表格線﹐字段。分頁處理﹐打印技朮方面。
思路正確都有分
...全文
29 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanlang3 2002-09-08
  • 打赏
  • 举报
回复
以前的一段代码,不是我写的,不过希望对你有用。

import java.awt.*;
import java.awt.event.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.util.*;
import javax.swing.*;
import java.awt.print.*;
import java.sql.*;
import edu.Whu.iric.Comp.dbuse;



public class PrintPreviewCanvas extends JPanel {

private double scale = 1.0;

public PrintPreviewCanvas(Book b,Dimension d)
{
book = b;
currentPage = 0;
this.d=d;
}

public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
PageFormat pageFormat = book.getPageFormat(currentPage);

double xoff;
double yoff;
double scale;
double px = pageFormat.getWidth();
double py = pageFormat.getHeight();
//double sx = this.getWidth() - 1;
//double sy = this.getHeight() -1;
double sx=d.getWidth()-1;
double sy=d.getHeight()-1;

if(px/py < sx/sy)
{
scale = sy/py;
xoff = 0.5 * (sx - scale * px);
yoff = 0;
}
else
{
scale = sx/px;
xoff = 0;
yoff = 0.5 * (sy - scale * py);
}
System.out.println(String.valueOf(px)+" "+String.valueOf(py)+" "+String.valueOf(sx)+" "+String.valueOf(sy)+" ");
System.out.println("before scale= " + String.valueOf(scale) + "this.sclae = "+ String.valueOf(this.scale));
scale = scale * this.scale;
System.out.println("after scale= " + String.valueOf(scale) + "this.sclae = "+ String.valueOf(this.scale));
g2.translate((float)xoff,(float)yoff);
g2.scale((float)scale,(float)scale);

Rectangle2D page = new Rectangle2D.Double(0,0,px,py);
g2.setPaint(Color.white);
g2.fill(page);
g2.setPaint(Color.black);
g2.draw(page);

Printable printable = book.getPrintable(currentPage);
try
{
printable.print(g2,pageFormat,currentPage);
}
catch(PrinterException exception)
{
g2.draw(new Line2D.Double(0,0,px,py));
g2.draw(new Line2D.Double(0,px,0,py));
}
}




public void flipPage(int by)
{
int newPage = currentPage + by;
if(0 <= newPage && newPage < book.getNumberOfPages())
{ currentPage = newPage;
repaint();
}
}

public void sizeChange(double scale)
{
this.scale = scale;
System.out.println("this.sclae = "+ String.valueOf(this.scale));
repaint();
System.out.println("this.sclae = "+ String.valueOf(this.scale));
}


private Book book;
private int currentPage;
private Dimension d;



}
tyronelg 2002-09-07
  • 打赏
  • 举报
回复
up
zhuazhi 2002-09-07
  • 打赏
  • 举报
回复
我不是高手我不会啊


—————————————————————————————————
____()()
/ @@
`~~~~~\_;m__m._>o -------大米在哪里?大米在哪里??
jxxiaojian 2002-07-29
  • 打赏
  • 举报
回复
Formula one 是屬于第三方組件嗎。
我現在目的想做成自定義﹐能夠讓user自己選擇欄位﹐自己改變其寬度等功能。
不知道crystal report的插件﹐可否用來做。
它是否兼容Jdbc的Resultset.以及是否能夠調它其中的屬性等方面
binriyue 2002-07-29
  • 打赏
  • 举报
回复
我们是用Formula one,写预览很简单。
yonge 2002-07-29
  • 打赏
  • 举报
回复
我建议你用pdf的东西来做,他的网站上有这方面的资料,我们现在再做的一个软件,打印就用的是pdf格式来处理!
================================================================

CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!

★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。
★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。
★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录!
★ 支持在线检测程序升级情况,可及时获得程序更新的信息。

★★ 签名 ●
可以在您的每个帖子的后面自动加上一个自己设计的签名哟。

Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe [自解压]

jxxiaojian 2002-07-29
  • 打赏
  • 举报
回复
或許用第三方插件或組件也行﹖
jxxiaojian 2002-07-29
  • 打赏
  • 举报
回复
怎么沒有這方面的高手﹐
意見也行呀

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧