如何以Java实现网页截图技术根据URL得到网页快照.doc

上传人:laozhun 文档编号:2881184 上传时间:2023-03-01 格式:DOC 页数:8 大小:40.50KB
返回 下载 相关 举报
如何以Java实现网页截图技术根据URL得到网页快照.doc_第1页
第1页 / 共8页
如何以Java实现网页截图技术根据URL得到网页快照.doc_第2页
第2页 / 共8页
如何以Java实现网页截图技术根据URL得到网页快照.doc_第3页
第3页 / 共8页
如何以Java实现网页截图技术根据URL得到网页快照.doc_第4页
第4页 / 共8页
如何以Java实现网页截图技术根据URL得到网页快照.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《如何以Java实现网页截图技术根据URL得到网页快照.doc》由会员分享,可在线阅读,更多相关《如何以Java实现网页截图技术根据URL得到网页快照.doc(8页珍藏版)》请在三一办公上搜索。

1、今天看到某网友关于“如何以Java实现网页截图技术”的咨询帖,由于出现该咨询的地点非常不适合较长回复,故以博文形式回答。事实上,如果您想以Java实现网页截图,也就是“输入一段网址,几秒钟过后就能截取一张网页缩略图”的效果。那么,您至少有3种方式可以选择。 1、最直接的方式使用Robot方法详解:该方法利用Robat提供的强大桌面操作能力,硬性调用浏览器打开指定网页,并将网页信息保存到本地。优势:简单易用,不需要任何第三方插件。缺点:不能同时处理大量数据,技术含量过低,属于应急型技巧。实现方法:使用如下代码即可。Java代码 public static 

2、void main(String args) throws MalformedURLException,          IOException, URISyntaxException, AWTException       /此方法仅适用于JdK1.6及以上版本      Desktop.getDeskt

