我需要使用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