Tôi phải in biên nhận qua máy in nhiệt sử dụng Java. Tôi đã làm mọi thứ. Chương trình của tôi lấy dữ liệu từ cơ sở dữ liệu và chuyển đổi trong một chuỗi bằng cách sử dụng các ký tự đặc biệt, tab và \ n. Sau đó, chuỗi được chuyển sang phương thức khác chuyển đổi nó thành đồ họa.Nhận dạng in với máy in nhiệt bằng java
Vấn đề là khi tôi nhấp vào nút in, giấy trắng sẽ xuất hiện. Tôi nhận thấy rằng 4-5 ký tự đầu tiên của chuỗi của tôi đang được in trên dòng cuối cùng của hóa đơn ở góc bên phải ở cuối cực của bài báo. Máy in của tôi là Epson TM - T81.
public void printThisBill()
{
DefaultTableModel mod = (DefaultTableModel) jTable1.getModel();
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
DateFormat timeFormat = new SimpleDateFormat("HH:mm");
//get current date time with Date()
Date date = new Date();
Date time = new Date();
String Date = dateFormat.format(date);
String Time = timeFormat.format(time);
String Header =
" ****Super Market**** \n"
+ "Date: "+Date+" Time: "+Time+"\n"
+ "---------------------------------\n"
+ "Name Qty Rate Amt\n"
+ "---------------------------------\n";
String amt =
"\n \n \nTotal Amount = "+ amt() +"\n"
+ "Tax =" + tax() + "\n"
+ "*********************************\n"
+ "Thank you. \n";
String bill = Header;
int i = 0;
do
{
String name = ""+ mod.getValueAt(i, 2);
String qty = ""+ mod.getValueAt(i, 3);
String rate = ""+ mod.getValueAt(i, 4);
String amount = ""+ mod.getValueAt(i, 6);
if(name.length() > 12)
{
name = name.substring(0, 12)+" ";
}
else
{
for(int j= name.length()-12; j<= name.length(); j++);
{
name = name+" ";
}
}
if(qty.length()<=5)
{
for(int j= 0; j<= qty.length()-5; j++);
{
qty = qty+" ";
}
}
rate = rate;
String items =
name+"\t"+qty+"\t"+rate+"\t"+amount+"\n";
bill = bill+ items;
i++;
} while(i <= mod.getRowCount()-1);
bill = bill+amt;
System.out.println(bill);
printCard(bill);
dispose();
}
Và phương pháp mà in hóa đơn là:
public static void printCard(final String bill)
{
Printable contentToPrint = new Printable(){
@Override
public int print(Graphics graphics, PageFormat pageFormat, int page) throws PrinterException
{
if (page > 0) {
return NO_SUCH_PAGE;
}
pageFormat.setOrientation(PageFormat.LANDSCAPE);
Graphics2D g2d = (Graphics2D)graphics.create();
g2d.setPaint(Color.black);
g2d.setFont(new Font("Arial", Font.BOLD, 10));
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableX());
g2d.drawString(bill, 0, 0);
return PAGE_EXISTS;
}
};
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(contentToPrint);
//You can show a print dialog before printing by job by wrapping the following blocks with a conditional statement if(job.printDialog()){...}
try
{
job.print();
} catch (PrinterException e)
{
System.err.println(e.getMessage());
}
}
vấn đề là gì và làm thế nào tôi có thể giải quyết nó? Tôi nghĩ rằng tôi không thiết lập các thông số đúng tại phương thức drawString().
Hoặc có gì khác không? Bất kỳ trợ giúp tôi sẽ đánh giá cao.!
Bạn có chắc chắn rằng bạn muốn cảnh quan? – jmpyle771
Không phải là '0,0' ở dưới cùng bên trái? (Nó đã được mãi mãi kể từ khi tôi nhét với in ấn/g2d - là transposed là phía trên bên trái?) –
Vâng, nếu PageFormat là ở phong cảnh. – jmpyle771