<script src="https://cdnjs.cloudflare.com/ajax/libs/dom-to-image/2.6.0/dom-to-image.min.js"></script>
<div id="container">
  <div id="header"></div>
  <div id="main">
    <div id="code">
      <div id="code2">
        <strong>Source code:</strong><br />
        <textarea id="codeArea" name="code" rows="10" cols="40"></textarea>
      </div>
    </div>
    <div id="html">
      <div id="html2">
        <strong>HTML:</strong><br />
        <textarea id="htmlOut" name="html" rows="10" cols="40" readonly="readonly" onClick="javascript:this.focus();this.select();"></textarea>
      </div>
    </div>
  </div>
  <div id="options">
    <p>Language:
      <select id="lexer">
        <option value="abap">ABAP</option>
        <option value="as">ActionScript</option>
        <option value="as3">ActionScript 3</option>
        <option value="ada">Ada</option>
        <option value="antlr">ANTLR</option>
        <option value="antlr-as">ANTLR With ActionScript Target</option>
        <option value="antlr-csharp">ANTLR With C# Target</option>
        <option value="antlr-cpp">ANTLR With CPP Target</option>
        <option value="antlr-java">ANTLR With Java Target</option>
        <option value="antlr-objc">ANTLR With ObjectiveC Target</option>
        <option value="antlr-perl">ANTLR With Perl Target</option>
        <option value="antlr-python">ANTLR With Python Target</option>
        <option value="antlr-ruby">ANTLR With Ruby Target</option>
        <option value="apacheconf">ApacheConf</option>
        <option value="applescript">AppleScript</option>
        <option value="aspectj">AspectJ</option>
        <option value="aspx-cs">aspx-cs</option>
        <option value="aspx-vb">aspx-vb</option>
        <option value="asy">Asymptote</option>
        <option value="ahk">autohotkey</option>
        <option value="autoit">AutoIt</option>
        <option value="awk">Awk</option>
        <option value="basemake">Base Makefile</option>
        <option value="bash">Bash</option>
        <option value="console">Bash Session</option>
        <option value="bat">Batchfile</option>
        <option value="bbcode">BBCode</option>
        <option value="befunge">Befunge</option>
        <option value="blitzmax">BlitzMax</option>
        <option value="boo">Boo</option>
        <option value="brainfuck">Brainfuck</option>
        <option value="bro">Bro</option>
        <option value="bugs">BUGS</option>
        <option value="c">C</option>
        <option value="csharp">C#</option>
        <option value="cpp">C++</option>
        <option value="c-objdump">c-objdump</option>
        <option value="ca65">ca65</option>
        <option value="cbmbas">CBM BASIC V2</option>
        <option value="ceylon">Ceylon</option>
        <option value="cfengine3">CFEngine3</option>
        <option value="cfs">cfstatement</option>
        <option value="cheetah">Cheetah</option>
        <option value="clojure">Clojure</option>
        <option value="cmake">CMake</option>
        <option value="cobol">COBOL</option>
        <option value="cobolfree">COBOLFree</option>
        <option value="coffee-script">CoffeeScript</option>
        <option value="cfm">Coldfusion HTML</option>
        <option value="common-lisp">Common Lisp</option>
        <option value="coq">Coq</option>
        <option value="cpp-objdump">cpp-objdump</option>
        <option value="croc">Croc</option>
        <option value="css">CSS</option>
        <option value="css+django">CSS+Django/Jinja</option>
        <option value="css+genshitext">CSS+Genshi Text</option>
        <option value="css+lasso">CSS+Lasso</option>
        <option value="css+mako">CSS+Mako</option>
        <option value="css+myghty">CSS+Myghty</option>
        <option value="css+php">CSS+PHP</option>
        <option value="css+erb">CSS+Ruby</option>
        <option value="css+smarty">CSS+Smarty</option>
        <option value="cuda">CUDA</option>
        <option value="cython">Cython</option>
        <option value="d">D</option>
        <option value="d-objdump">d-objdump</option>
        <option value="dpatch">Darcs Patch</option>
        <option value="dart">Dart</option>
        <option value="control">Debian Control file</option>
        <option value="sourceslist">Debian Sourcelist</option>
        <option value="delphi">Delphi</option>
        <option value="dg">dg</option>
        <option value="diff">Diff</option>
        <option value="django">Django/Jinja</option>
        <option value="dtd">DTD</option>
        <option value="duel">Duel</option>
        <option value="dylan">Dylan</option>
        <option value="dylan-console">Dylan session</option>
        <option value="dylan-lid">DylanLID</option>
        <option value="ec">eC</option>
        <option value="ecl">ECL</option>
        <option value="elixir">Elixir</option>
        <option value="iex">Elixir iex session</option>
        <option value="ragel-em">Embedded Ragel</option>
        <option value="erb">ERB</option>
        <option value="erlang">Erlang</option>
        <option value="erl">Erlang erl session</option>
        <option value="evoque">Evoque</option>
        <option value="factor">Factor</option>
        <option value="fancy">Fancy</option>
        <option value="fan">Fantom</option>
        <option value="felix">Felix</option>
        <option value="fortran">Fortran</option>
        <option value="Clipper">FoxPro</option>
        <option value="fsharp">FSharp</option>
        <option value="gas">GAS</option>
        <option value="genshi">Genshi</option>
        <option value="genshitext">Genshi Text</option>
        <option value="pot">Gettext Catalog</option>
        <option value="Cucumber">Gherkin</option>
        <option value="glsl">GLSL</option>
        <option value="gnuplot">Gnuplot</option>
        <option value="go">Go</option>
        <option value="gooddata-cl">GoodData-CL</option>
        <option value="gosu">Gosu</option>
        <option value="gst">Gosu Template</option>
        <option value="groff">Groff</option>
        <option value="groovy">Groovy</option>
        <option value="haml">Haml</option>
        <option value="haskell">Haskell</option>
        <option value="hx">haXe</option>
        <option value="html">HTML</option>
        <option value="html+cheetah">HTML+Cheetah</option>
        <option value="html+django">HTML+Django/Jinja</option>
        <option value="html+evoque">HTML+Evoque</option>
        <option value="html+genshi">HTML+Genshi</option>
        <option value="html+lasso">HTML+Lasso</option>
        <option value="html+mako">HTML+Mako</option>
        <option value="html+myghty">HTML+Myghty</option>
        <option value="html+php">HTML+PHP</option>
        <option value="html+smarty">HTML+Smarty</option>
        <option value="html+velocity">HTML+Velocity</option>
        <option value="http">HTTP</option>
        <option value="haxeml">Hxml</option>
        <option value="hybris">Hybris</option>
        <option value="idl">IDL</option>
        <option value="ini">INI</option>
        <option value="io">Io</option>
        <option value="ioke">Ioke</option>
        <option value="irc">IRC logs</option>
        <option value="jade">Jade</option>
        <option value="jags">JAGS</option>
        <option value="java">Java</option>
        <option value="jsp">Java Server Page</option>
        <option selected="selected" value="js">JavaScript</option>
        <option value="js+cheetah">JavaScript+Cheetah</option>
        <option value="js+django">JavaScript+Django/Jinja</option>
        <option value="js+genshitext">JavaScript+Genshi Text</option>
        <option value="js+lasso">JavaScript+Lasso</option>
        <option value="js+mako">JavaScript+Mako</option>
        <option value="js+myghty">JavaScript+Myghty</option>
        <option value="js+php">JavaScript+PHP</option>
        <option value="js+erb">JavaScript+Ruby</option>
        <option value="js+smarty">JavaScript+Smarty</option>
        <option value="json">JSON</option>
        <option value="julia">Julia</option>
        <option value="jlcon">Julia console</option>
        <option value="kconfig">Kconfig</option>
        <option value="koka">Koka</option>
        <option value="kotlin">Kotlin</option>
        <option value="lasso">Lasso</option>
        <option value="lighty">Lighttpd configuration file</option>
        <option value="lhs">Literate Haskell</option>
        <option value="live-script">LiveScript</option>
        <option value="llvm">LLVM</option>
        <option value="logos">Logos</option>
        <option value="logtalk">Logtalk</option>
        <option value="lua">Lua</option>
        <option value="make">Makefile</option>
        <option value="mako">Mako</option>
        <option value="maql">MAQL</option>
        <option value="mason">Mason</option>
        <option value="matlab">Matlab</option>
        <option value="matlabsession">Matlab session</option>
        <option value="minid">MiniD</option>
        <option value="modelica">Modelica</option>
        <option value="modula2">Modula-2</option>
        <option value="trac-wiki">MoinMoin/Trac Wiki markup</option>
        <option value="monkey">Monkey</option>
        <option value="moocode">MOOCode</option>
        <option value="moon">MoonScript</option>
        <option value="mscgen">Mscgen</option>
        <option value="mupad">MuPAD</option>
        <option value="mxml">MXML</option>
        <option value="myghty">Myghty</option>
        <option value="mysql">MySQL</option>
        <option value="nasm">NASM</option>
        <option value="nemerle">Nemerle</option>
        <option value="newlisp">NewLisp</option>
        <option value="newspeak">Newspeak</option>
        <option value="nginx">Nginx configuration file</option>
        <option value="nimrod">Nimrod</option>
        <option value="nsis">NSIS</option>
        <option value="numpy">NumPy</option>
        <option value="objdump">objdump</option>
        <option value="objective-c">Objective-C</option>
        <option value="objective-c++">Objective-C++</option>
        <option value="objective-j">Objective-J</option>
        <option value="ocaml">OCaml</option>
        <option value="octave">Octave</option>
        <option value="ooc">Ooc</option>
        <option value="opa">Opa</option>
        <option value="openedge">OpenEdge ABL</option>
        <option value="perl">Perl</option>
        <option value="php">PHP</option>
        <option value="plpgsql">PL/pgSQL</option>
        <option value="psql">PostgreSQL console (psql)</option>
        <option value="postgresql">PostgreSQL SQL dialect</option>
        <option value="postscript">PostScript</option>
        <option value="pov">POVRay</option>
        <option value="powershell">PowerShell</option>
        <option value="prolog">Prolog</option>
        <option value="properties">Properties</option>
        <option value="protobuf">Protocol Buffer</option>
        <option value="puppet">Puppet</option>
        <option value="pypylog">PyPy Log</option>
        <option value="python">Python</option>
        <option value="python3">Python 3</option>
        <option value="py3tb">Python 3.0 Traceback</option>
        <option value="pycon">Python console session</option>
        <option value="pytb">Python Traceback</option>
        <option value="qml">QML</option>
        <option value="racket">Racket</option>
        <option value="ragel">Ragel</option>
        <option value="ragel-c">Ragel in C Host</option>
        <option value="ragel-cpp">Ragel in CPP Host</option>
        <option value="ragel-d">Ragel in D Host</option>
        <option value="ragel-java">Ragel in Java Host</option>
        <option value="ragel-objc">Ragel in Objective C Host</option>
        <option value="ragel-ruby">Ragel in Ruby Host</option>
        <option value="raw">Raw token data</option>
        <option value="rconsole">RConsole</option>
        <option value="rd">Rd</option>
        <option value="rebol">REBOL</option>
        <option value="redcode">Redcode</option>
        <option value="registry">reg</option>
        <option value="rst">reStructuredText</option>
        <option value="rhtml">RHTML</option>
        <option value="RobotFramework">RobotFramework</option>
        <option value="spec">RPMSpec</option>
        <option value="rb">Ruby</option>
        <option value="rbcon">Ruby irb session</option>
        <option value="rust">Rust</option>
        <option value="splus">S</option>
        <option value="sass">Sass</option>
        <option value="scala">Scala</option>
        <option value="ssp">Scalate Server Page</option>
        <option value="scaml">Scaml</option>
        <option value="scheme">Scheme</option>
        <option value="scilab">Scilab</option>
        <option value="scss">SCSS</option>
        <option value="shell-session">Shell Session</option>
        <option value="smali">Smali</option>
        <option value="smalltalk">Smalltalk</option>
        <option value="smarty">Smarty</option>
        <option value="snobol">Snobol</option>
        <option value="sp">SourcePawn</option>
        <option value="sql">SQL</option>
        <option value="sqlite3">sqlite3con</option>
        <option value="squidconf">SquidConf</option>
        <option value="stan">Stan</option>
        <option value="sml">Standard ML</option>
        <option value="systemverilog">systemverilog</option>
        <option value="tcl">Tcl</option>
        <option value="tcsh">Tcsh</option>
        <option value="tea">Tea</option>
        <option value="tex">TeX</option>
        <option value="text">Text only</option>
        <option value="treetop">Treetop</option>
        <option value="ts">TypeScript</option>
        <option value="urbiscript">UrbiScript</option>
        <option value="vala">Vala</option>
        <option value="vb.net">VB.net</option>
        <option value="velocity">Velocity</option>
        <option value="verilog">verilog</option>
        <option value="vgl">VGL</option>
        <option value="vhdl">vhdl</option>
        <option value="vim">VimL</option>
        <option value="xml">XML</option>
        <option value="xml+cheetah">XML+Cheetah</option>
        <option value="xml+django">XML+Django/Jinja</option>
        <option value="xml+evoque">XML+Evoque</option>
        <option value="xml+lasso">XML+Lasso</option>
        <option value="xml+mako">XML+Mako</option>
        <option value="xml+myghty">XML+Myghty</option>
        <option value="xml+php">XML+PHP</option>
        <option value="xml+erb">XML+Ruby</option>
        <option value="xml+smarty">XML+Smarty</option>
        <option value="xml+velocity">XML+Velocity</option>
        <option value="xquery">XQuery</option>
        <option value="xslt">XSLT</option>
        <option value="xtend">Xtend</option>
        <option value="yaml">YAML</option>
      </select>
      Style:
      <select id="style">
        <option value="autumn">autumn</option>
        <option value="borland">borland</option>
        <option value="bw">bw</option>
        <option selected="selected" value="colorful">colorful</option>
        <option value="default">default</option>
        <option value="emacs">emacs</option>
        <option value="friendly">friendly</option>
        <option value="fruity">fruity</option>
        <option value="manni">manni</option>
        <option value="monokai">monokai</option>
        <option value="murphy">murphy</option>
        <option value="native">native</option>
        <option value="pastie">pastie</option>
        <option value="perldoc">perldoc</option>
        <option value="rrt">rrt</option>
        <option value="tango">tango</option>
        <option value="trac">trac</option>
        <option value="vim">vim</option>
        <option value="vs">vs</option>
      </select>
      <input name="linenos" id="linenos" type="checkbox" value="1" checked="checked" /><label for="linenos">Line numbers</label>
      <br />
      CSS:
      <input type="text" id="divstyles" name="divstyles" value="border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;" />
      <input name="Highlight" id="Highlight" onclick="Highlight();" type="button" value="Highlight!" />
    </p>
  </div>

  <div id="preview">
    <p>
      <strong>Preview:</strong>
    <div id="viewOut"></div>
    </p>
  </div>
  <div>
    <p>擷取從<input id="n1" type="number" value="1" min="1" max="100" step="1">
      行,到<input id="n2" type="number" value="5" min="1" max="100" step="1"><input name="toImg" id="toImg" onclick="split_to_html_toImg();" type="button" value="getImg!" />
    </p>
  </div>
  <div id="div2"></div>
  <div id="div1"></div>
  
