最近需要项目用到在线打开word和excel文档处理,在PageOffice官网下载了文档研究了下:官网地址:http://www.zhuozhengsoft.com/

不多说,直接写上学习过程,请大家指正。练习过程整合了Struts进行练习,其他框架可以结合具体业务添加:

在使用之前有几点要注意:

1、在本机上安装posetup.exe,如果用到印章还要安装sealsetup.exe.

2、这个在最新版本的chrome中不能直接打开,通过link方式才行,没弄过,可以看一下。刚开始我就遇到这种问题,IE、firefox可以,还有就是版本问题

3、系统会自动检测本机上有的office软件,自动检测第一次安装的office软件(避免同时有WPS和MSOffice)。

4、pageOffice是收费的,可以试用,为避免在页面中总是输入注册,可离线生成license.lic,copy到lib下,方便开发。

5、。。。。。。。

环境:eclipse3.7+jdk6+tomcat7

第一步:新建一个web工程:

工程目录如下:

注:doc 目录下问为文档模板或pdf文件等,可自动生成带有印章的公司文档(如请假条,在线填写姓名、事由等,生成文档,再由领导同意,生成一份完整请假条)。

第二步:在web.xml中添加官网给出的配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>pageOfficeDemo</display-name><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>*.action</url-pattern></filter-mapping><filter-mapping><filter-name>struts2</filter-name><url-pattern>*.jsp</url-pattern></filter-mapping><!-- PageOffice Begin --><servlet><servlet-name>poserver</servlet-name> <servlet-class>com.zhuozhengsoft.pageoffice.poserver.Server</servlet-class> </servlet><servlet-mapping> <servlet-name>poserver</servlet-name> <url-pattern>/poserver.zz</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>poserver</servlet-name> <url-pattern>/poserver.do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>poserver</servlet-name> <url-pattern>/pageoffice.cab</url-pattern></servlet-mapping><servlet-mapping> <servlet-name>poserver</servlet-name> <url-pattern>/popdf.cab</url-pattern></servlet-mapping><servlet-mapping> <servlet-name>poserver</servlet-name> <url-pattern>/sealsetup.exe</url-pattern></servlet-mapping><servlet-mapping> <servlet-name>poserver</servlet-name> <url-pattern>/posetup.exe</url-pattern></servlet-mapping><servlet><servlet-name>adminseal</servlet-name> <servlet-class>com.zhuozhengsoft.pageoffice.poserver.AdminSeal</servlet-class> </servlet><servlet-mapping> <servlet-name>adminseal</servlet-name> <url-pattern>/adminseal.do</url-pattern> </servlet-mapping><servlet-mapping> <servlet-name>adminseal</servlet-name> <url-pattern>/loginseal.do</url-pattern></servlet-mapping><servlet-mapping> <servlet-name>adminseal</servlet-name> <url-pattern>/sealimage.do</url-pattern></servlet-mapping><mime-mapping>  <extension>mht</extension>  <mime-type>message/rfc822</mime-type>  </mime-mapping><context-param><param-name>adminseal-password</param-name><param-value>111111</param-value></context-param><!-- 连接数据库信息配置--><context-param><param-name>adminseal-charset</param-name><param-value>UTF-8</param-value></context-param><context-param><param-name>posealdb-driver</param-name><param-value>com.mysql.jdbc.Driver</param-value></context-param><context-param><param-name>posealdb-url</param-name><param-value>jdbc:mysql://localhost:3306/pageoffice</param-value></context-param><context-param><param-name>posealdb-username</param-name><param-value>root</param-value></context-param><context-param><param-name>posealdb-password</param-name><param-value>root</param-value></context-param><!-- PageOffice End -->
</web-app>

第三步:进行代码编写

Struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts><package name="demo" extends="struts-default"><action name="createWord" class="com.demo.action.WordDemo" method="create"><result name="create">/createWord.jsp</result></action><action name="autoInsert" class="com.demo.action.WordDemo" method="autoInsert"><result name="autoInsert">/autoInsert.jsp</result></action><action name="openword" class="com.demo.action.WordDemo" method="openword"><result name="openword">/editword.jsp</result></action><action name="openPDF" class="com.demo.action.WordDemo" method="openPDF"><result name="pdf">/openPDF.jsp</result></action><action name="wordToPDF" class="com.demo.action.WordDemo" method="wordToPDF"><result name="wordToPDF">/wordToPDF.jsp</result></action><action name="saveword" class="com.demo.action.WordDemo" method="saveword"><result name="saveword">/savefile.jsp</result></action><action name="openexcel" class="com.demo.action.ExcelDemo" method="openexcel"><result name="openexcel">/editexcel.jsp</result></action><action name="saveexcel" class="com.demo.action.ExcelDemo" method="saveexcel"><result name="saveexcel">/savefile.jsp</result></action></package></struts>

操作word和excel的action(其他的可参看手册练习):

WordDemo:

package com.demo.action;import java.awt.Color;
import java.util.Random;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;import com.opensymphony.xwork2.ActionSupport;
import com.zhuozhengsoft.pageoffice.BorderStyleType;
import com.zhuozhengsoft.pageoffice.DocumentOpenType;
import com.zhuozhengsoft.pageoffice.DocumentVersion;
import com.zhuozhengsoft.pageoffice.FileMakerCtrl;
import com.zhuozhengsoft.pageoffice.FileSaver;
import com.zhuozhengsoft.pageoffice.OpenModeType;
import com.zhuozhengsoft.pageoffice.PDFCtrl;
import com.zhuozhengsoft.pageoffice.PageOfficeCtrl;
import com.zhuozhengsoft.pageoffice.ThemeType;
import com.zhuozhengsoft.pageoffice.wordwriter.WordDocument;public class WordDemo extends ActionSupport implements ServletRequestAware,ServletResponseAware {private static final long serialVersionUID = -758686623642845302L;private HttpServletRequest request;private HttpServletResponse response;private String message = "";private String title;public String getTitle() {return title;}public void setTitle(String title) {System.out.println(title);this.title = title;}public void setServletRequest(HttpServletRequest request) {this.request = request;}public void setServletResponse(HttpServletResponse response) {this.response = response;}public String getMessage() {return message;}public String create() throws Exception {PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(ServletActionContext.getRequest());System.out.println("create执行到此---------》" + poCtrl1);poCtrl1.setServerPage(request.getContextPath() + "/poserver.zz"); // 此行必须// 隐藏菜单栏poCtrl1.setMenubar(true);// 设置Office办公软件类型// poCtrl1.setOfficeVendor(OfficeVendorType.WPSOffice);poCtrl1.addCustomToolButton("保存", "SaveDocument()", 1);// 隐藏工具栏poCtrl1.setCustomToolbar(true);// 设置边框颜色poCtrl1.setBorderColor(Color.blue);// 设置边框样式poCtrl1.setBorderStyle(BorderStyleType.BorderThin);// 设置标题栏文字poCtrl1.setCaption("创建一个文档");// 保存前的检查// poCtrl1.setJsFunction_BeforeDocumentSaved("BeforeDocumentSaved()");// 设置保存页面poCtrl1.setSaveFilePage("saveword.action");// 新建Word文件,webCreateNew方法中的两个参数分别指代“操作人”和“新建Word文档的版本号”poCtrl1.webCreateNew("vivid", DocumentVersion.Word2007);poCtrl1.setTagId("PageOfficeCtrl1"); // 此行必须return "create";}/*** 在线打开一个PDF*/public String openPDF() throws Exception {PDFCtrl pdf = new PDFCtrl(ServletActionContext.getRequest());pdf.setServerPage(request.getContextPath() + "/poserver.zz");System.out.println(request.getContextPath());// 设置界面样式pdf.setBorderColor(Color.RED);pdf.setCaption("创建一个PDF");pdf.setBorderStyle(BorderStyleType.BorderFlat);pdf.setTheme(ThemeType.Office2010);//设置菜单选项pdf.addCustomToolButton("打印", "Print()", 6);pdf.addCustomToolButton("隐藏/显示书签", "SetBookmarks()", 0);pdf.addCustomToolButton("-", "", 0);//搜索设置pdf.addCustomToolButton("搜索", "SearchText()", 0);pdf.addCustomToolButton("搜索下一个", "SearchTextNext()", 0);pdf.addCustomToolButton("搜索上一个", "SearchTextPrev()", 0);pdf.addCustomToolButton("实际大小", "SetPageReal()", 16);pdf.addCustomToolButton("适合页面", "SetPageFit()", 17);pdf.addCustomToolButton("适合宽度", "SetPageWidth()", 18);pdf.addCustomToolButton("-", "", 0);pdf.addCustomToolButton("首页", "FirstPage()", 8);pdf.addCustomToolButton("上一页", "PreviousPage()", 9);pdf.addCustomToolButton("下一页", "NextPage()", 10);pdf.addCustomToolButton("尾页", "LastPage()", 11);pdf.addCustomToolButton("-", "", 0);// // 关闭菜单// pdf.setMenubar(false);// 打开PDF文档pdf.webOpen("doc/test.pdf");pdf.setTagId("PDFCtrl1");return "pdf";}
/*** 将文档转为pdf*/public String wordToPDF() throws Exception{FileMakerCtrl fmCtrl = new FileMakerCtrl(request);fmCtrl.setServerPage(request.getContextPath()+"/poserver.zz");WordDocument doc = new WordDocument();//禁用右击事件doc.setDisableWindowRightClick(true);//给数据区域赋值,即把数据填充到模板中相应的位置doc.openDataRegion("PO_company").setValue("北京卓正志远软件有限公司  ");fmCtrl.setSaveFilePage("saveword.action");fmCtrl.setWriter(doc);fmCtrl.setJsFunction_OnProgressComplete("OnProgressComplete()");fmCtrl.fillDocumentAsPDF("doc/template.doc", DocumentOpenType.Word, "a.pdf");fmCtrl.setTagId("FileMakerCtrl1"); //此行必须return "wordToPDF";}/*** * @Title: autoInsert* @Description: 自动添加到文档中* @author vivid* @time 2016-3-24 下午4:38:38* @return* @throws Exception*/public String autoInsert() throws Exception {// 1、初始化实例FileMakerCtrl fmCtrl = new FileMakerCtrl(ServletActionContext.getRequest());fmCtrl.setServerPage(request.getContextPath() + "/poserver.zz");System.out.println(request.getContextPath());// 生成随机idString id = String.valueOf(new Random().nextInt(100));System.out.println(id);// String id = "2";request.setAttribute("id", id);System.out.println(title);if (id != null && id.length() > 0) {// WordDocument 类代表一个Word文档,用来读取用户输入到Word文档中的数据WordDocument doc = new WordDocument();// 禁用右击事件doc.setDisableWindowRightClick(true);// 给数据区域赋值,即把数据填充到模板中相应的位置doc.openDataRegion("PO_company").setValue(title);//    doc.openDataRegion("po_second").setValue("mftcc" + id);// 设置 saveMaker.jsp 用来保存文档。fmCtrl.setSaveFilePage("saveMaker.jsp?id=" + id);fmCtrl.setWriter(doc);fmCtrl.setJsFunction_OnProgressComplete("OnProgressComplete()");fmCtrl.setFileTitle("文档" + id + ".doc");fmCtrl.fillDocument("doc/template.doc", DocumentOpenType.Word);}fmCtrl.setTagId("FileMakerCtrl1"); // 此行必须return "autoInsert";}/** 打开文档并修改保存*/public String openword() throws Exception {PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(ServletActionContext.getRequest());poCtrl1.setServerPage("poserver.zz"); // 此行必须// 设置标题poCtrl1.setCaption("打开文档操作");// 创建工具条poCtrl1.addCustomToolButton("保存", "SaveDocument()", 1);poCtrl1.addCustomToolButton("-", "", 0);poCtrl1.addCustomToolButton("打印", "ShowPrintDlg()", 6);poCtrl1.addCustomToolButton("-", "", 0);poCtrl1.addCustomToolButton("全屏切换", "SetFullScreen()", 4);poCtrl1.addCustomToolButton("-", "", 0);poCtrl1.addCustomToolButton("加盖印章", "AddSeal()", 5);poCtrl1.addCustomToolButton("手写签批", "AddHandSign()", 5);poCtrl1.addCustomToolButton("验证印章", "VerifySeal()", 5);poCtrl1.setSaveFilePage("saveword.action");poCtrl1.webOpen("doc/test.doc", OpenModeType.docNormalEdit, "张三");poCtrl1.setTagId("PageOfficeCtrl1"); // 此行必须return "openword";}/** 文档保存操作*/public String saveword() throws Exception {FileSaver fs = new FileSaver(request, response);request.setAttribute("FileSaver", fs);fs.saveToFile(request.getSession().getServletContext().getRealPath("doc/")+ "/" + fs.getFileName());// fs.saveToFile(request.getContextPath()+"/doc/"+fs.getFileName());System.out.println(request.getSession().getServletContext().getRealPath("doc/"));System.out.println(fs.getFileName());fs.showPage(200, 400);message = "保存成功!";return "saveword";}}

ExcelDemo:

package com.demo.action;import java.awt.Color;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;import com.opensymphony.xwork2.ActionSupport;
import com.zhuozhengsoft.pageoffice.BorderStyleType;
import com.zhuozhengsoft.pageoffice.FileSaver;
import com.zhuozhengsoft.pageoffice.OpenModeType;
import com.zhuozhengsoft.pageoffice.PageOfficeCtrl;
import com.zhuozhengsoft.pageoffice.excelwriter.Cell;
import com.zhuozhengsoft.pageoffice.excelwriter.Sheet;
import com.zhuozhengsoft.pageoffice.excelwriter.Workbook;/*** * @ClassName: ExcelDemo* @Description: TODO* @author vivid* @date 2016-3-24 下午1:22:55* */
@SuppressWarnings("serial")
public class ExcelDemo extends ActionSupport implements ServletRequestAware,ServletResponseAware {private HttpServletRequest request;private HttpServletResponse response;private String message = "";public void setServletRequest(HttpServletRequest request) {this.request = request;}public void setServletResponse(HttpServletResponse response) {this.response = response;}public String getMessage() {return message;}// 此处只简单的实现了Excel文件的在线编辑和保存,// 动态填充单元格、提交单元格等其他功能的实现请参考通过JSP编写的示例public String openexcel() throws Exception {PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(ServletActionContext.getRequest());poCtrl1.setServerPage("poserver.do"); // 此行必须poCtrl1.setCaption("操作Excel文档");//设置边框的类型poCtrl1.setBorderStyle(BorderStyleType.BorderThin);//设置边框的颜色poCtrl1.setBorderColor(Color.blue);// 代表一个Excel文档,用来读取用户输入到Excel表格中的数据,填充Excel表格Workbook workbook = new Workbook();// 参数为要打开的Excel文件中的Sheet表单的名称Sheet sheet = workbook.openSheet("Sheet1");// 获取sheet名称String name = sheet.getName();System.out.println("--------" + name);// 打开指定的单元格(“B4”单元格),并返回 Cell 对象Cell B4 = sheet.openCell("B4");// 给单元格赋值B4.setValue("B产品");// 设置单元格前景色B4.setForeColor(Color.green);// 打开指定的表格,并返回 Table 对象// Table XXX =sheet.openTable("XXX");// 提交单元格数据// B4.setSubmitName("pname");poCtrl1.setWriter(workbook);// 工具栏poCtrl1.addCustomToolButton("保存", "SaveDocument()", 1);poCtrl1.addCustomToolButton("-", "", 0);poCtrl1.addCustomToolButton("打印", "ShowPrintDlg()", 6);poCtrl1.addCustomToolButton("-", "", 0);poCtrl1.addCustomToolButton("全屏切换", "SetFullScreen()", 4);poCtrl1.addCustomToolButton("-", "", 0);poCtrl1.addCustomToolButton("加盖印章", "AddSeal()", 5);poCtrl1.addCustomToolButton("手写签批", "AddHandSign()", 5);poCtrl1.addCustomToolButton("验证印章", "VerifySeal()", 5);// 设置保存页poCtrl1.setSaveFilePage("saveexcel.action");// 打开文件poCtrl1.webOpen("doc/test.xls", OpenModeType.xlsNormalEdit, "张三");poCtrl1.setTagId("PageOfficeCtrl1"); // 此行必须return "openexcel";}public String saveexcel() throws Exception {FileSaver fs = new FileSaver(request, response);request.setAttribute("FileSaver", fs);// 将修改的Excel文件保存到相应的路径下fs.saveToFile(request.getSession().getServletContext().getRealPath("doc/")+ "/" + fs.getFileName());// 弹出窗口显示保存结果// fs.showPage(300, 300);// message = "显示自定义保存结果。";// 设置保存结果信息fs.setCustomSaveResult("success");return "saveexcel";}}

下面以在线生成word示例作为记录,其他自己练习,或下载我的代码查看: http://download.csdn.net/detail/erris/9474348

首页index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><title>pageOfficeDemo</title><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><script type="text/javascript"></script><body><div style="text-align:center;"><b>PageOfficeDemo</b><br><br><a href="createWord.action" style="font:blue">1、在线创建一个word文档</font></a><br/><br/><a href="openword.action " style="font:blue"> 2、在线编辑保存Word文档</font></a> <br/><br/><a href="href.jsp" style="font:blue">3、在线替换word文档内容</font></a> <br/><br/><a href="openexcel.action"  style="font:blue">4、在线编辑保存Excel文档</font></a> <br/><br/><a href="openPDF.action" style="font:blue">5、在线打开PDF文档</font></a> <br/><br/><a href="wordToPDF.action" style="font:blue">6、word插入数据后保存为PDF</font></a> <br/><br/></div></body>
</html>

生成word文档:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib uri="http://java.pageoffice.cn" prefix="po"%> <!-- 必须 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head>
<body><!--**************   卓正 PageOffice 客户端代码开始    ************************--><script language="javascript" type="text/javascript">function SaveDocument() {var title = document.getElementById("title").value;alert(title);if (title != null) {document.getElementById("PageOfficeCtrl1").WebSave();} else {alert("请输入要保存的文件名!!");}//alert(document.getElementById("PageOfficeCtrl1").CustomSaveResult);}</script><div style="width: 100%; height: 800px"><po:PageOfficeCtrl id="PageOfficeCtrl1" /></div>
</body>
</html>

运行截图:

源码下载地址:http://download.csdn.net/detail/erris/9474348

MVC模式下对pageOffice插件的简单整合使用相关推荐

  1. 【案例分享】使用ActiveReports报表工具,在.NET MVC模式下动态创建报表

    提起报表,大家会觉得即熟悉又陌生,好像常常在工作中使用,又似乎无法准确描述报表.今天我们来一起了解一下什么是报表,报表的结构.构成元素,以及为什么需要报表. 什么是报表 简单的说:报表就是通过表格.图 ...

  2. MVC模式下My97DatePicker日期控件引用注意事项

    My97DatePicker日期控件之前在用webform模式开发的时候,只要 <script language="javascript" type="text/j ...

  3. 基于MVC模式下的二手车拍卖平台设计

    课程名称:<软件体系结构与设计模式> 实验项目名称:基于MVC模式下的二手车拍卖平台设计 实验内容 按下列要求编写程序并上机调试运行: 拍卖系统要又三个显示界面,分别是车体图片,文字描述和 ...

  4. 编码风格:Mvc模式下SSM环境,代码分层管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.分层策略 MVC模式与代码分层策略,MVC全名是ModelViewController即模型-视图-控制器,作为一种软件设计典范,用一种业 ...

  5. php下的ssm模式,编码风格:Mvc模式下SSM环境,代码分层管理

    一.分层策略 MVC模式与代码分层策略,MVC全名是ModelViewController即模型-视图-控制器,作为一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到 ...

  6. Android:MVC模式(下)

    在上一篇文章中,我们将 View 类单独出来并完成了设计和编写.这次我们将完成 Model 类,并通过 Controller 将两者连接起来,完成这个计算器程序. 模型(Model)就是程序中封装了数 ...

  7. Chrome 插件:无痕浏览模式下加载插件、启用插件设置方法

    通过 chrome://extensions/ 进入 chrome 插件列表,进入插件的详细信息页. 在无痕模式下启用的开关勾选上. 然后就好了. 喜欢的点个赞❤吧!

  8. Asp.Net mvc模式下使用ReportViewer

    1,项目首先引用ReportViewer 右击项目文件下的"引用",找到ReportViewer并引用(前提是安装的vs要支持,若不支持,请看下一步骤),如下图所示. P.S.请注 ...

  9. MVC模式下的小试牛刀(附加案例过程详细实现步骤➕源代码)

    MVC概述 SUN公司推出了两种Web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式 MVC的开发流程 案例:

最新文章

  1. iOS 修改textholder的颜色
  2. Python学习---Python安装与基础1205
  3. Java 原生日志 java.util.logging
  4. How to change in the Cocos2d-x project from landscape to portrait both in iOS and Android
  5. wdcp+定时运营php_wdcp设置计划任务
  6. Java源码分析:深入探讨Iterator模式
  7. iOS url出现特殊字符处理 -- stringByAddingPercentEncodingWithAllowedCharacters
  8. 指标搭建篇:如何快速定位数据异常?——ROI异常实战案例
  9. Flexbox弹性盒模型
  10. html在线音频播放器实训总结,HTML5音乐列表播放器SMusic开发总结
  11. 尴尬!微软的 PowerShell 竟是 Linux 用户最多!| 极客头条
  12. Nodejs 文件 与 路径 相关用法实例解析
  13. Audio 加载hal (loadHwModule)
  14. oracle学习(1)--------windows环境下的安装和基本操作
  15. SpringBoot 整合 kaptcha + redis 实现 图形验证码登录
  16. base64加密后字符串自动换行问题
  17. c语言函数max 的作用,C语言问题—max()函数
  18. 怎么快速调出计算机资源管理器,Win7下快速打开资源管理器的五个方法
  19. 必应搜索昨晚开始恢复正常访问
  20. 微型计算机的中央处理器由什么组成,中央处理器由什么组成?

热门文章

  1. 中国人去美国做计算机软件,中国人在国外都从事什么工作?
  2. iOS越狱包 重签名
  3. 树莓派误删Wastbastket(垃圾桶)图标的找回方法
  4. 土地利用/覆盖遥感分类研究
  5. 【代码】PHP5 怎样制作图片验证码
  6. C#应用程序通过SqlClient读取附加mdf文件数据库的连接字符串
  7. vue3源码详细分析
  8. 分享6:绘制二维码/二维条码(java版)
  9. 【求职】完美世界Java 方向面经
  10. 常用单词计算机,计算机常用单词表.xls