未找到

未发布 TWAIN扫描识别工具Dynamic Web TWAIN发布v13.4,改进安装过程丨附下载
by Harriet666 keys 分享 1520925039127
Dynamic Web TWAIN是一个专为Web应用程序设计的TWAIN扫描识别控件。你只需在TWAIN接口写几行代码,就可以用兼容TWAIN的扫描仪扫描文档或从数码相机/采集卡中获取图像。然后用户可以编辑图像并将图像保存多种格式,用户可保存图像到远程数据库或者SharePoint。这个TWAIN控件还支持上传和处理本地图像。
 
 
Dynamic Web TWAIN v13.4更新内容
改进:
  • [HTML5]优化安装过程,无法将Dynamic Web TWAIN模块下载为ZIP的用户现在可以将其下载为MSI文件进行安装。
修复:
  • [HTML5]修复了将Dynamic Web TWAIN与其他库或框架(如流行的BootStrap)一起使用时在页面上看到进度条的错误。

试用、下载、了解更多产品信息请点击"咨询在线客服"  

315

未发布 Essential Studio for UWP发布2017 v2,新增甘特图控件
by Harriet666 keys 分享 1495780729601
Essential Studio for UWP是包含有35 +组件的综合套包,包括最快的图表和网格组件。所有组件根据当前被呈现的设备系列自适应渲染。Essential Studio for UWP发布2017 v2,新增甘特图控件。

【Essential Studio for UWP最新版点击下载>>>】


图表

区段颜色设置

图表中的每个段现已支持颜色贴图。

995952bfb60443129bd83ac458ae54f8ojpg

多个样条曲线类型

图表控件现在支持样条区域的多个样条类型。

484149a96b314a5491b95cb18957eeb9ojpg

 

图表

片段装饰

连接器中添加了一种新的装饰元素,以指示连接在另一个连接器或片段上的流动。

de1341f252e34bdabb7a48bc63b8bba0ojpg

 

PDF

增强PDF安全功能

现在支持PDF 2.0安全功能(AES Revision 6)。

77d44e0e6b76401ab02e8a510924d4e6ojpg

 

数据透视图表

快速图表类型

在透视图控件中实现了以下快速图表类型:快速列位图、快速条形图、快速行、快速位图、快速步进位图、快速分散位图和快速堆叠列位图。

修饰

添加数据透视图修饰以显示与图表细分元素相关的值。

9ffff64fc71147f4929d16d12331f483ojpg

注释

数据透视图注释显示有关绘图区域中特定目标点的图表或系列的元数据。

9137007f09c3430fad13f40e823af42bojpg

Pivot客户端

标签和值过滤器

Pivot客户端支持按标签和值进行过滤。

a1c70a38440e4827b6f7fb54f2694211ojpg

延迟更新

Pivot客户端可以仅在需要时更新,而不是在每次UI交互期间更新。

Pivot网格

Pivot行

Pivot网格可以定制为平面网格。

2f2237b52b994d8ca4fe1c9eaaf84c70ojpg

分组栏

Pivot网格提供了一个UI选项来拖动字段、过滤,并在运行时通过分组栏创建Pivot视图。

996bf06c54264a969c20b3ccf4db9af0ojpg

演示

注释功能

可以在PowerPoint演示文稿中创建和修改注释。

4773c7e27f8649bea7af50162dd246e3ojpg

富文本框

支持打印

富文本框控件现在支持从桌面和移动应用程序中打印文档内容。

a002e003c13149c6b2b951898d3207c9ojpg

页面布局

富文本框控件支持在移动设备上逐页查看文档内容。

63a5e6287a674089b4eccd746ca3434fojpg


甘特图

甘特图控件用于可视化和编辑项目进度,并跟踪项目进度。它可以帮助你组织和安排项目。你还可以通过编辑、拖动和调整大小等操作来更新项目进度。

f4eb369c934546068418ec2abec15752ojpg

主要特征

  • 任务关系
  • 交互式编辑
  • 排序
  • 自定义时间格式

树型网格

过滤

树状网格控件现在支持使用各种过滤器选项,用编程方的式过滤节点。

0d08e7d6f68d4251acd0519484bb65f4ojpg


