【问题标题】:Importing SVG into HTML将 SVG 导入 HTML
【发布时间】:2021-12-01 12:11:22
【问题描述】:

我对 HTML 很陌生...昨天才开始。我遇到的问题是,当我将 SVG 导入到我的 HTML 脚本中时,文本会被堵住。例如,Peak Metagene Plot 变为 2eak MetaCene 2lot。这几乎就像某些字母被改变了。

我制作了一个 python 脚本来读取这样的 SVG 文件(我在这里调用两个 SVG,violin 和 metagene_reads):

# violin

if args['--violin']:
    violin_file = open(args['--violin'], 'r')
    violin_txt = violin_file.read()
    violin_hide = ''
else:
    violin_txt = ''
    violin_hide = 'hidden'

# metagene reads

if args['--metagene_reads']:
    metagene_reads_file = open(args['--metagene_reads'], 'r')
    metagene_reads_txt = metagene_reads_file.read()
    metagene_reads_hide = ''
else:
    metagene_reads_txt = ''
    metagene_reads_hide = 'hidden'

然后我使用此代码输入 HTML 模板。在不粘贴整个代码的情况下,我只会列出给我奇怪文本的内容:

指定字体类型...

<!DOCTYPE html>
<html>
<h1><link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.18/css/jquery.dataTables.css">
<style>
td {
  text-align: center;
  vertical-align: middle;
}
h1 {
  font-size: 36px;
  font-weight: bold;
  font-family: Georgia, Times, "Times New Roman", serif;
}
h2 {
  font-size: 24px;
  font-family: Georgia, Times, "Times New Roman", serif;
}
h3 {
  margin-bottom: 0px;
  padding: 0px;
  margin-left: 300px;
  font-size: 24px;
  font-family: Georgia, Times, "Times New Roman", serif;
}
.initiallyHidden { display: none; }
.toggle {
    background-color: #4CAF50;
    border: none;
    color: white;
    padding: 8px 20px;
    text-align: center;
    text-decoration: none;
    display: inline-block;
    font-size: 12px;
    margin-bottom: 20px;
}

....其他内容,如表格等

下面是我导入从 python 脚本调用的 SVG 的地方(代码如上所示)。这就是我遇到奇怪的格式问题的地方。

<br>
{{metagene_reads_txt}}
<br>
<h2 {{metagene_peaks_hide}}><center>MultipleMetagene Peaks Plot</center></h2>
<p {{metagene_peaks_hide}}> 
<br>
<button class="toggle" onclick="metagenePeaks()">Click to learn more</button>
<div id="metagenePeaksID" class="initiallyHidden">
The multiple metagene peaks plot illustrates the average peak coverage of 5' UTR, CDS, and 3' UTR features.
</div>
<script>
function metagenePeaks() {
    var x = document.getElementById("metagenePeaksID");
    display = x.style.display;
    x.style.display = (display && display !== 'none') ? 'none' : 'block';
}
</script>
<br>
{{metagene_peaks_txt}}
<br>
<h2 {{violin_hide}}><center>Gene Count Violin Plot</center></h2>
<p {{violin_hide}}> 
<br>
<button class="toggle" onclick="violinFunction()">Click to learn more</button>
<div id="violinDIV" class="initiallyHidden">
The violin plot illustrates the distribution of gene counts for each sample. The gene counts were normalized for differences in library depth and log transformed.
</div>
<script>
function violinFunction() {
    var x = document.getElementById("violinDIV");
    display = x.style.display;
    x.style.display = (display && display !== 'none') ? 'none' : 'block';
}
</script>
<br>
{{violin_txt}}
<br>
</p>
</body>
</html>

任何帮助将不胜感激。

【问题讨论】:

    标签: python html svg


    【解决方案1】:

    您现在正在做的是获取 SVG 内容,如下所示:

    <svg version="1.1"
         baseProfile="full"
         width="300" height="200"
         xmlns="http://www.w3.org/2000/svg">
      <rect width="100%" height="100%" fill="black" />
      <circle cx="150" cy="100" r="90" fill="blue" />
    </svg>
    

    然后将其复制+粘贴到浏览器不理解的 HTML 中。

    相反,您应该使用类似这样的方式链接到 SVG 文件(尽管可能需要调整相对路径的托管方式):

    <img src="{{violin_file}}">
    

    如果你真的想将它嵌入代码中(我通常不推荐),你可以 Base64 编码并嵌入它,如下所示:

    import base64
    
    with open(violin_file, "rb") as image_file:
        violin_base64 = str(base64.b64encode(image_file.read()),'utf-8')
    

    然后你会做而不是{{violin_txt}}

    <img src="data:image/svg+xml;base64,{{violin_base64}}" />
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    相关资源
    最近更新 更多