【问题标题】:Print HTML Files using Java without PRINT dialogue使用 Java 打印 HTML 文件而不使用 PRINT 对话框
【发布时间】:2015-08-30 14:43:37
【问题描述】:

我正在尝试使用 JAVA PrintServices API 打印非常简单的 HTML 文件。

这就是我为此写的 -

public class WebTest {
public static void main(String args[]) throws Exception {
    String filename = "C:/tmp/PrintTest.html";
    PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
    DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
    PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
    if (defaultService != null) {
        DocPrintJob job = defaultService.createPrintJob();
        FileInputStream fis = new FileInputStream(filename);
        DocAttributeSet das = new HashDocAttributeSet();
        Doc doc = new SimpleDoc(fis, flavor, das);
        job.print(doc, pras);
    }
    System.exit(0);
}

但是,我的输出文件格式不正确 - 这是我在打印输出中看到的 -

<!DOCTYPE html>
<html>
 <body>
  <h2>Hello World.</h2>
 </body>
</html>

我想看到输出为 -

Hello World.

我也尝试过为此使用 Microsoft 命令 - "C:\\Program Files\\Microsoft Office\\Office14\\msohtmed.exe\" /p C:/tmp/PrintTest.html

但是它提示我打印框,我想摆脱它。

我的目标只是获得正确的打印输出。

请提出合适的选择。

我已经参考了其他链接,但找不到我正在寻找的确切答案。

非常感谢您的帮助。

【问题讨论】:

    标签: java html printing dialog


    【解决方案1】:

    HTML 页面应在打印前呈现(计算页边距、在页面上排列文本等...)。渲染和打印 html 页面最简单的方法是使用JEditorPane(在下面的 sn-p 中没有任何额外的格式、属性和确认对话框):

    public static void main(String[] args) throws PrintException, IOException, PrinterException {
        JEditorPane editorPane = new JEditorPane();
        editorPane.setEditable(false);
        URL urlToPage = new File("/home/me/Temp/page.html").toURI().toURL();
        editorPane.setPage(urlToPage);  
        editorPane.print(null, null, false, PrintServiceLookup.lookupDefaultPrintService(), null, false);
    }
    

    【讨论】:

    • 感谢您的回复。是的,它适用于简单的 HTML。是否可以将其扩展到稍微复杂的 HTML,比如 HTML 有一些表格和级联样式表。当我用 CSS 尝试相同的 HTML 代码时,它给了我错误 - 线程“Thread-2”中的异常 java.lang.ArrayIndexOutOfBoundsException: 9 at javax.swing.text.CompositeView.getView(CompositeView.java:143) at javax.swing .text.View.forwardUpdate(View.java:1130) at javax.swing.text.BoxView.forwardUpdate(BoxView.java:223) at javax.swing.text.View.changedUpdate(View.java:767)
    • 对于复杂的 HTML,你需要更复杂的 HTML 渲染引擎(如 CSSBox)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多