Wolfram mathematica 将文本或html插入.notebook

Wolfram mathematica 将文本或html插入.notebook,wolfram-mathematica,Wolfram Mathematica,我想将网页的输出插入笔记本(本质上是文本或html“屏幕捕获”)。不需要它是“活的”,它只是作为参考 理想情况下,它会像在web浏览器上一样出现。我希望它是不可计算的,并且我不希望前端试图将其格式化为一个错误百出的Mathematica表达式 (编辑添加:创建一个单元格并执行“单元格->转换为->文本显示”是一种很好的显示文本的方法,而无需前端重新格式化。我想知道这是否是一种“正确”的方法,或者是否有更好的方法,尤其是如果我也想使用html格式或图形)据我所知,Mathematica无法呈现HT

我想将网页的输出插入笔记本(本质上是文本或html“屏幕捕获”)。不需要它是“活的”,它只是作为参考

理想情况下,它会像在web浏览器上一样出现。我希望它是不可计算的,并且我不希望前端试图将其格式化为一个错误百出的Mathematica表达式


(编辑添加:创建一个单元格并执行“单元格->转换为->文本显示”是一种很好的显示文本的方法,而无需前端重新格式化。我想知道这是否是一种“正确”的方法,或者是否有更好的方法,尤其是如果我也想使用html格式或图形)

据我所知,Mathematica无法呈现HTML页面。使用html,您可以从基于html的网站和文件中获取各种信息。一种选择是获取基于文本的网站版本,如下所示:

Import["http://reference.wolfram.com/mathematica/guide/Mathematica.html", "Plaintext"]

一种可能是将网页转换为PDF,然后导入此PDF文件。此方法应提供原始页面的矢量图像,该图像看起来与您在浏览器中看到的类似

另一种可能是在浏览器中制作该网页的屏幕截图,并将其插入笔记本中。通过在支持光栅格式转换的虚拟打印机上打印网页,还可以制作比显示器分辨率更高的“屏幕截图”(LEADTOOLS ePrint是最好的之一)


编辑

除了手工制作屏幕截图,另一个有趣的选择是使用谷歌网页缩略图服务。我对此不太了解,但您可以将其编码到任何带有URL的网页的JavaScript JPEG缩略图中,如

此URL提供具有以下元素的文件:

[“数据:图像/jpeg;base64,”]

这里是编码JPEG图像数据的首字母缩写)

我们可以通过以下方式在Mathematica中提取
数据

data = Import[
  "http://www.google.com/webpagethumbnail?r=2&f=2&s=300:585&query=\
wolfram&hl=ru&gl=us&c=11&d=http%3A%2F%2Fintegrals.wolfram.com%2F&b=1&\
j=google.vs.r&a=D57"];

imageData = 
  StringReplace[
   data, __ ~~ "[\"data:image/jpeg;base64," ~~ x__ ~~ "\"]," ~~ __ :> 
    x]

我不知道如何进一步转换图像数据,但这只是了解JPEG格式规范的问题…

如果您只需要文本(可能带有样式),请在网页上选择文本,在Mathematica(Mac上的cmd-7)中创建文本单元格,然后粘贴。

如果您使用的是OS X,ctrl+shift+cmd+4会导致光标变为一个十字,旁边是当前坐标;在屏幕上选择任意矩形区域会将其复制到剪贴板,从中可以将其粘贴到mma(作为光栅图形)

当然,在其他操作系统中也有这样做的方法。

如果您使用的是Windows(使用.NET),那么您可以将Mathematica的NETLink功能与该类结合使用,以捕获网页的屏幕截图:

Needs["NETLink`"]
LoadNETType["System.Drawing.Imaging.ImageFormat", AllowShortContext -> False]
LoadNETType["System.Windows.Forms.WebBrowserReadyState", AllowShortContext -> False]

Options[dotNetBrowserScreenshot] = {Width -> 1024, Height -> Automatic};
dotNetBrowserScreenshot[uri_, OptionsPattern[]] :=
  NETBlock @ Module[{browser, bitmap, tempFile, image, bounds}
  , browser = NETNew["System.Windows.Forms.WebBrowser"]
  ; browser@Width = OptionValue[Width]
  ; browser@ScrollBarsEnabled = False
  ; browser@Navigate[uri]
  ; tempFile = Close@OpenWrite[]
  ; While[browser@ReadyState =!= System`Windows`Forms`WebBrowserReadyState`Complete
    , Pause[0.05]
    ]
  ; bounds = browser@Document@Body@ClientRectangle
  ; browser@Height = OptionValue[Height] /. Automatic -> bounds@Height
  ; bitmap = NETNew["System.Drawing.Bitmap", browser@Width, browser@Height]
  ; browser@DrawToBitmap[bitmap, bounds]
  ; browser@Dispose[]
  ; bitmap@Save[tempFile, System`Drawing`Imaging`ImageFormat`Png]
  ; bitmap@Dispose[]
  ; image = Import[tempFile, "PNG"]
  ; DeleteFile[tempFile]
  ; image
  ]
样本使用:


使用
Height->Automatic
(默认设置)可以捕获完整的网页。请注意,屏幕截图以较小的放大率显示。

是的,您还可以获得更多结构化输入。例如,如果你的站点有表格,你可以使用“数据”或“完整数据”而不是“纯文本”将其列在列表中,如果你想要html源代码,请使用“源代码”等“…Mathematica无法呈现html页面…”很可能就是答案;哦,好吧。在我的情况下,我无法从网站导入,因为我感兴趣的是计算的输出(即,我想要的输出没有静态URL)。我喜欢这个<代码>导入[”http://reference.wolfram.com/mathematica/guide/Mathematica.\html”、“Elements”]提供了选项列表{“数据”、“完整数据”、“超链接”、“图像”、“图像URL”、“明文”、“源代码”、“标题”、“XMLObject”}。例如,
Import[”http://reference.wolfram.com/mathematica/guide/Mathematica.\html”,“Images”]
@Daniel不需要静态URL。如果您的URL应该包含动态计算的内容,那么这并不太难做到。示例:导入["@enedene结构化输出不会比纯文本更接近页面呈现。我没有想到这一点。如果我可以复制粘贴它就好了,但我会尝试打印到PDF并导入。根据您的浏览器,您可能会找到一个扩展,它将截取页面的屏幕并将其放在剪贴簿上ard。然后将其粘贴到Mathematica中。从Mathematica 6开始,您可以使用
import[url,{“base64”,“JPEG”}]
导入base64编码的JPEG web资源。在Mathematica的linux版本上,我还无法找出“cmd-7”的等效项。您所做的工作是否等同于创建一个单元格,然后再执行“”Cell->Convert To->Text Display“a la the edit in my question?”@Daniel在Windows(可能是Linux)下创建新文本单元格(并将选定单元格转换为文本单元格)的键盘组合是Alt+7。您可以在
格式->样式-
菜单中看到这种组合。在快捷方式后键入空格可以轻松选择整个窗口。还要注意的是,这只会获取屏幕上可见的页面部分。还有其他程序/浏览器扩展将获取整个页面,甚至是滚动的部分屏幕外。非常酷!+1.可以捕获整个网页吗?@Alexey是的。我已经更新了
dotNetBrowserScreenshot
的定义,以自动确定屏幕截图相对于HTML文档边界的高度。对于真正大的文档,您仍然可以指定显式的
宽度
He右键
裁剪文档的选项。