</div>
 body, html {
        margin:0;
        padding:0;
        color:#333;
        background:#fff;
        font-family:Verdana,Helvetica,Arial,sans-serif;
      }
      input {
          margin:.5em 0;
      }
      #container {
          width:750px;
          margin:1em auto;
      }
      #container > div {
          margin:auto 1em;
      }
      #code {
          float:left;
          width:50%;
      }
      #html {
          float:right;
          width:50%;
      }
      #code2 {
          margin-right:1em;
      }
      #html2 {
          margin-left:1em;
      }
      #main textarea {
          width:100%;
          height:10em;
      }
      #html2 textarea {
          float:right;
      }
      #options {
          clear:both;
      }
      #divstyles {
          width:50%;
      }
      #preview {
          padding-bottom: 3em;
      }
      #footer {
          border-top:1px dotted #000;
      }
      #footer p {
          text-align:center;
          font-size:75%;
      }
var lexer = "";
var style = "";
var code = "";
var linenos = "";
var divstyles = "";
var m1 = document.getElementById("htmlOut");
var v1 = document.getElementById("viewOut");
//
var k1;
var k2;
//
var n1 = "";
var n2 = "";

function Highlight() {
  $("#options #lexer option:selected").each(function () {
    //console.log($(this).html());
    //console.log($(this).val());
    lexer = "";
    lexer = $(this).val();
    console.log(lexer);
  });
  $("#options #style option:selected").each(function () {
    //console.log($(this).html());
    //console.log($(this).val());
    style = "";
    style = $(this).val();
    //console.log(style);
  });
  code = "";
  code = $("#codeArea").val();
  //console.log(code);
  linenos = "";
  if ($("#linenos").is(":checked")) {
    //console.log("checked");
    linenos = "1";
  }
  divstyles = "";
  divstyles = $("#divstyles").val();
  //console.log(divstyles);

  $.ajax({
    url:
      "https://script.google.com/macros/s/AKfycbzWnUfrDjpmaqer2OIcF1u6DVgoU1I-VOkdQm-FogcjaWWe-8zDYg6cqVpZMUP-HHUp/exec", //hilite_me_API
    method: "POST",
    data: {
      code: code,
      lexer: lexer,
      style: style,
      linenos: "1"
    },
    success: function (e) {
      //console.log(e);
      m1.value = e;
      v1.innerHTML = e;
      //console.log('m1');
      //console.log(m1);
      k1 = $("#preview div table tr td:eq(0)").html().split("\n");
      //console.log(k1.length);
      //console.log(k1[21]);     
      k2 = $("#preview div table tr td:eq(1)").html().split("\n");
      $("#n2").attr('max', k2.length-1);
      $("#n2").attr('value', k2.length-1);
    }
  });
  //
}