未发布 Edraw Max(亿图图示)新技能:在软件上进行反激活
by Harriet666 keys 分享 1499240850460
Edraw Max(亿图图示)8.7以上的版本,新增了“反激活”功能,也就意味这用户以后可以自主进行反激活。Edraw Max(亿图图示)一个产品秘钥支持两台电脑同时使用,如果超过两台电脑,则需要清除其中一台电脑的绑定,也就是反激活操作。又或者因为某些原因导致电脑需要重装系统,那么,你也需要进行反激活。否则,就会出现产品秘钥失效的情况。
 
本文将详细介绍Edraw Max(亿图图示)8.7以上版本在软件上应该如何进行反激活操作!目前Edraw Max(亿图图示)在线订购享75折优惠活动正在进行中,欢迎您下载、购买进行运用!
 
首先,请确定软件是8.7及其以上版本,软件版本查看如下图所示:
 
如果软件版本未达到8.7以上,请先进行软件更新。Edraw Max(亿图图示)8.7最新中文版点击下载>>>
 
如果已经是8.7以上版本的,就可以通过软件一键“反激活”按钮,来进行反激活操作了。
 
第一步:点击软件上方菜单栏“帮助”中的“反激活”,然后系统会弹出一个提示框,确认信息后点击“反激活”。
第二步:当提示反激活成功后,软件会自动关闭。
第三步:再次打开软件,软件就显示为试用版本的了。
接下来你就可以任意的换电脑,重装系统了。当这一切都准备完毕,软件也重新下载、安装好了,最后只需要按照一般的激活方法,使用原来的产品密钥激活软件就可以了!
总而言之,如果你要换电脑了,请提前进行反激活;如果你的电脑需要重装系统,也请提前反激活。
 
Edraw Max(亿图图示)8.7最新版下载地址:https://www.evget.com/product/2064/download
 
温馨提示:首次反激活即刻生效,以后再进行反激活则需30天的冷却期。
未发布 屏幕录制软件ALLCapture常见问题合集(上)
by Harriet666 keys 分享 1504776846597
ALLCapture是一款实时抓取桌面的屏幕录制软件。实时、快速、轻松地录制屏幕,创建自己的屏幕录像、示例、指南、软件模拟以及无需任何编程的网络视频。制作步骤如此简单:录制-编辑-导出-播放。
ALLCapture
使用ALLCapture遇到了问题?我们的FAQ将帮助你找到答案。

1、我的序列号和注册信息都无法使用?

注册信息包括三部分:“序列号”,“字段 #1”以及“字段 #2”-要成功注册你的软件这些信息都是必须。为了确保你的注册没有任何问题,请从发送给你的邮件中复制注册信息,然后粘贴到相应的注册字段。请参考以下截图。
 

2、ALLCapture对系统的最低要求是?

功能要求
主要功能Windows 98或更高
最低1.2GHzPentium或兼容CPU
256MB内存
50MB可用硬盘
SVGA显卡,256色
对电影或视图截图Windows 2000或更高(文件格式为NTFS)
最低2GHz Pentium或兼容CPU
1GB内存
30GB可用硬盘
专业版SVGA显卡,最低显存256MB
(非集成显卡)
 

3、最大帧速非常慢,我该怎么办?

当ALLCapture显示的帧速小于10FPS(帧每秒)时,要么是显卡不支持要么是驱动过期。用户可用升级电脑的显卡驱动来增加帧速,但是显卡或显卡芯片仍然无法支持。在购买新显卡前我们还是建议先升级显卡驱动。如果驱动升级成功,你可以在ALLCapture中新建一个项目,然后在“录制选项”页中点击“帧速”,然后再点击“刷新帧速最大值”按钮。


4、为什么录制的视频是黑色的一片?

先了解一下处理机制,电影是直接从显卡解码而来,这就是造成黑色一片的原因。Windows只能同时让一个屏幕可用,这样操作系统无法获取在屏幕下面的东西,因此ALLCapture也无法捕捉到。

用户可以通过停用显卡的硬件加速来捕获画面。硬件加速可以从这里找到:“开始>设置>控制面板>显示>设置>高级>疑难解答”,滑动控制条到“没有硬件加速”。


