搜索
查看: 2519|回复: 7

miniblink/webkit 打印、网页截图(自动移除滚动条)

  [复制链接]

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2018-5-24 16:26:01 | 显示全部楼层 |阅读模式
web.blink( miniblink ) /web.kit 都提供了print函数可用于打印网页,
网页截图也是通过print函数实现,我刚才增加了 web.kit.bitmap, web.blink.bitmap 这2个扩展库 - 可以用一句代码完成网页截图操作(自动移除滚动条)

下面看 web.blink( miniblink )  网页截图的例子

import win.ui;
/*DSG{{*/
var winform = win.form(text="miniblink网页截图( 自动移除滚动条获取全图 )";right=455;bottom=255)
/*}}*/

winform.show();
import web.blink.form;  

//创建miniblink控件
var wb = web.blink.form(winform);

//使用浏览器打开网页
wb.go("http://www.baidu.com")
wb.wait();
//等网页打开

import web.blink.bitmap;
web.blink.bitmap(wb).save(
"/page.jpg",80);//网页截图,返回的是gdip.bitmap对象

import process;
process.execute(
"/page.jpg");

win.loopMessage();
   

评分

参与人数 1银币 +30 收起 理由
aiwen + 30 很给力!

查看全部评分

回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
 楼主| 发表于 2018-5-24 16:27:19 | 显示全部楼层

webkit网页截图( 自动移除滚动条获取全图 )

代码是一样的,web.blink 换成 web.kit 就可以
import win.ui;
/*DSG{{*/
var winform = win.form(text="webkit网页截图( 自动移除滚动条获取全图 )";right=455;bottom=255)
/*}}*/

winform.show();
import web.kit.form;  

//创建miniblink控件
var wb = web.kit.form(winform);

//使用浏览器打开网页
wb.go("http://www.baidu.com")

import web.kit.bitmap;
web.kit.bitmap(wb).save(
"/page.jpg",80);//网页截图,返回的是gdip.bitmap对象

import process;
process.execute(
"/page.jpg");

win.loopMessage();


   


回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
 楼主| 发表于 2018-5-24 16:40:23 | 显示全部楼层

webkit网页打印( 自动移除滚动条获取全图 )

wb.print(hdc,scale)
webkit提供的打印函数有2个参数:
hdc 为打印机设备DC,
scale 指定缩放比例,正数为缩放文档,负数按输出页面缩放,例如-0.5为缩放至页面的50%
下面看代码,非常简单:
import win.ui;
/*DSG{{*/
var winform = win.form(text="webkit网页打印( 自动移除滚动条获取全图 )";right=455;bottom=255)
/*}}*/

winform.show();
import web.kit.form;  

//创建miniblink控件
var wb = web.kit.form(winform);

//使用浏览器打开网页
wb.go("http://www.baidu.com")

import win.dlg.print;
var printDlg = win.dlg.print(winform);
if(!printDlg.doModal()) return;

import sys.printer;
var pdc = sys.printer.device(printDlg.hdc);
pdc.start(
   
function(hdcPrinter){
        wb.print(hdcPrinter,-1
/*负1表示缩放为页面大小*/)
    }
);

//结束打印
printDlg.free()   ;

win.loopMessage();

   


回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
 楼主| 发表于 2018-5-24 16:41:43 | 显示全部楼层

miniblink网页打印( 自动移除滚动条获取全图 )

import win.ui;
/*DSG{{*/
var winform = win.form(text="miniblink网页打印( 自动移除滚动条获取全图 )";right=455;bottom=255)
/*}}*/

winform.show();
import web.blink.form;  

//创建miniblink控件
var wb = web.blink.form(winform);

//使用浏览器打开网页
wb.go("http://www.baidu.com")

import win.dlg.print;
var printDlg = win.dlg.print(winform);
if(!printDlg.doModal()) return;