async function toImg(e, n1, n2) {
  //toImg
  //console.log("m1");
  //console.log(m1.value);
  var d1 = document.getElementById("div1");
  var d2 = document.getElementById("div2");
  d1.style.visibility = "visible";
  d1.innerHTML = e;
  var config = { quality: 0.95 ,bgcolor: '#ffffff'};
  var dataUri = await domtoimage.toJpeg(d1, config).then((dataUrl) => dataUrl);
  //console.log(dataUri);
  //取得圖片尺寸
  var x;
  var y;
  const img = new Image();
  img.onload = function () {
    x = this.width;
    y = this.height;
    //console.log(this.width + "x" + this.height);
  };
  img.src = dataUri;
  // 開新視窗 顯示圖片
  imgSrc = dataUri;
  myWindow = window.open("", "", "width=" + x + ",height=" + y);
  myWindow.document.write(
    '<a href="' +
      dataUri +
      '" download="' +
      n1 +
      "-" +
      n2 +
      ".jpg" +
      '"><img src="' +
      imgSrc +
      '" title="' +
      n1 +
      "-" +
      n2 +
      '" /></a>'
  );
  d2.innerHTML = '<a href="' +
      dataUri +
      '" download="' +
      n1 +
      "-" +
      n2 +
      ".jpg" +
      '"><img src="' +
      imgSrc +
      '" title="' +
      n1 +
      "-" +
      n2 +
      '" /></a>';
  myWindow.focus();
  //隱藏div1
  d1.style.visibility = "hidden";
}
//
function split_to_html(a, b) {
  var a = a - 1;
  var b = b - 1;
  if (typeof b == "undefined") {
    if (a == 0) {
      var o1 =
        "<table><tr><td>" + k1[a] + "</td><td>" + k2[a] + "</td></tr></table>";
    } else {
      var o1 =
        '<table><tr><td><pre style="margin: 0; line-height: 125%">' +
        k1[a] +
        '</pre></td><td><pre style="margin: 0; line-height: 125%">' +
        k2[a] +
        "</pre></td></tr></table>";
    }
    //console.log(o1);
    //toImg(o1);
    return o1;
  } else {
    //console.log('o2');
    var m1 = "";
    var m2 = "";
    if (a == 0) {
      for (var i = a; i <= b; i++) {
        m1 = m1 + k1[i] + "\n";
        m2 = m2 + k2[i] + "\n";
      }
      m = m1 + "</td><td>" + m2;
      o2 = "<table><tr><td>" + m + "</td></tr></table>";
      //console.log(o2);
    } else {
      for (var i = a; i <= b; i++) {
        m1 = m1 + k1[i] + "\n";
        m2 = m2 + k2[i] + "\n";
      }
      m = m1 + '</pre></td><td><pre style="margin: 0; line-height: 125%">' + m2;
      o2 =
        '<table><tr><td><pre style="margin: 0; line-height: 125%">' +
        m +
        "</pre></td></tr></table>";
      //console.log(o2);
    }
    //toImg(o2);
    return o2;
  }
}
//
function split_to_html_toImg() {
  n1 = "";
  n1 = parseInt($("#n1").val());
  n2 = "";
  n2 = parseInt($("#n2").val());
  console.log(n1);
  console.log(n2);
  //
  if (n1 > n2) {
    return false;
  }
  //
  var h1 = split_to_html(n1, n2);
  toImg(h1, n1, n2);
}

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js