5、为什么ALLCapture没有录制系统声音?

很多笔记本厂商没有配置完整的声卡芯片驱动。这应该是录制驱动识别功能无法识别系统的声卡驱动的原因。对于台式电脑应该安装了提供这个功能的声卡,升级声卡驱动应该可以解决这个问题。
 
如果你使用的是Vista,请查看示例
 

6、我怎样可以把PowerPoint录制为视频?

使用ALLCapture新建一个项目,然后在录制前选择分辨率,例如:800x600像素,打开PowerPoint开始录制,然后开始放映PowerPoint,并立即按下CTRL+SHIFT+P使PPT填充录制窗口,PPT播放完毕即可结束录制,然后剪掉前面的录制让第一页幻灯片的画面为起始页。

提示:如果幻灯片播放太快以至于没有捕捉到第一页ppt画面,你只需在ppt开始处插入空白的幻灯片,这样当播放时点击空白幻灯片后,真正的第一页幻灯片就可以录制到了。
未发布 UI组件库jQWidgets更新至v5.2.0,新增Angular枢轴网格丨附下载
by Harriet666 keys 分享 1504691512134
jQWidgets是一个基于jQuery JavaScript的综合性和创新性的HTML5 UI组件库,旨在帮助开发者创建专业、跨平台的Web应用程序,并最大限度的节省开发时间。jQWidgets包含30多种UI组件,是最快的JavaScript UI框架之一。

【最新版jQWidgets v5.2.0点击下载>>>】

jQWidgets v5.2.0更新内容:
新增:
  • Angular枢轴网格
  • React枢轴网格
  • 枢轴网格自定义元素
 
改进:
  • jqxTabs和jqxRibbon light主题。
 
修复:
  • 修复jqxListBox和jqxDropDownList中关于enableSelection属性动态设置时的问题。
  • 修复jqxCheckBox和jqxRadioButton中事件发生时关于event.args.type成员的问题。
  • 修复jqxPivotGrid中当鼠标在滚动条上释放时鼠标选择的问题。
  • 修复jqxPivotGrid中关于命中测试功能的问题。
  • 修复jqxTabs中关于Tabs在IFrame内删除事件侦听器的问题。
  • 修复jqxGrid中当点击垂直和水平滚动条之间的区域时鼠标选择的问题。
未发布 Xmanager Enterprise网络通讯工具更新合集
by Harriet666 keys 分享 1508924928131
Xmanager Enterprise是完整的网络连接套件,它带有一个高性能PC X服务器,支持OpenGL(GLX)、3d硬件加速、安全终端模拟器、文件传输客户端和LPD打印机服务器。Xmanager 
Enterprise 4使3d X应用程序运行得更快,通过SSH和TELNET来提供安全的远程终端访问,通过SFTP/FTP进行方便的文件传输,使用LPD在本地打印远程文件等。
 
Xmanager Enterprise v5.1243下载>>>
 
Xmanager Enterprise v5.1243更新:
  • 修复:[Xmanager]全屏启动时屏幕闪烁
  • 修复:[Xshell]自动更新会错误地显示用户正在使用最新版本
  • 修复:[Xshell]终端复位时,光标不复位
  • 修复:[Xshell]重命名选项卡有时将名称应用于其他选项卡
  • 修复:[Xshell]反向视频终端转义序列被忽略
  • 修复:[Xshell]当选择新窗口中打开时,将-newtab选项中的新选项卡名称应用于现有选项卡
  • 修复:[Xftp]从连接的会话中打开新终端时,系统将提示用户输入密码
  • 修复:[Xftp]从会话的上下文菜单中调用Xftp始终默认为TCP 22
  • 修复:[Xlpd]资源清理

Xmanager是市场领先的PC X服务器,它能够带来Windows平台下强力的虚拟应用技术。使用Xmanager,能够使安装在远程的基于UNIX系统的X应用程序与一般的Windows应用程序
完全一样。它提供了一个强大的会话管理控制台、易于使用的X应用程序启动器、X服务器概要文件管理工具、SSH模块和用于安全访问的远程高性能PC X服务器及虚拟化的UNIX/Linux
环境。

