Questo NON serve per salvare HTML interattivo. SaveInteractiveHTML lo fa già. Probabilmente dovresti usarlo invece.
Quando JMP salva l'HTML con la grafica, crea una directory denominata gfx per contenere le immagini. La directory gfx conterrà le immagini per tutti i file HTML salvati nella stessa directory principale. Se invii l'HTML a qualcuno, avrà bisogno solo dei file per quell'HTML e dovrà inserire la directory gfx e l'HTML nella stessa posizione. Funziona abbastanza bene se hai un server dove puoi inserirli, ma non altrettanto bene se li invii via email.
Questo esempio JSL incorporerà le immagini nell'HTML utilizzando un URL di dati ( precedentemente noto come URI di dati). Il gfx non è necessario dopo la conversione perché le immagini vengono spostate nell'HTML.
@ihnleung
// https://community.jmp.com/t5/Discussions/Distribution-plots-not-showing-in-Journal-saved-as-html/m-p/475041#M71971
// asked about emailing html reports. This code is an example of how the external
// images in the gfx folder can be converted into embedded URI data.
// most browsers should support this; it makes the html bigger, of course, but
// doesn't need the images in a shared directory.
workdir = "$temp/deleteme/";// careful! this dir is deleted ...
Delete Directory( workdir );// BANG!
Create Directory( workdir );// create empty dir
//
// make a journal with some reports and save it as html with external images in the gfx dir
//
dt = Open( "$sample_data/big class.jmp" );
bv = dt << Bivariate( Y( :weight ), X( :height ), Fit Line );
bv << journal;
bv << closewindow;
ow = dt << Oneway( Y( :height ), X( :sex ), Means( 1 ), Mean Diamonds( 1 ) );
ow << journal;
ow << closewindow;
Close( dt, nosave );
Current Journal() << savehtml( workdir || "x.html" );
Current Journal() << closewindow;
//
// load the html just saved above and embed the images in the gfx directory
//
html = Load Text File( workdir || "x.html" );// get the journal's html
snips = {}; // collect the snipped up html here
rc = Pat Match(// loop through the html, snipping it up into 'not file' and 'file' sections
html, // the html that needs the files converted into URI (inline pictures)
Pat Repeat(
Pat Arb() >> txt // txt holds a snip of html that is not a picture file name
+ // text before a filename, above, is followed by a filename (or the end), below
(
("<IMG src="\!" />> file + "\!"") // file holds a picture name
| // alternative at the end, there is no filename
Pat R Pos( 0 ) >> file // made it to the end of the text, file is "" in this case
) + //
Pat Test( //
Insert Into( snips, txt ); // first snip
If( file != "", // second snip, except not at the end
Insert Into( // replace the snipped part with embedded data
snips, // https://stackoverflow.com/questions/6826390/how-to-convert-image-to-data-uri-for-html-with-c
"<IMG src="\!" image="" />
<P>Sembra che JSL potrebbe essere danneggiato (& due punti; invece di:) a causa dell'html all'interno di html... il file allegato potrebbe funzionare meglio.</P>
<P> </P>Quando voglio avere report senza cartelle gfx, di solito creo un codice html interattivo e poi lo spezzo di proposito, ma questo aggiungerà molto testo non necessario al file .html che non è necessario (potrebbe sembrare un po' più carino, ma di solito lo faccio non ne ho bisogno). Ho fatto qualcosa di simile inviando report JMP con PowerShell utilizzando Send-MailMessage con immagini incorporate (ho modificato le parti di html con
con cid:).
Ispirato da questo post ho scritto del codice che cerca di evitare la creazione della cartella gfx. Molto probabilmente questo non è così robusto in quanto piattaforme diverse molto probabilmente presenteranno qualche stranezza quando si utilizza << get html. Non ho (ancora...) imparato come usare Pat Match, quindi ho usato Munger() e alcune altre cose per sostituire i caratteri corretti. Lo script salverà anche diversi tipi di report HTML interattivi per vedere quanto sono grandi rispetto alle immagini incorporate.