3、op().browse(              new URL(;    Robot robot = new Robot();      robot.delay(10000);      Dimension d = 

4、new Dimension(Toolkit.getDefaultToolkit().getScreenSize();      int width = (int) d.getWidth();      int height = (int) d.getHeight();      /最大化浏览器   

5、   robot.keyRelease(KeyEvent.VK_F11);      robot.delay(2000);      Image image = robot.createScreenCapture(new Rectangle(0, 0, width,          &n

6、bsp;   height);      BufferedImage bi = new BufferedImage(width, height,              BufferedImage.TYPE_INT_RGB);      Graphics&n

7、bsp;g = bi.createGraphics();      g.drawImage(image, 0, 0, width, height, null);      /保存图片      ImageIO.write(bi, jpg;, new File(;google.jpg;);  &nbs

8、p;  2、最常规的方式利用JNI,调用第三方C/C+组件方法详解:目前来讲,Java领域对于网页截图组件的开发明显不足(商机?),当您需要完成此种操作时,算得上碰到了Java的软肋。但是,众所周知Java也拥有强大的JNI能力,可以轻易将C/C+开发的同类组件引为己用。优势:实现简单,只需要封装对应的DLL文件,就可以让Java实现同类功能。劣势:同其他JNI实现一样,在跨平台时存在隐患,而且您的程序将不再属于纯Java应用。实现方法:可参见此用例,具体封装何种C/C+组件请自行选择。PS:示例来源于ACA HTML to Image Converter项目(引用JNI封

9、装:Java代码 import sun.awt.*;  import java.awt.*;  import javax.swing.*;  import java.awt.event.*;  import java.awt.*;  import java.awt.peer.*;  public class Snap      

10、static          System.loadLibrary(;Snap;);        public static void main( String argv )          Snap t_xSnap = n

11、ew Snap();      t_xSnap.Start(;, snapshot-google.png;);        public native void Start(String pi_strURL, String pi_strImageName);     CPP部分的实现:Cpp代码 #include&n

12、bsp;  #include   #include snap.h;  #pragma comment(lib,;atl.lib;)  #import ./././acawebthumb.dll; no_namespace  JNIEXPORT void JNICALL Java_Snap_Start(JNIEnv *pEnv, jobject, jstring pi_strUr

13、l, jstring pi_strFileName)      CoInitialize(0);    _bstr_t t_strUrl = pEnv-;GetStringUTFChars(pi_strUrl, 0);    _bstr_t t_strFileName = pEnv-;GetStringUTFChars(pi_strFileName, 0);

14、        IThumbMakerPtr HTML_Converter = NULL;    HRESULT hr = HTML_Converter.CreateInstance(L;ACAWebThumb.ThumbMaker;);        if (SUCCEEDED(hr)   &nb

15、sp;       HTML_Converter-;SetURL(t_strUrl);      if ( 0 = HTML_Converter-;StartSnap() )        HTML_Converter-;SaveImage(t_strFileName);     &nbs

16、p;  if (HTML_Converter)      HTML_Converter.Release();    CoUninitialize();              以该组件图像化yahoo界面的效果图: 3、最扎实的方法自行解析HTML标记,并将其图像化方法详解:众所周知,HTML之所以在浏览器中以具体的

17、网页格式出现,并非服务器端传了一整个应用到客户端,而是源自于浏览器对于客户端自行解析的结果。因此,只要我们将对应的解析一一实现,那么将网页图形化,就将不是什么难事。优势:纯Java实现,一劳永逸,一旦开发完成则永远通用,而且有一定的商用价值。劣势:开发费时,且需要针对不同语法做精确分析,才能保证输出的基本正确。尤其在涉及到JavaScript解析时,难度将尤其增大。实现方法:目前尚无具体案例可供参考。但是,由于Java有jdic之类的浏览器项目存在(而如果自行解析,那么您需要建立HTML解析器(或使用第三方的,万幸Java在这方面的组件很多),了解Java2D机制,了解何时该使用drawStr

18、ing绘制文字,何时又该使用drawImage插入图片等等。 补充:这是一个利用内置浏览器截图的示例,使用了DJNativeSwing组件。示例工程下载地址(Eclipse工程,含lib):Java代码 import java.awt.BorderLayout;  import java.awt.Dimension;  import java.awt.FlowLayout;  import java.awt.image.BufferedImage;  im

19、port java.io.File;  import java.io.IOException;  import javax.imageio.ImageIO;  import javax.swing.JFrame;  import javax.swing.JPanel;  import javax.swing.SwingUtilities;  import chrriis.dj.nativeswing.swt

20、impl.NativeComponent;  import chrriis.dj.nativeswing.swtimpl.NativeInterface;  import ponents.JWebBrowser;  import ponents.WebBrowserAdapter;  import ponents.WebBrowserEvent;  public class Main extends JPanel&n

21、bsp;      /*      *       */      private static final long serialVersionUID = 1L;      / 行分隔符  &nbs

22、p;   final static public String LS = System.getProperty(;line.separator;, n;);      / 文件分割符      final static public String FS = System.getProperty(;file.s

23、eparator;, );      /以javascript脚本获得网页全屏后大小      final static StringBuffer jsDimension;            static         &n

24、bsp; jsDimension = new StringBuffer();          jsDimension.append(;var width = 0;).append(LS);          jsDimension.append(;var height = 0;).append(L

25、S);          jsDimension.append(;if(document.documentElement) ).append(LS);          jsDimension.append(               &

26、nbsp;            width = Math.max(width, document.documentElement.scrollWidth);)                  .append(LS);    &

27、nbsp;     jsDimension.append(                            height = Math.max(height, document.documentElement.scrollHeight

28、);)                  .append(LS);          jsDimension.append(;).append(LS);          jsDimension.append(;if(s

29、elf.innerWidth) ).append(LS);          jsDimension.append(;  width = Math.max(width, self.innerWidth);)                  .append(L

30、S);          jsDimension.append(;  height = Math.max(height, self.innerHeight);)                  .append(LS);    &

31、nbsp;     jsDimension.append(;).append(LS);          jsDimension.append(;if(document.body.scrollWidth) ).append(LS);          jsDimension.append(    &

32、nbsp;               width = Math.max(width, document.body.scrollWidth);)                  .append(LS);   

33、       jsDimension.append(                    height = Math.max(height, document.body.scrollHeight);)        &

34、nbsp;         .append(LS);  分享到:java 实现屏幕的;拍照; |卓越的程序员是如何炼成的16:10评论 / 浏览 (0 / 1641)分类:编程语言相关推荐评论发表评论您还没有登录,请您登录后再发表评论dp.SyntaxHighlighter.HighlightAll(code, true, true);$(#main .blog_content prename=code).each(function(pre, index) / blog content

35、var post_id = 789665;var location = window.location;source_url = location.protocol + / + location.host + location.pathname + location.search;pre.writeAttribute(codeable_id, post_id);pre.writeAttribute(codeable_type, Blog);pre.writeAttribute(source_url, source_url);pre.writeAttribute(pre_index, index

36、);pre.writeAttribute(title, 如何以Java实现网页截图技术,根据URL得到网页快照););$(#main .blog_comment div).each(function(comment)/ commentvar post_id = comment.id.substr(2);$(#+comment.id+ prename=code).each(function(pre, index)var location = window.location;source_url = location.protocol + / + location.host + location.

37、pathname + location.search;source_url += # + comment.id;pre.writeAttribute(codeable_id, post_id);pre.writeAttribute(codeable_type, Post);pre.writeAttribute(source_url, source_url);pre.writeAttribute(pre_index, index);pre.writeAttribute(title, 如何以Java实现网页截图技术,根据URL得到网页快照);););code_favorites_init();fi

38、x_image_size($(div.blog_content img), 700);function quote_comment(id) new Ajax.Request(/editor/quote, parameters: id:id, type:BlogComment,onSuccess:function(response)editor.bbcode_editor.textarea.insertAfterSelection(response.responseText);Element.scrollTo(editor.bbcode_editor.textarea.element););new WeiboShare(share_buttons: $(share_weibo), img_scope: $(blog_content);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号