【发布时间】:2016-09-16 09:20:33
【问题描述】:
我正在为我的项目工作开发一个 Java 桌面应用程序。我需要打印一张包含小计和总计字段的发票以及来自JTable 的表格数据。我可以打印表格,但不能在同一页面上。即 JTable 在第一页打印,小计在下一页打印。有没有办法在同一页上打印两个数据。我不想使用报告引擎。只需使用内置的 java 打印服务。请指导我。
根据需要打印格式:
下图显示了图形用户界面
下图显示了我到现在得到的报告。它的格式不正确。请帮忙
代码如下
JLabel title = new JLabel();
title.setText("Invoice");
title.setBounds(300, 200, 80, 30);
JTextField subTotal = new JTextField();
subTotal.setText("Sub Total : Rs. " + SubTotal.getText());
subTotal.setBounds(400, 200, 150, 30);
MyPrintable prt = new MyPrintable();
prt.addComponent(title);
prt.addComponent(billTable); //billTable is the JTable
prt.addComponent(subTotal);
prt.printIt();
下面是 My Printable 类
class MyPrintable implements Printable
{
private ArrayList<JComponent> items;
public MyPrintable()
{
items = new ArrayList<>();
}
@Override
public int print(Graphics g, PageFormat pf, int page) throws PrinterException
{
if(page > 0) return Printable.NO_SUCH_PAGE;
Graphics2D g2 = (Graphics2D)g;
g2.translate(pf.getImageableX(), pf.getImageableY());
for(JComponent item : items)
{
item.setLayout(null);
// item.setBounds(500, 500, 200, 200);
item.printAll(g);
g2.translate(0, item.getHeight());
}
return Printable.PAGE_EXISTS;
}
public void printIt()
{
PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();;
PrinterJob job = PrinterJob.getPrinterJob();
try
{
job.setPrintable(this);
if(job.printDialog(attributes))
job.print(attributes);
}
catch (PrinterException e)
{
JOptionPane.showMessageDialog(null, e);
}
}
public void addComponent(JComponent component) { items.add(component); }
}
【问题讨论】:
-
您是否尝试过创建一个包含您需要的所有员工的页面(面板)并进行打印?
-
@SergiyMedvynskyy 我已经编辑了这个问题。
-
在不查看您的代码的情况下如何帮助您?请提供SSCCE,以便我(或其他人)可以帮助您。
-
@SergiyMedvynskyy 我已经添加了我的代码。谢谢回复。如果可能,请发送示例代码。