我想從Java小程序打印自定義紙張大小。我已設置紙張尺寸,但它被忽略。如何打印自定義紙張尺寸(檢查8「x 4」)?
我也嘗試過使用本書的方法,因爲我已經看到了一些有關這有助於它的工作,但是當我用它時,它只是打印一個空白頁,似乎仍然是關於A4(我正在打印檢查這顯然要小得多(8「×4」))。
我想從JEditorPane打印HTML,如果這有什麼區別。
如果您有任何想法,我將非常感激,我正在用這個撕掉我的頭髮。
我還應該補充一點,就Java而言,我是一個非常初學者。
這是我到目前爲止有:
更新時間: 我現在拿到的頁面大小合適的,但似乎無法讓我加載到適應或與排隊HTML頁面頁面大小。
更新: 現在我只是不能讓小程序在瀏覽器中運行。它從eclipse起作用,而不是瀏覽器。我還需要從參數中傳遞URL。
這裏是我使用的HTML Applet標記和更新Java代碼:
<!DOCTYPE html>
<html>
<head><title>Printing Cheque</title></head>
<body>
<applet width=100 height=100 code="HTMLPrinter"
archive="cheque_print.jar">
</applet>
</body>
</html>
package com.yunatech.pns.chequeprint;
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.swing.JEditorPane;
public class HTMLPrinter extends Applet {
/**
*
*/
private static final long serialVersionUID = 8065834484717197790L;
private static JEditorPane editor;
public HTMLPrinter() {
try {
editor = new JEditorPane();
editor.setPage("http://localhost/print_test/test.html");
PrinterJob pj = PrinterJob.getPrinterJob();
if (pj.printDialog()) {
PageFormat pf = pj.defaultPage();
Paper paper = pf.getPaper();
double width = 8d * 72d;
double height = 4d * 72d;
double margin = 1d * 72d;
paper.setSize(width, height);
paper.setImageableArea(
margin,
0,
width - (margin * 2),
height);
System.out.println("Before- " + dump(paper));
pf.setOrientation(PageFormat.PORTRAIT);
pf.setPaper(paper);
System.out.println("After- " + dump(paper));
System.out.println("After- " + dump(pf));
dump(pf);
PageFormat validatePage = pj.validatePage(pf);
System.out.println("Valid- " + dump(validatePage));
Book pBook = new Book();
pBook.append(new Page(), pf);
pj.setPageable(pBook);
try {
pj.print();
} catch (PrinterException ex) {
ex.printStackTrace();
}
}
} catch (Exception exp) {
exp.printStackTrace();
}
}
protected static String dump(Paper paper) {
StringBuilder sb = new StringBuilder(64);
sb.append(paper.getWidth()).append("x").append(paper.getHeight())
.append("/").append(paper.getImageableX()).append("x").
append(paper.getImageableY()).append(" - ").append(paper
.getImageableWidth()).append("x").append(paper.getImageableHeight());
return sb.toString();
}
protected static String dump(PageFormat pf) {
Paper paper = pf.getPaper();
return dump(paper);
}
public static class Page implements Printable {
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) {
if (pageIndex >= 1) return Printable.NO_SUCH_PAGE;
Graphics2D g2d = (Graphics2D)graphics;
g2d.translate((int)pageFormat.getImageableX(), (int)pageFormat.getImageableY());
editor.setSize((int)pageFormat.getImageableWidth(), (int)pageFormat.getImageableHeight());
editor.print(g2d);
return Printable.PAGE_EXISTS;
}
}
}
預先感謝您可以提供任何幫助。
感謝您的答覆,但這似乎並沒有改變任何東西。我很高興知道我是否可以接受我的紙張尺寸。 – Liam
@liam新增工作示例 – MadProgrammer
謝謝,這對我有很大的幫助,而且我越來越接近獲得我想要的東西。紙張大小是正確的,但我似乎無法得到我正在加載正確的大小或位置的HTML頁面。我更新了上面的代碼以顯示我現在擁有的內容。任何想法,我要去錯了嗎? – Liam