当前位置: 首页 > 知识库问答 >
问题:

使用飞碟以PDF格式打印图像

潘佐
2023-03-14

使用飞碟以PDF格式打印图像。

超文本标记语言代码:

<?xml version="1.0" encoding="utf-8" ?>
<html>
    <p>
        <img src="Smallcheck.jpg" width="20" height="21"/>
    </p>
</html> 

当我使用飞碟将HTML转换为PDF时。生成的PDF不会打印图像。

var outputForPdfStream = new this.ByteArrayOutputStream();

// tidy the html
var domdoc =  this.domDocument;
var iTidy = new this.tidy();
iTidy.setShowWarnings(false);
iTidy.setXmlTags(false);
iTidy.setInputEncoding("UTF-8");
iTidy.setOutputEncoding("UTF-8");
iTidy.setXHTML(true);//
iTidy.setMakeClean(true);
domdoc = iTidy.parseDOM(inputStream, outputForPdfStream);

// Convert the document to XHTML panel and then rendering it into a PDF
var xhtmlPanel = new this.XHTMLPanel();
xhtmlPanel.setDocument(domdoc);

var renderer = new this.iTextRenderer();
renderer.setDocument(xhtmlPanel.getDocument(), null);
renderer.layout();
renderer.createPDF(bos);
bos.flush();
inputStream.close();
this.debug("INPUT STREAM" + inputStream);

var byteArray = bos.toByteArray();
var encodedString  = this.StringUtil.base64Encode(byteArray);
this.debug("Encoded String" + encodedString);

我需要使用任何特定的软件包来打印PDF格式的图像吗。如果你有任何问题,请告诉我。

共有2个答案

岳枫
2023-03-14

你需要为你的图像设置上下文和相对路径,

renderer.setDocument(xhtmlPanel.getDocument(), null);

应更改为,

renderer.setDocument(xhtmlPanel.getDocument(), "http:\\mywebsite:8080\images");

您的图像应该位于上下文中指定的文件夹下,您可以在src中使用图像的相对路径,

<?xml version="1.0" encoding="utf-8" ?>
<html>
    <p>
        <img src="check/Smallcheck.jpg" width="20" height="21"/>
    </p>
</html> 
魏宏邈
2023-03-14

为了将图像嵌入飞碟生成的PDF中,

1)将图像转换为base64编码字符串。

Path path = Paths.get("src/main/resources/static/images/mastercard.png");
String base64Image = convertToBase64(path);

函数将存储在如上所示路径中的图像转换为base64编码字符串

private String convertToBase64(Path path) {
    byte[] imageAsBytes = new byte[0];
    try {
      Resource resource = new UrlResource(path.toUri());
      InputStream inputStream = resource.getInputStream();
      imageAsBytes = IOUtils.toByteArray(inputStream);

    } catch (IOException e) {
      System.out.println("\n File read Exception");
    }

    return Base64.getEncoder().encodeToString(imageAsBytes);
  }

2) 在thymeleaf上下文中设置base64编码图像

    Context context = new Context();
    String image = "data:image/png;base64, " + base64Image;
    context.setVariable("image",  image);

    String html = templateEngine.process("template", context);

3)在超文本标记语言中,设置图像的值如下所示:

<img th:src="${image}" style="width: 200px; height=100px"/>

4) 最后,将HTML模板呈现为PDF

  ITextRenderer renderer = new ITextRenderer();
  renderer.setDocumentFromString(html); // html -> String created in Step 2
  renderer.layout();
  final ByteArrayOutputStream baos = new ByteArrayOutputStream();
  renderer.createPDF(baos)

现在,您有了生成的PDF的byteArrayOutputStream,您可以使用它选择将它们存储到文件服务器或以您选择的格式将其提供给客户端。

 类似资料:
  • 我正在使用飞碟将超文本标记语言转换为PDF。我想在我的超文本标记语言中使用像CheckBox这样的超文本标记语言输入属性,并将其打印在生成的PDF中。但是当我用html编写复选框代码并生成PDF时,没有用PDF打印的复选框。 套餐: 我需要使用任何特定的包来打印PDF中的复选框吗。如果你有任何问题,请告诉我。任何帮助都将不胜感激。非常感谢。

  • 我试图通过使用飞碟(9.0.7)库从XHTML生成一个PDF文件。文本和表格按预期呈现,但图像(png)不会显示在最终的PDF中。图像由绝对文件路径引用(例如< code > 我的java代码如下: 任何帮助都将不胜感激。

  • 我使用的罐子来自maven repo 我正在测试的代码来自以前的堆栈解决方案 我担心它可能过时了,因为图书馆被贬值了。测试以下代码时: 这一行我有以下错误:

  • 我正在尝试使用flyingsaucer将html文档保存为PDF,但当我查看Adobe Reader中的文档属性(页面大小:8.26 x 11.69英寸)时,生成的文档最终总是具有A4维度。 我确实阅读了文档,我正在传递css@page{size:letter;}风格虽然它确实对输出有影响,但在Adobe Reader中,页面大小始终保持在8.26 x 11.69。例如,如果我将页面大小设置为le

  • 我有2个(或以上)海图,需要打印成PDF格式。我用PDf导出表单highchrt,它可以打印但只是打印1张图表。我的代码怎么了?或者有什么解决我问题的办法吗? 这是我的密码。 null null

  • 我正在使用飞碟生成pdf文件。我想要第一页,第二页是横向模式,其余的是纵向模式。所以,我这样做: 但是它会自动在第一个pdf文件中创建2个空白页?如何修复它?