Xmanager v5.1056下载>>>

Xmanager v5.1056更新:
  • 修复:[Xmanager]全屏启动时屏幕闪烁

Xshell是一个功能强大的终端模拟器,支持SSH、SFTP、TELNET、RLOGIN和SERIAL。它提供业界领先无法替代的性能和特性集。它有许多对企业用户有用的特性,包括:分页式环境
、动态端口转发、自定义键映射、用户定义按钮、VB脚本以及显示2字节字符和支持国际语言的UNICODE终端。
 
Xshell v5.1333下载>>>

Xshell v5.1333更新:
  • 修复:[Xshell]自动更新会错误地显示用户正在使用最新版本
  • 修复:[Xshell]终端复位时,光标不复位
  • 修复:[Xshell]重命名选项卡有时将名称应用于其他选项卡
  • 修复:[Xshell]反向视频终端转义序列被忽略
  • 修复:[Xshell]当选择新窗口中打开时,将-newtab选项中的新选项卡名称应用于现有选项卡

Xftp是一个灵活和轻量级的SFTP / FTP客户端,它主要用于为用户提供通过网络安全的传输文件。它提供了许多强大的功能,比如直接编辑、多窗格、文件夹同步、支持FXP、服务器之
间传输以及集成第三方编辑器。在处理远程文件方面Xftp将为你节省时间和精力。 对于家庭和学校的用户来说,Xftp是免费的。具体情况可参阅家庭和学校用户免费使用许可协议条款和
条件。

Xftp v5.1229下载>>>
 
Xftp v5.1229更新:
  • 修复:[Xftp]从连接的会话中打开新终端时,系统将提示用户输入密码
  • 修复:[Xftp]从会话的上下文菜单中调用Xftp始终默认为TCP 22

Xlpd是一个用于Windows系统的简单的行式打印机后台程序(LDP)和打印作业管理工具。它通过LPD协议从远程服务器接收打印任务并把该打印任务发送至本地打印机。LPD是一个支
持多种操作系统的标准的打印协议,支持包括UNIX、Solaris和Linux等系统。
 
Xlpd v5.1231下载>>>
 
Xlpd v5.1231更新:
  • 修复:[Xlpd]资源清理
未发布 【教程】FileAudit入门的基本要求
by Harriet666 keys 分享 1511341586206
FileAudit可用于对Windows服务器上文件和文件夹的所有访问进行主动跟踪、审核、报告和警告。本文为大家介绍FileAudit入门的基本要求,包括操作系统、硬盘、数据库等。
 
 

操作系统

FileAudit可以在以下操作系统中安装(用于控制台安装):
  • Windows 10
  • Windows 8
  • Windows Server 2012 R2
  • Windows Server 2012
  • Windows 7
  • Windows Server 2008 R2
  • Windows Server 2008
  • Windows Vista
  • Windows Server 2003
  • Windows XP
  • .Net Framework 4是必需的。


硬盘

FileAudit安装文件和文件夹需要60MB的可用硬盘空间。
 
此外,您必须保留一定的磁盘空间来存储文件访问事件历史记录:由FileAudit审计的访问事件保存在数据库中时会占用0.5KB的磁盘空间。通过将此值乘以平均访问次数
(在测试阶段已知或观察到),您可以轻松地估计数据库大小。
 

数据库

FileAudit支持以下数据库系统:
  • Microsoft Access数据库文件(mdb)
  • Microsoft SQL Server Express 2008/2008 R2 / 2012/2014
  • Microsoft SQL Server 2008/2008 R2 / 2012/2014
  • MySQL 5.6和更高版本
为了便于FileAudit评估,安装包集成了一个“MS Access数据库”来归档所有文件访问事件。这个免费的数据库类型被设计限制为2GB。你可以在使用FileAudit的第一天检查数据库大小的演变,以确认您选择的数据库系统是否适合您的环境。


协议和端口

FileAudit要求将这两个协议从FileAudit服务授权给目标审计系统:
  • Microsoft网络的文件和打印机共享 - SMB TCP 445
  • ICMP - Ping
