2017-10-04 118 views
0

我在调整JavaFX中的HTMLEditor,我的目标是在HTMLEditor中插入本地图像。因特网上的图像没有问题,并且工作正常,但是当我试图用绝对路径插入本地图像时,它只显示着名的“X”,他没有找到它。JavaFX HTMLEditor - 插入具有绝对路径的本地图像

试了很多东西,我现在的想法是显示在下面的代码:

htmleditor.setHtmlText(
"<img src='file://C:/hi.png'/>"); 

,这导致下面的HTML代码,这是罚款,我想,我想要的结果,但它不是在渲染图像...

<html dir="ltr"><head></head><body contenteditable="true"> 
<img src="file://C:/test.png"></body></html> 

第二的想法)我也产生一个画面并将其保存在我的硬盘,称为使用绝对路径的文件,但这个如上(这里IM预期路径导致了同样的问题100%正确......)。

File file = new File(TextArea_imagePath.getText() + ".png"); 
ImageIO.write(img, "png", file); 
htmleditor.setHtmlText("<img src=' " + file.getAbsolutePath() + "'/>"); 

希望任何人都可以帮助我,猜测它是一个愚蠢的错误。

P.S: Set a local image in JavaFX HTMLeditor不可能帮助我,没有路径处理图像

回答

1

你的URI是不正确的。在file:部分(方案)之后,您必须具有一个一个斜线或三个斜线。你一定不能有两个斜杠。

以下是有效的:

  • <img src='file:/C:/hi.png'/>
  • <img src='file:///C:/hi.png'/>

以下是不是有效:

  • <img src='file://C:/hi.png'/>

原因是URI语法给出了一个方案之后的两个斜杠的特殊含义。从the URI generic syntax specification

这种 “通用URI” 语法由四个主要部分组成的序列组成:

<scheme>://<authority><path>?<query>

所以,你可以省略// <权威>完全,或者你可以指定一个空的权限,如上面的前两个例子所做的那样。

两个斜杠意味着接下来的文本C:是一个权限 - 即具有可选用户,密码和端口号的主机名。很明显,C:不是有效的主机名,即使它是,主机名在文件:URI中的确切含义也没有很好的定义。


您的第二个想法不会按原样运行。文件名不会自动构成有效的URI。您需要将其转换为URI:

htmleditor.setHtmlText("<img src=' " + file.toURI() + "'/>");