我需要使用Java在紙上打印HTML文件。我可以在Reference from Stackoverflow的指導下在一篇論文中打印出內容。但是,它打印原始的HTML。我需要打印HTML作爲網頁,就像應該在紙上畫一張桌子,而不是打印<table>
如何使用Java打印HTML
我看到了一些使用Google搜索的帖子,但沒有任何幫助。我還發現了一種使用Desktop.print()的方法,但無法添加指向哪臺打印機和所有打印機的更多功能。
我也嘗試使用JEditorPane來打印它,但它正在打印一個空白頁。請參考下面的代碼。
public class PrintTemplateJEditor extends JEditorPane implements Printable, Serializable {
public static void main(String arg[]) {
PrintTemplateJEditor template = new PrintTemplateJEditor();
template.setContentType("application/octet-stream");
try {
template.read(new BufferedReader(new FileReader("output.html")), "");
PrinterJob job = PrinterJob.getPrinterJob();
PrinterService ps = new PrinterService();
// get the printer service by printer name
PrintService pss = PrintServiceLookup.lookupDefaultPrintService();
job.setPrintService(pss);
job.setPrintable(template);
// if (job.printDialog()) {
job.print();
// }
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException {
if (pageIndex > 0) { /* We have only one page, and 'page' is zero-based */
System.out.println("NO PAGE...");
return NO_SUCH_PAGE;
}
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.black);
RepaintManager.currentManager(this).setDoubleBufferingEnabled(false);
Dimension d = this.getSize();
double panelWidth = d.width;
double panelHeight = d.height;
double pageWidth = pf.getImageableWidth();
double pageHeight = pf.getImageableHeight();
double scale = pageWidth/panelWidth;
int totalNumPages = (int) Math.ceil(scale * panelHeight/pageHeight);
System.out.println("pages - " + totalNumPages);
// Check for empty pages
// if (pageIndex >= totalNumPages)
// return Printable.NO_SUCH_PAGE;
g2.translate(pf.getImageableX(), pf.getImageableY());
g2.translate(0f, -pageIndex * pageHeight);
g2.scale(scale, scale);
this.paint(g2);
System.out.println("End");
return Printable.PAGE_EXISTS;
}
}
我找到了另一種方式 - 轉換的HTML到PDF,然後打印出來,這是成功的,但其在應用CSS到HTML困難。而不是做所有這些,它更好地打印HTML。你能指導我嗎?
注:我知道它被一些人問過,但我面臨着一個不同的問題。所以,請不要將其標記爲複製
你面臨什麼不同的問題?據我所知,所有在這裏提出的問題已經在SO上得到解答。 – Sinkingpoint
不確定我完全理解*在紙上創建一個表格,而不是打印*。如果你不是在** CSS打印樣式之後**我認爲**對某個瀏覽器/操作系統組合進行截圖**是最好的選擇。 –
@jangroth:我已更新。它打印原始HTML代碼而不是網頁。我在CSS之後。我需要將CSS應用於HTML並打印網頁。 – Anand