请确保在“防火墙例外”列表中启用“远程事件日志管理”(Windows 2008/2008 R2和Windows Server 2012)。FileAudit控制台默认使用TCP端口2000远程连接到FileAudit服务。这个特定的端口可以在“服务”设置中修改。
 

显示分辨率

FileAudit要求1024 x 768的最小分辨率。
未发布 【示例教程】使用leadtools的WCF接口功能实现从web端上传Dicom影像文件
by Harriet666 keys 分享 1517903663716
Leadtools 19总套包下载>>>
 
leadtools为web端提供了wcf接口来供用户可以登录pacs系统,检索,查看以及上传影像。本篇博客讲解如何创建一个网页来实现上传功能,通过WCF进行dicom文件的上传时,是将dicom文件转换为base64数据流,分段进行传输。
 
本篇博客运行的前提是已经部署完成Leadtools HTML5 Web Viewer,可以正常浏览。参考https://www.evget.com/article/2018/2/6/27757.html
 
在部署完成后,将下面的代码复制到一个HTML文件中,即可运行进行测试。另外需要添加html文件所需的jquery.min.js到同文件夹路径下。
<head>
    <meta charset="UTF-8">
head>

<form onsubmit="return false;">
    <input type="hidden" name="file_base64" id="file_base64">
    <input type="file" id="fileup" multiple="multiple">
    <input type="submit" value="submit" onclick="$.post('./uploader.php', $(this).parent().serialize());">
    <div>
        <div id="msg">div>
    div>
