[英]How to print the HTML in Java
我需要使用 Java 在论文中打印 HTML 文件。 我可以在Stackoverflow 参考的指导下打印出论文中的内容。 但是,它打印原始 HTML。 我需要将 HTML 打印为网页,就像应该在纸上画一个表格,而不是打印<table>
我通过谷歌搜索看到了一些帖子,但没有任何帮助。 我还找到了一种使用 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。 你能指导我吗?
注意:我知道有人问过它,但我面临一个不同的问题。 所以,请不要将其标记为重复
可能你可以像这样使用JTextPane:
JTextPane jtp = new JTextPane();
jtp.setContentType("text/html");
jtp.setText("<html></html>"); //Your whole html here..
jtp.print();
我希望这有帮助。 干杯
我尝试了不同的方法来打印HTML并感谢您的所有评论。 最后,我将使用FlyingSaucer库 ,它可以将HTML转换为PDF,并将CSS应用于HTML。 要转换和打印的代码示例如下:
public class FlyingSaucer2PDF {
public static final String HTML = "output.html";
public static final String PDF = "C:\\Temp\\Tested.pdf";
public static void main(String[] args) {
// TODO Auto-generated method stub
FlyingSaucer2PDF f = new FlyingSaucer2PDF();
try {
f.printPdf();
f.print(null);
} catch (DocumentException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (PrintException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void printPdf() throws DocumentException, IOException {
String url = new File(HTML).toURI().toURL().toString();
OutputStream os = new FileOutputStream(PDF);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(url);
renderer.layout();
renderer.createPDF(os);
os.close();
}
public void print(File file) throws FileNotFoundException, PrintException {
PrinterService ps = new PrinterService();
// get the printer service by printer name
PrintService pss = PrintServiceLookup.lookupDefaultPrintService();// ps.getCheckPrintService("Samsung ML-2850 Series PCL6 Class Driver");
System.out.println("Printer - " + pss.getName());
DocPrintJob job = pss.createPrintJob();
DocAttributeSet das = new HashDocAttributeSet();
Doc document = new SimpleDoc(new FileInputStream(new File(PDF)), DocFlavor.INPUT_STREAM.AUTOSENSE, das);
// new htmldo
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
job.print(document, pras);
}
}
您可能会收到NoSuchMethodFoundError等运行时错误( 错误:
java.lang.NoSuchMethodError:com.lowagie.text.pdf.BaseFont.getCharBBox(C)[I with itext 2.1.7
因为上述网站提供的未编译版本的库。 如果您遇到任何此类错误,请使用不同REPO中的core-renderer.jar
renderer.createPDF(os); 为什么总是这个标志我一个错误?
"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.