【问题标题】:JAVA: passing an input or output stream to ITextRenderer (xhtml to pdf converter)JAVA:将输入或输出流传递给 ITextRenderer(xhtml 到 pdf 转换器)
【发布时间】:2013-03-11 18:35:06
【问题描述】:

我想将我的 XHTML 文本转换为 PDF。我将其转换为FileOutputStream,但我找不到将其作为输入传递给ITextRenderer 的方法。这可能吗?如何实现?

代码:

String finalXhtml=xhtmlparser(xmlText);
ByteArrayInputStream finalXhtmlStream = new ByteArrayInputStream(finalXhtml.getBytes());

 String HTML_TO_PDF = "ConvertedFile.pdf";
 OutputStream os = new FileOutputStream(HTML_TO_PDF);       

  ITextRenderer renderer = new ITextRenderer();
      //   renderer.loadDocument(finalXhtmlStream);  i can pass a file here can i pass an input or output stream ?     
         renderer.layout();
         renderer.createPDF(os) ;    
         os.close();
   System.out.println("done.");

注意:我可以将文件传递给ITextRenderer,如下所示:

 String File_To_Convert = "report.xhtml";
 String url = new File(File_To_Convert).toURI().toURL().toString();
 String HTML_TO_PDF = "ConvertedFile.pdf";
 OutputStream os = new FileOutputStream(HTML_TO_PDF);       

 ITextRenderer renderer = new ITextRenderer();
     renderer.setDocument(url);      
     renderer.layout();
     renderer.createPDF(os);
 os.close();
   System.out.println("done.");

如果我需要提供更多详细信息,请告诉我。

【问题讨论】:

  • renderer.loadDocument() 需要文件,但我想传递一个 ByteArrayInputStream 或 ByteArrayOutputStream 我可以这样做吗?

标签: java itext inputstream outputstream pdf-conversion


【解决方案1】:

我正在使用以下代码通过以下代码将 HTML 数据导出为 PDF:

renderer.setDocumentFromString(htmls.toString());
renderer.layout();
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + ".pdf\"");
renderer.createPDF(outputStream);
renderer.createPDF(fos);

现在我在这里使用内联 CSS 来使用样式生成 PDF,但是有什么选项可以通过加载外部 CSS 来使用 setDocumentFromString() 函数。

【讨论】:

    【解决方案2】:

    我假设您使用的是Flying Saucer。 ITextRenderer 有一个方法可以做类似的事情:

    public void setDocumentFromString(String content) {
        InputSource is = new InputSource(new BufferedReader(new StringReader(content)));
        Document dom = XMLResource.load(is).getDocument();
    
        setDocument(dom, null);
    }
    

    调整你的代码,你想要的应该是这样的:

    String finalXhtml=xhtmlparser(xmlText);
    ByteArrayInputStream finalXhtmlStream = new ByteArrayInputStream(finalXhtml.getBytes());
    
    String HTML_TO_PDF = "ConvertedFile.pdf";
    OutputStream os = new FileOutputStream(HTML_TO_PDF);      
    
    Document document = XMLResource.load(finalXhtmlStream).getDocument();
    
    ITextRenderer renderer = new ITextRenderer();
    renderer.setDocument(document, null);
    renderer.layout();
    renderer.createPDF(os) ;    
    os.close();
    

    当然,您也可以这样做并一起跳过输入流:

    renderer.setDocumentFromString(finalXhtml);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 2013-04-18
      相关资源
      最近更新 更多