form>
<script src="scripts/jquery.min.js">script>
<script>

    $(document).ready(function () {
        authcookie = login();
        document.cookie = "authcookie=" + authcookie;
        $("#fileup").change(function () {
            getauthcookie("authcookie");
            filelist = this.files;
            file = filelist[fileindex];
            upload(file);
        });
    });
    var authcookie;//保存authcookie
    var filelist;//上传文件列表
    var file;//当前上传文件
    var tempfile = "";//临时文件名称
    var position = 0;
    var size = 40000;//分段大小
    var done = false;
    var fileindex=0;//当前上传文件序列号

    function upload(tempfile) {
        if(position==0)
            done=false;
        var reader = new FileReader();
        if (file.size > position + 40000)
            reader.readAsArrayBuffer(file.slice(position, position + 40000));
        else 
            reader.readAsArrayBuffer(file.slice(position, file.size));
        reader.onload = function (e) {
            if (e.target.readyState === 2) {
                var base64string = base64ArrayBuffer(e.target.result);
                var data = {
                    authenticationCookie: authcookie,
                    dicomData: base64string,
                    fileName: tempfile,
                    status: position==0?"start":"append"
                };
                tempfile = senddata(JSON.stringify(data));
                if (!done) {
                    position += 40000;
                    upload(tempfile);
                    if (position+40000>file.size)
                        done = true;
                }
                else {
                    var data = {
                        authenticationCookie: authcookie,
                        dicomData: "",
                        fileName: tempfile,
                        status: "done"
                    };
                    tempfile = senddata(JSON.stringify(data));
                    position = 0;
                    $("#msg").html($("#msg").html()+"第"+(fileindex+1)+"个文件已经上传完成

"); fileindex += 1; if (fileindex < filelist.length) { file = filelist[fileindex]; upload(tempfile); } else { fileindex = 0; $("#msg").html($("#msg").html() + "文件全部已经上传完成

"); } } } }; } function senddata(data) { var result; $.ajax({ type:"post", url: "http://localhost/MedicalViewerService19/StoreService.svc/UploadDicomImage", data: data, contentType: "application/json", dataType: "json", success: function(data){result= data}, async: false }); return result; } function login() { var auth; var logininfo = { userName: "a", password: "a", userData: "" }; $.ajax({ type: "post", url: "http://localhost/MedicalViewerService19/AuthenticationService.svc/AuthenticateUser", data: JSON.stringify(logininfo), contentType: "application/json", dataType: "text", success: function (data) { auth= data }, async: false }); return auth; } function query() { } function getauthcookie() { document.cookie.split(";").forEach(function (val, index) { var index = val.indexOf("="); if ($.trim(val.substring(0, index)) == "authcookie") { authcookie = $.trim(val.substring(index + 1, val.length)); } }); return ""; } function base64ArrayBuffer(arrayBuffer) { var base64 = ''; var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; var bytes = new Uint8Array(arrayBuffer); var byteLength = bytes.byteLength; var byteRemainder = byteLength % 3; var mainLength = byteLength - byteRemainder; var a, b, c, d; var chunk; // Main loop deals with bytes in chunks of 3 for (var i = 0; i < mainLength; i = i + 3) { // Combine the three bytes into a single integer chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2]; // Use bitmasks to extract 6-bit segments from the triplet a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18 b = (chunk & 258048) >> 12; // 258048 = (2^6 - 1) << 12 c = (chunk & 4032) >> 6; // 4032 = (2^6 - 1) << 6 d = chunk & 63; // 63 = 2^6 - 1 // Convert the raw binary segments to the appropriate ASCII encoding base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d]; } // Deal with the remaining bytes and padding if (byteRemainder == 1) { chunk = bytes[mainLength] a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2 // Set the 4 least significant bits to zero b = (chunk & 3) << 4; // 3 = 2^2 - 1 base64 += encodings[a] + encodings[b] + '=='; } else if (byteRemainder == 2) { chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1]; a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10 b = (chunk & 1008) >> 4; // 1008 = (2^6 - 1) << 4 // Set the 2 least significant bits to zero c = (chunk & 15) << 2 // 15 = 2^4 - 1 base64 += encodings[a] + encodings[b] + encodings[c] + '='; } return base64; } script>

6

未发布 Java新版本的开发已正式进入轨道,版本号18.3
by Harriet666 keys 分享 1509701758197

Java 9在9月21日正式发布,同时Oracle宣布将Java新版本的发布周期调整为每半年一次。目前,Java新版本的开发也已正式进入轨道。就已公开的消息来看,下一个版本的Java预计会在2018年3月发布,版本号将会是18.3,已经规划加入的特性包括JEP 286和296。

根据reddit站点上的讨论,首先更新的是JEP 296,Valhalla预计很快也会加入进来。OpenJDK的主页面则显示,已确定要在18.3版本实现的是JEP 286和296。

JEP 296主要是将JDK仓库群(JDK Repository Forest)合并为一个仓库,旨在降低管理大量仓库群的成本。根据InfoQ之前的报道,该仓库群的合并已经完成。这些软件仓库是在OpenJDK发展史上历次分裂生成的,在OpenJDK 9及以前的版本中将会继续存在。在这次合并操作之前,OpenJDK曾分裂为多个不同的Mercurial软件仓库群,这导致了许多问题,例如不能以原子方式对多个软件仓库应用漏洞修复(Bug Fixes)。在OpenJDK合并完成后,只会有一个软件仓库,并复制在三个开发线上。为了简化仓库的管理,JDK中还创建了用于在合并和未合并版本间移动更改的工具。

JEP 286提议在Java中引入局部变量的类型推断,该JEP在2016年提出,InfoQ曾经报道过该JEP的概况和相关的开发者调查结果。该JEP旨在减少编写Java代码相关的仪式性的内容,提升开发人员的体验,同时还要保证Java语言的静态性。它会减少开发人员在声明局部变量时,没有必要的变量类型声明。如果该JEP实现的话,在声明局部变量的时候,就可以采用类似如下的方式:

var list = new ArrayList();  // infers ArrayList
var stream = list.stream();          // infers Stream

这种语句只能用于带有初始化器(initializer)的局部变量、增强的for-loop中的索引以及传统for-loop中声明的局部变量。它不能用于方法声明、构造函数声明、方法返回值、字段、catch语句以及其他类型的变量声明中。

关于局部变量的类型推断,不管是JVM体系中的语言还是其他语言都提供了一定形式的支持,比如C++(auto)、C#(var)、Scala(var/val)以及Go(通过:=进行声明)。至于该使用var作为关键字,还是使用let或类似于C/C++中的auto作为关键字,之前曾经有过一个面向开发者的调查。大约84%的回答表明定义可变内容的变量用关键字var是恰当的,只有百分之几的回答者建议使用auto更合适。根据Java语言架构师Brian Goetz介绍,该功能应该使用关键词var。

关于该特性的用法,在reddit上有一些讨论。有人表示,即便在支持“auto”语法的语言中,该特性使用的也比较少,因为有些人希望一眼就能看出变量的类型是什么。也有人认为,var有它的适用空间,在小的代码块中,直接用它实例化对象是可以的。如果是作为方法返回值的话,还是希望明确声明类型,Java的类型推断并不支持方法返回值,这一点倒不必担心。如果函数或代码块比较长的话,就不建议使用var了并要考虑适时进行代码的重写。时间和经验将会让我们更加明确应该在何时使用新功能,就像Optional刚出现时,也是耗费了一些时间才明确其推荐适用场景。

Valhalla项目中包含了一些有趣的JEP,包括值类型(Value Type)、针对原始类型实现泛型功能、增强的volatile等,外界很期待这些内容最终也能添加到新版本中。


2017慧都十四周年狂欢搞事情!砸金蛋100%抽现金红包、满额豪送iPhone X、iPhone 8、DevExpress汉化免费送、团队升级培训套包劲省10万元......更多惊喜等您来探索!

未发布 MailBee.NET Objects发送电子邮件(SMTP)教程五:发送带有嵌入图片的网页和HTML邮件
by Harriet666 keys 分享 1494839413968
MailBee.NET Objects介绍和试用点击查看>>>
 
为了发送带有嵌入对象的电子邮件,开发人员应该使用SMTP object。首先,开发人员应该按照【MailBee.NET Objects发送电子邮件(SMTP)教程一】中所述指定SMTP对象的所有必要属性。
 
如果HTML格式的邮件没有任何嵌入对象,开发人员可以使用SMTP.BodyHtmlText属性或SMTP.Message.LoadBodyText方法来设置邮件正文。
 
SMTP.BodyHtmlText属性允许开发人员直接分配邮件正文,如下所示:
C#:
oMailer.BodyHtmlText = @"
Test HTML message.



        
       


        This is a test HTML mes-sage.
       


       



        www.afterlogic.com";     
VB.NET:
oMailer.BodyHtmlText = "
Test HTML message.


" & vbCrLf & _
        "" & vbCrLf & _
        "

" & vbCrLf & _
        "This is a test HTML mes-sage." & vbCrLf & _
        "

" & vbCrLf & _
        "


" & vbCrLf & _
        "www.afterlogic.com"
 
也可以使用SMTP.Message.LoadBodyText方法。在这种情况下,开发人员可以从指定的URI中加载消息,如下所示:
C#:
oMailer.Message.LoadBodyText(@"http://www.domain.com/index.htm", MessageBodyType.Html);  
VB.NET:
oMailer.Message.LoadBodyText("http://www.domain.com/index.htm", MessageBodyType.Html)
 
或者
C#:
oMailer.Message.LoadBodyText(@"C:\Temp\saved_web_page.htm", MessageBodyType.Html);     
VB.NET:
oMailer.Message.LoadBodyText("C:\Temp\saved_web_page.htm", MessageBodyType.Html)

否则,开发人员应该调用SMTP.Message.LoadBodyText方法来编写一个包含嵌入对象(图像,音频或视频)的消息。以下示例将邮件正文加载为默认编码以及指定URI中的所有相关文件:
C#:
oMailer.Message.LoadBodyText(@"http://www.domain.com/index.htm ", 
                MessageBodyType.Html,
                Encoding.Default, ImportBodyOptions.ImportRelatedFiles|
                ImportBodyOptions.ImportRelatedFilesFromUris);       
VB.NET:
oMailer.Message.LoadBodyText("http://www.domain.com/index.htm ", _
                MessageBodyType.Html, _
                Encoding.Default, ImportBodyOptions.ImportRelatedFiles Or _
                ImportBodyOptions.ImportRelatedFilesFromUris)
 
请注意:在使用SMTP.Message.LoadBodyText方法时,所有相关文件将被添加到邮件中。
 
代码示例:
该示例从拥有嵌入对象的现有网页中创建新邮件并发送。在使用MailBee.NET Objects之前,请确保它已解锁。
C#:
using System;
using System.Text;
using MailBee;
using MailBee.SmtpMail;
using MailBee.Mime;
namespace EmailApp
{
    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            Smtp oMailer = new Smtp();
            oMailer.To.AddFromString("Bill Smith ");
            oMailer.From.AsString = "John Doe (Company Info)";
            oMailer.Subject = "Test web page";
            oMailer.Message.LoadBodyText(@"http://www.domain.com/index.htm", MessageBodyType.Html, Encoding.Default, 
ImportBodyOptions.ImportRelatedFiles | ImportBodyOptions.ImportRelatedFilesFromUris);
            try
            {
                oMailer.Send();
                Console.WriteLine("The message has been successfully sent.");
            }
            catch (MailBeeSmtpMessageSizeOutOfRangeException e)
            {
                Console.WriteLine("The message is too large (more than " + e.MaxAllowedMessageSize + " bytes).");
            }
        }
    }
}
VB.NET:
Imports System
Imports System.Text
Imports MailBee
Imports MailBee.SmtpMail
Imports MailBee.Mime
 
Namespace EmailApp
    Class Class1
        
        Shared  Sub Main(ByVal args() As String)
            Dim oMailer As Smtp =  New Smtp() 
 
            oMailer.To.AddFromString("Bill Smith ")
 
            oMailer.From.AsString = "John Doe (Company Info)"
 
            oMailer.Subject = "Test web page"
 
            oMailer.Message.LoadBodyText("http://www.domain.com/index.htm", MessageBodyType.Html, Encoding.Default, 
ImportBodyOptions.ImportRelatedFiles | ImportBodyOptions.ImportRelatedFilesFromUris)
 
            Try
                oMailer.Send()
                Console.WriteLine("The message has been successfully sent.")
            Catch e As MailBeeSmtpMessageSizeOutOfRangeException
                Console.WriteLine("The message is too large (more than " + e.MaxAllowedMessageSize + " bytes).")
            End Try
        End Sub
    End Class
End Namespace
 
以上就是本次教程的全部内容,接下来会有更多相关教程,敬请关注!您也可以在评论者留下你的经验和建议。

 近期热门 - 点击最多
  1. 如何通过 winax 的 ActiveXObject 或 Excel.Application 往 excel 中插入一张图片
  2. node.js用activex/com+自动化读写excel时查询接口、参数的调试方法
  3. TypeScript定义数字范围类型即仅包含【小时:分钟】的时间类型,每天指定时间点执行任务
  4. 比较测试:用百度文心一言和阿里通义千问写删除文件目录并且是async/await代码
  5. node.js使用TensorFlow入门教程二:什么是张量神经网络运算与矩阵的关系及基本入门代码
  6. node.js使用TensorFlow入门教程一:简介及工作原理环境安装及初始化
  7. node.js用saml2连接Identity Provider服务器完成Azure AD/Active Directory域帐号身份认证
  8. node.js中用typescript连接mongodb数据并设置断开后自动重启连接
  9. git 将本地仓库关连并push远程
  10. 在Windows10上创建node.js开机启动脚本服务Task Scheduler failed to start: Error Value: 2147943711.

  全端社区 - 最新回复
  1. Paddle/abbyy等ocr比较:如何将图片生成可选择文字版PDF
  2. 如何通过 winax 的 ActiveXObject 或 Excel.Application 往 excel 中插入一张图片
  3. 如何用JavaScript获取某个元素copy selector的CSS选择器
  4. 青否数字人5.0上线,支持真人接管实时驱动!
  5. 遥遥领先!青否数字人直播系统5.0发布,支持真人接管实时驱动!
  6. 比fs.watch更加优秀的Chokidar文件变化检测库
  7. HTML页面嵌入部分使用Vue3,在jQuery应用中用类似Vue2使用Vue3
  8. 克隆自己的数字人形象需要几步?
  9. Node.JS中Fetch/Axios连接Strapi服务器端localhost,Next.JS后端SSR请求返回connect ECONNREFUSED,但客户端CSR正常
  10. node.js用activex/com+自动化读写excel时查询接口、参数的调试方法

  开源的 OurJS
OurJS开源博客已经迁移到 OnceOA 平台。

  关注我们
扫一扫即可关注我们:
OnceJS

OnceOA