import sys.printer;
var pdc = sys.printer.device(printDlg.hdc);
pdc.start(
   
function(hdcPrinter){
        wb.print(hdcPrinter,-1
/*负1表示缩放为页面大小*/)
    }
);

//结束打印
printDlg.free()   ;

win.loopMessage();
   

回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
 楼主| 发表于 2018-5-24 16:44:42 | 显示全部楼层

web.form 网页截图

凑个全家福,附 web.form 网页截图源码。
web.form 的接口虽然很好用,但是网页截图就有些麻烦了,要用到 IViewObject2 这个COM接口。
import win.ui;
import web.form;
/*DSG{{*/
var winform = win.form(text="web.form 网页截图";right=349;bottom=249)
winform.add()
/*}}*/

//创建web窗体
var wb = web.form( winform ,0x8/*_UIFLAG_SCROLL_NO 禁用滚动条*/ );
wb.noScriptErr =
true;

import gdip;
import com.interface.IViewObject2;

snap =
function(url,filepath,q) {
    wb.go( url )
    wb.wait(
"");
   
   
var viewObject2 = com.interface.IViewObject2.Query(wb._browser)
   
   
var  height= wb.body.scrollHeight ;
   
var  width = wb.body.scrollWidth;
    winform.setPos(0,0,width,height + ::GetSystemMetrics(0x4
/*_SM_CYCAPTION窗口标题的高度*/) )
    win.setPos(wb.hwndEmbedding,0,0,width,height);
   
   
var hdc = ::GetDC(winform.hwnd)
   
var hBitmap = ::CreateCompatibleBitmap(hdc , width,  height);  
   
var hBitmapDC = ::CreateCompatibleDC(hdc);  
    ::SelectObject( hBitmapDC , hBitmap );
   
   
var rc = ::RECT(0,0,width,height);
    viewObject2.Draw(0x1
/*_DVASPECT_CONTENT*/,1, null , {}, hdc,  hBitmapDC,rc,{} ,null,0);
    ::ReleaseDC(winform.hwnd, hdc);
   
   
var bmp = gdip.bitmap(hBitmap,0)
    bmp.save(filepath,q)   
}

//将网页转换为图片
snap("http://www.baidu.com"
    ,
"/websnap.jpg",100/*图像质量*/)

//浏览图片
import process
process.explore_select(
"/websnap.jpg");

//进入消息循环
win.loopMessage();


回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
 楼主| 发表于 2018-5-24 17:07:46 | 显示全部楼层

chrome.app 打印

import process.chrome.app;
var app = process.chrome.app();

import winex.key;
app.external = {
    print =
function(){
       winex.key.combine(app.hwndChrome,
"CTRL","P")
    }
}

app.httpHandler[
"/res/index.aardio"] = function(response,request){
   
   
var html = /*
        <!DOCTYPE html>
        <html>
        <head>
            <meta charset="UTF-8">
            <title>aardio嵌入chrome打印网页演示</title>
            
            <script src="/aardio.js"></script>
            
        </head>
        
        <body>
            
        <button onclick="aardio.print();">点这里调用打印</button>
            
        </html>
    */


    response.write(html)

}

//正式的启动chrome进程,aardio会自动把下面的文件转换为服务端请求
app.start("/res/index.aardio");

//网页中可以调用 aardio.quit() 退出,也可以直接关闭chrome窗口退出
win.loopMessage();

   

回复

使用道具 举报

6

主题

50

帖子

370

积分

二级会员

Rank: 3Rank: 3

积分
370
发表于 2018-5-24 20:28:46 | 显示全部楼层
学习了,辛苦                                    
回复

使用道具 举报

4

主题

24

帖子

173

积分

培训班

积分
173
发表于 2018-5-25 10:27:14 | 显示全部楼层
刚刚需要用到类似的功能, 就来了, 太及时了, Jacen威武霸气!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-12-14 01:24 , Processed in 0.093750 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表