webshot不会在html中呈现本地图像

时间:2018-01-15 10:18:13

标签: javascript html node.js phantomjs

我正在使用node-webshot和phantomjs-cli将html字符串渲染为png图像。 html包含图像标记。当src属性指向本地文件且未引发错误时,不会呈现图像。但是,当src指向http位置时,它会渲染图像。我已经尝试了所有我能想到的不同文件路径组合,例如

Sub mail()

    Dim wkb As Excel.Workbook
    Dim wks As Excel.Worksheet

    Set wkb = Excel.Workbooks("macro.xlsm")
    Set wks = wkb.Worksheets("settings")

    Dim OApp As Object, OMail As Object, signature As String
    Dim OStrTITUS As String
    Set OApp = CreateObject("Outlook.Application")
    Set OMail = OApp.CreateItem(0)

    With OMail

        .Display
         signature = OMail.body
        .To = "mymail@mail.com"
        .Subject = "Type your email subject here"
        .Display

        .body = "My email body" & vbNewLine & signature

        If .BodyFormat <> olFormatRichText Then .BodyFormat = olFormatRichText

        .Attachments.Add wkb.FullName, 999

        SendKeys "{DOWN}{DOWN}{ENTER}", True 'set classification
        SendKeys "{ENTER}", True 'send to group
        .Send
    End With

Set OMail = Nothing
Set OApp = Nothing

End Sub
但到目前为止还没有运气。有趣的是,它在我的同事的机器上工作正常,这是一台Mac但不在我的机器上是Windows,我尝试使用两台不同的Windows机器但没有成功。

以下是一些专注于此问题的简化代码:

<img src=images/mushrooms.png"/>
<img src=images//mushrooms.png"/> 
<img src=c:\images\mushrooms.png"/>
<img src=c:\\images\\mushrooms.png"/>
<img src=file://c:\\images\\mushrooms.png"/>
<img src=file://images//mushrooms.png"/>
etc..

注释掉的代码块是一个使用Web链接作为图像源的示例,但我需要它来处理本地路径。

在知道如何解决之前,是否有人遇到此问题?

由于

4 个答案:

答案 0 :(得分:3)

应该可以通过file: URI方案访问本地文件:

<img src="file:///C:/images/mushrooms.png">

根据specification

A file URL takes the form:

   file://<host>/<path>

答案 1 :(得分:1)

我认为您需要设置静态文件夹。

在代码app.use(express.static(path.join(__dirname, 'public')));

中使用类似的内容

详细了解here

答案 2 :(得分:1)

可能是因为你从不打开报价。 尝试:

<img src="images/mushrooms.png"/>

答案 3 :(得分:1)

可能是phantomjs问题,我之前遇到过错误,他们几乎没有将项目维护到这个日期。您应该考虑切换到Headless Chrome,这是新的并由Chromium团队正式维护。

编辑:这是一个例子

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.setContent('<html><head></head><body><img src="c:\\images\\mushrooms.png"/></body></html>');
  await page.screenshot({path: 'output.png'});

  await browser.close();
})();

编辑2:here's the link the node package