- 浏览: 142461 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (140)
- ruby on rails (23)
- 随笔 (1)
- 部署 (3)
- ubuntu源 (2)
- linux (28)
- web (9)
- IT (3)
- linux,数据库 (3)
- MOOC (4)
- ubuntu (20)
- win7 (2)
- git (6)
- github (2)
- ubuntu,python (1)
- java,JDK (1)
- ubuntu,qq (1)
- vagrant (3)
- virtualbox (2)
- sass (1)
- centos (3)
- Sublime (1)
- nginx (4)
- passenger (1)
- VPN (0)
- mysql (4)
- VIM (1)
- bbb (1)
- 编码设置 (2)
- mongo (4)
- edx (2)
- ssh (1)
- python (1)
- phpmyadmin (1)
- libreoffice (2)
- docker (4)
- pg (1)
- PostgreSQL (2)
- 系统时间设置 (1)
- ansible (1)
- Sinatra (1)
- 硬盘挂载 (1)
- npm (1)
- smtp (1)
- docker 镜像 (1)
- Memcached (1)
最新评论
前言
在许多Web应用中都需要预览文档的功能。而用户可能用不同的设备访问Web应用,可能是装有Windows系统的PC台式机,也有可能是iOS系统的iPad。一般来说,要预览的文档通常是主流的Office文档,包括.doc、.ppt、.docx、.pptx文档,也包括Adobe的.pdf文档。
因此开发一个能够在不同客户端上使用的,支持主流Office文档类型的在线文档预览系统就显得非常重要。
目标
实现基于Web的跨平台的在线预览功能,支持主流Office文档。另外我们的服务器是Linux系统,不能够安装Microsoft Office软件。
我的解决方案
先大致地说一下我是如何实现的。为了实现这个功能,我用了下面的组件:
PDF.js
OpenOffice
PyODConverter
PDF.js 是Mozilla实验室开发的关于HTML5技术的一个开源项目,用于在网页上显示PDF文档,而不需要任何浏览器插件等原生代码。目前这个开源项目放在了GitHub上,网址是https://github.com/andreasgal/pdf.js
演示地址:http://mozilla.github.io/pdf.js/web/viewer.html
OpenOffice是Apache开源软件基金会开发的一款开源软件,是可以在Linux上运行的Office软件。OpenOffice可以打开主流的Microsoft Office的各种文档,例如.doc,.docx,.ppt,.pptx格式的文档。OpenOffice有一个文档转换服务,这个服务是以网络服务的形式运行的。启动这个服务,我就可以在任何类型的代码中通过端口调用这个服务。
PyODConverter是一个Python脚本,用于自动化的文档格式转换,依赖于LibreOffice or OpenOffice。我用它把Office文档转成PDF文档。
PyODConverter代码托管在 https://github.com/jamayka/barberry-plugin-openoffice/tree/master/externals/pyodconverter 上。
实现过程
整个实现分为**“Office文档转PDF”**和**“PDF文档在Web端显示”**两部分。
,后端负责将各种Office文档通过OpenOffice服务转换成PDF文档,而前端通过pdf.js显示PDF的内容。由于是采用了pdf.js显示PDF文档,浏览器端不需要安装任何插件,但是需要支持部分HTML5的功能特性。因此旧浏览器例如IE8,IE7,IE6就不能够使用pdf.js了.
Office文档转PDF
我利用了OpenOffice服务将各种Office文档转换成了PDF文档。写的脚本是*rake task*脚本,这样我可以用*rake*命令运行此脚本。这个脚本作为一个守护进程运行,它不断地检查系统里是否有新的上传文件。如果有新上传的文件,则启动转换过程,步骤如下:
启动OpenOffice的服务
检查是否有新的Office文档上传
调用PyODConverter转换文档
更新Model上的字段,指向生成的用于预览的PDF
重复步骤2到4
整个rake task脚本的代码如下:
# -*- encoding : utf-8 -*-
PYTHON_PATH = '/opt/openoffice4/program/python'
CONVERTER_PATH = File.expand_path('../DocumentConverter.py', __FILE__)
def gen_preview(beDaemon = false)
begin
no_preview_materials = CoursewareMaterial.where(preview_file_name: nil).where(['doc', 'docx', 'ppt', 'pptx'].map {|x| "upload_file_name LIKE '%.#{x}'"}.join(' or '))
if no_preview_materials.size > 0
puts "Prepare to process #{no_preview_materials.size} items."
no_preview_materials.each do |material|
begin
generate_preview material
rescue
puts "[Exception] #{$!}".red
end
end
end
break if not beDaemon
sleep 30
end while true
end
def generate_preview material
puts "Generating preview PDF for [#{material.upload_file_name}]..."
if material.upload.path.to_s =~ /\.(doc|docx|ppt|pptx|pdf)$/
tmpPdfPath = File.join(Dir.tmpdir, File.basename(material.upload.path, '.*') + '.pdf')
# try to delete existing temporary file if it exists.
begin
File.delete tmpPdfPath
rescue
# do nothing
end
# relaunch openoffice if it quit.
if `pgrep soffice`.size == 0
puts 'Relaunch OpenOffice service.'
spawn 'soffice "-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager" -norestore -nofirststartwizard -nologo -headless &'
end
out = nil
cmd = "#{PYTHON_PATH} #{CONVERTER_PATH} '#{material.upload.path}' '#{tmpPdfPath}'"
puts "Execute command: \n#{cmd}"
out = `#{cmd}`
if File.exists?(tmpPdfPath)
material.preview = File.open(tmpPdfPath, 'rb')
material.save
File.delete tmpPdfPath
puts "Preview PDF for [#{material.upload_file_name}] is generated.".green
else
puts "An error occured when invoke DocumentConverter.py. #{out}".red
end
else
puts "The material [#{material.upload_file_name}] is not available for generating preview PDF.".yellow
end
end
PDF文档在Web端显示
首先在asset pipeline中添加pdf.js,这一步可以通过引入*pdfjs-rails*这个Gem实现。然后在页面中引用需要的js和css资源即可,而这些资源包含在*pdfjs-rails*中。
Gem pdfjs-rails代码托管在https://github.com/concordia-publishing-house/pdfjs-rails中。
然后在view上添加前端代码。我用的是ERB,因此对应的文件是preview.html.erb。此文件中的代码如下所示:
<%= javascript_include_tag "compatibility" %>
<%= javascript_include_tag "l10n" %>
<%= javascript_include_tag "pdf" %>
<%= javascript_include_tag "pdfviewer" %>
<%= stylesheet_link_tag"viewer", :media => "all" %>
......
<div>
<% if not (pdf_url.nil? or pdf_url.empty?) %>
<b>内容预览:</b>
<%= pdf_viewer pdf_url %>
<% end %>
</div>
......
如以上代码所示,*pdfjs_rails*提供了用于自动生成HTML的*pdf_viewer*方法,简化了代码。当要显示一个文档时,还需要判断这个文档对应的PDF文档有没有生成,因此需要一个类似于if pdf_url.nil?的代码。为了简单起见,我就直接把此代码写在view上了。
安装部署
安装OpenOffice到Linux CentOS
这里有详细说明 http://www.if-not-true-then-false.com/2010/install-openoffice-org-on-fedora-centos-red-hat-rhel/
以作为后台服务的方式运行OpenOffice
这里有详细说明 http://stackoverflow.com/questions/11591643/failed-to-connect-to-openoffice-headless-mode
下载PyODConverter脚本
从 https://github.com/concordia-publishing-house/pdfjs-rails 下载PyODConverter脚本,放在lib/tasks/prevew目录下面,然后我把它直接上传到我的代码库里。
演示
其它几种方案
我在方案选型的过程中研究了好几种方案,但是除了上面所描述的方案之外的其他所有方案都因为各种原因而不能满足要求。下面一一列举这些未选中的方案,以及解释为何它们满足不了要求。
FlexPaper
FlexPaper 是一个商业软件,但是有采用GPLv3开源协议的免费版。然而,它仅支持ASP.NET、PHP和Java,而且部署相对复杂。我的系统是基于Linux的,开发技术是Ruby on Rails,因此不太容易和它整合在一起。
Accusoft Document Viewers
Accusoft Document Viewers 是一个商业软件,有一些很酷的Demos,下面列举两个Demo的网址。
http://prizmdemos.accusoft.com/flash.php
http://prizmdemos.accusoft.com/html5.php
可是这个软件的价格太高,而且不是提供一个组件,而是提供一套解决方案,对于我们的目标来说,这些解决方案太“重”了。
Google的文档预览服务
Google的文档预览服务(Google Docs Viewer) 真心很不错,这里有个应用实例,但是最大的问题是经常被墙,无法稳定地工作。
CUPS-PDF
根据一个StackOverflow上的解答,有一个叫CUPS-PDF的软件可以安装在Linux系列(包括Mac OS X)的操作系统上。该软件能够为系统添加一个PDF打印机。它是另一种文档转PDF的方法,通过安装PDF打印机将文档“打印”成PDF文档。用OpenOffice的命令行工具可以打印一个文档,并指定要使用的打印机。只要指定使用CUPS-PDF的打印机,就能够输出一个PDF文件到文件系统中的一个位置上。
这种方法可以很精确地将文档转换成PDF文档,可以说是“所打印即所得”
原文:
在许多Web应用中都需要预览文档的功能。而用户可能用不同的设备访问Web应用,可能是装有Windows系统的PC台式机,也有可能是iOS系统的iPad。一般来说,要预览的文档通常是主流的Office文档,包括.doc、.ppt、.docx、.pptx文档,也包括Adobe的.pdf文档。
因此开发一个能够在不同客户端上使用的,支持主流Office文档类型的在线文档预览系统就显得非常重要。
目标
实现基于Web的跨平台的在线预览功能,支持主流Office文档。另外我们的服务器是Linux系统,不能够安装Microsoft Office软件。
我的解决方案
先大致地说一下我是如何实现的。为了实现这个功能,我用了下面的组件:
PDF.js
OpenOffice
PyODConverter
PDF.js 是Mozilla实验室开发的关于HTML5技术的一个开源项目,用于在网页上显示PDF文档,而不需要任何浏览器插件等原生代码。目前这个开源项目放在了GitHub上,网址是https://github.com/andreasgal/pdf.js
演示地址:http://mozilla.github.io/pdf.js/web/viewer.html
OpenOffice是Apache开源软件基金会开发的一款开源软件,是可以在Linux上运行的Office软件。OpenOffice可以打开主流的Microsoft Office的各种文档,例如.doc,.docx,.ppt,.pptx格式的文档。OpenOffice有一个文档转换服务,这个服务是以网络服务的形式运行的。启动这个服务,我就可以在任何类型的代码中通过端口调用这个服务。
PyODConverter是一个Python脚本,用于自动化的文档格式转换,依赖于LibreOffice or OpenOffice。我用它把Office文档转成PDF文档。
PyODConverter代码托管在 https://github.com/jamayka/barberry-plugin-openoffice/tree/master/externals/pyodconverter 上。
实现过程
整个实现分为**“Office文档转PDF”**和**“PDF文档在Web端显示”**两部分。
,后端负责将各种Office文档通过OpenOffice服务转换成PDF文档,而前端通过pdf.js显示PDF的内容。由于是采用了pdf.js显示PDF文档,浏览器端不需要安装任何插件,但是需要支持部分HTML5的功能特性。因此旧浏览器例如IE8,IE7,IE6就不能够使用pdf.js了.
Office文档转PDF
我利用了OpenOffice服务将各种Office文档转换成了PDF文档。写的脚本是*rake task*脚本,这样我可以用*rake*命令运行此脚本。这个脚本作为一个守护进程运行,它不断地检查系统里是否有新的上传文件。如果有新上传的文件,则启动转换过程,步骤如下:
启动OpenOffice的服务
检查是否有新的Office文档上传
调用PyODConverter转换文档
更新Model上的字段,指向生成的用于预览的PDF
重复步骤2到4
整个rake task脚本的代码如下:
# -*- encoding : utf-8 -*-
PYTHON_PATH = '/opt/openoffice4/program/python'
CONVERTER_PATH = File.expand_path('../DocumentConverter.py', __FILE__)
def gen_preview(beDaemon = false)
begin
no_preview_materials = CoursewareMaterial.where(preview_file_name: nil).where(['doc', 'docx', 'ppt', 'pptx'].map {|x| "upload_file_name LIKE '%.#{x}'"}.join(' or '))
if no_preview_materials.size > 0
puts "Prepare to process #{no_preview_materials.size} items."
no_preview_materials.each do |material|
begin
generate_preview material
rescue
puts "[Exception] #{$!}".red
end
end
end
break if not beDaemon
sleep 30
end while true
end
def generate_preview material
puts "Generating preview PDF for [#{material.upload_file_name}]..."
if material.upload.path.to_s =~ /\.(doc|docx|ppt|pptx|pdf)$/
tmpPdfPath = File.join(Dir.tmpdir, File.basename(material.upload.path, '.*') + '.pdf')
# try to delete existing temporary file if it exists.
begin
File.delete tmpPdfPath
rescue
# do nothing
end
# relaunch openoffice if it quit.
if `pgrep soffice`.size == 0
puts 'Relaunch OpenOffice service.'
spawn 'soffice "-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager" -norestore -nofirststartwizard -nologo -headless &'
end
out = nil
cmd = "#{PYTHON_PATH} #{CONVERTER_PATH} '#{material.upload.path}' '#{tmpPdfPath}'"
puts "Execute command: \n#{cmd}"
out = `#{cmd}`
if File.exists?(tmpPdfPath)
material.preview = File.open(tmpPdfPath, 'rb')
material.save
File.delete tmpPdfPath
puts "Preview PDF for [#{material.upload_file_name}] is generated.".green
else
puts "An error occured when invoke DocumentConverter.py. #{out}".red
end
else
puts "The material [#{material.upload_file_name}] is not available for generating preview PDF.".yellow
end
end
PDF文档在Web端显示
首先在asset pipeline中添加pdf.js,这一步可以通过引入*pdfjs-rails*这个Gem实现。然后在页面中引用需要的js和css资源即可,而这些资源包含在*pdfjs-rails*中。
Gem pdfjs-rails代码托管在https://github.com/concordia-publishing-house/pdfjs-rails中。
然后在view上添加前端代码。我用的是ERB,因此对应的文件是preview.html.erb。此文件中的代码如下所示:
<%= javascript_include_tag "compatibility" %>
<%= javascript_include_tag "l10n" %>
<%= javascript_include_tag "pdf" %>
<%= javascript_include_tag "pdfviewer" %>
<%= stylesheet_link_tag"viewer", :media => "all" %>
......
<div>
<% if not (pdf_url.nil? or pdf_url.empty?) %>
<b>内容预览:</b>
<%= pdf_viewer pdf_url %>
<% end %>
</div>
......
如以上代码所示,*pdfjs_rails*提供了用于自动生成HTML的*pdf_viewer*方法,简化了代码。当要显示一个文档时,还需要判断这个文档对应的PDF文档有没有生成,因此需要一个类似于if pdf_url.nil?的代码。为了简单起见,我就直接把此代码写在view上了。
安装部署
安装OpenOffice到Linux CentOS
这里有详细说明 http://www.if-not-true-then-false.com/2010/install-openoffice-org-on-fedora-centos-red-hat-rhel/
以作为后台服务的方式运行OpenOffice
这里有详细说明 http://stackoverflow.com/questions/11591643/failed-to-connect-to-openoffice-headless-mode
下载PyODConverter脚本
从 https://github.com/concordia-publishing-house/pdfjs-rails 下载PyODConverter脚本,放在lib/tasks/prevew目录下面,然后我把它直接上传到我的代码库里。
演示
其它几种方案
我在方案选型的过程中研究了好几种方案,但是除了上面所描述的方案之外的其他所有方案都因为各种原因而不能满足要求。下面一一列举这些未选中的方案,以及解释为何它们满足不了要求。
FlexPaper
FlexPaper 是一个商业软件,但是有采用GPLv3开源协议的免费版。然而,它仅支持ASP.NET、PHP和Java,而且部署相对复杂。我的系统是基于Linux的,开发技术是Ruby on Rails,因此不太容易和它整合在一起。
Accusoft Document Viewers
Accusoft Document Viewers 是一个商业软件,有一些很酷的Demos,下面列举两个Demo的网址。
http://prizmdemos.accusoft.com/flash.php
http://prizmdemos.accusoft.com/html5.php
可是这个软件的价格太高,而且不是提供一个组件,而是提供一套解决方案,对于我们的目标来说,这些解决方案太“重”了。
Google的文档预览服务
Google的文档预览服务(Google Docs Viewer) 真心很不错,这里有个应用实例,但是最大的问题是经常被墙,无法稳定地工作。
CUPS-PDF
根据一个StackOverflow上的解答,有一个叫CUPS-PDF的软件可以安装在Linux系列(包括Mac OS X)的操作系统上。该软件能够为系统添加一个PDF打印机。它是另一种文档转PDF的方法,通过安装PDF打印机将文档“打印”成PDF文档。用OpenOffice的命令行工具可以打印一个文档,并指定要使用的打印机。只要指定使用CUPS-PDF的打印机,就能够输出一个PDF文件到文件系统中的一个位置上。
这种方法可以很精确地将文档转换成PDF文档,可以说是“所打印即所得”
原文:
发表评论
-
ruby 回复功能
2015-03-24 21:44 685http://www.sitepoint.com/realti ... -
测试驱动开发(TDD)
2015-03-02 17:00 713测试驱动开发的基本过程如下: 1) 明确当前要完成的功能。可 ... -
详解rails命令行
2015-02-02 14:32 932http://blog.58share.com/?cat=7 ... -
Ruby is Big in China
2014-08-12 15:35 566http://stylesror.github.io/#rub ... -
ruby http get post
2014-07-31 11:22 789uri = URI('url') Net::H ... -
使用者認證
2014-07-29 11:18 445转自: http://ihower.tw/rails3/aut ... -
bundle exec rake i18n:check
2014-07-03 11:45 554bundle exec rake i18n:check -
ruby on rails+nginx+passenger+ubuntu
2014-06-06 00:19 887ruby 使用rvm安装 在使用rmv安装的ruby时候必 ... -
`gem install nokogiri -v '1.5.6' 报错
2014-05-18 13:07 622libxml2 is missing. please vis ... -
卸载指定版本 bundle
2014-05-05 18:04 2733gem uninstall bundler -v=1.6.2 ... -
使用Vagrant在Windows下部署开发环境
2014-03-06 10:34 724http://blog.smdcn.net/article/1 ... -
安装rails时的一个小注意
2013-12-17 10:08 882在ubuntu上安装ROR环境时候,我总是忘记一件事情,就是设 ... -
GitHub使用指南!(ubuntu)
2013-12-06 00:03 1107<!-- @page { margin: 2cm } P ... -
关于在win7上安装Ruby On Rails 环境的几点注意
2013-12-05 18:31 1501在window下安装Ruby On Rails 环境须知: 1 ... -
Ubuntu安装Ruby On Rails多版本
2013-11-29 23:44 902写Ruby程序的时候,可能 ... -
ruby数组基本操作
2013-11-08 14:52 756#创建数组的几种方法#字面量创建的方法 a = [1,2,3 ... -
Rails2.2新特性:本地化与国际化(2008-12-15 14:21:41)
2013-11-01 11:05 865http://fsjoy.blog.51cto.com/318 ... -
浅析Ruby on Rails部署方案
2013-09-27 15:16 781http://blog.csdn.net/jrckkyy/ar ... -
【转载】我是如何让Ruby项目速度提升10倍的?
2013-09-06 13:18 696作者详细描述了他是如 ... -
How to install Ruby on Rails in Ubuntu 12.04 LTS
2013-08-27 11:10 659http://blog.sudobits.com/2012/0 ...
相关推荐
Ruby on Rails是Ruby的一个Web开发框架,它提供了许多便利的工具和约定,使得开发人员能够快速构建功能丰富的Web应用。 在文件列表中,我们看到“ms_office_web_apps-master”很可能是一个Git仓库的主分支名称,...
区块链_智能合约_Solidity_保险应用_基于以太坊的技_1744433266
内容概要:本文档详细介绍了在Windows系统上安装MySQL数据库的具体步骤。首先,需要配置系统环境变量,包括新建MYSQL_HOME变量并将其添加到PATH中;其次,创建并编辑my.ini配置文件,设置MySQL的基本参数如端口、字符集、数据存放目录等;接着,在命令行工具中通过一系列指令完成MySQL的初始化、服务安装、启动以及root用户的密码设置和权限调整。整个流程涵盖了从环境搭建到最终确保MySQL服务正常运行的所有关键环节。 适合人群:适用于有一定计算机操作基础,尤其是对数据库管理有一定兴趣或需求的技术人员。 使用场景及目标:①帮助用户在本地机器上成功部署MySQL数据库环境;②确保用户能够掌握MySQL的基本配置与管理技能,如环境变量配置、服务安装与卸载、用户权限管理等。 其他说明:在安装过程中可能会遇到一些常见问题,例如由于之前版本残留导致的服务安装失败,此时可以通过命令行删除旧服务(sc delete mysql)来解决。此外,为了保证安全性,务必及时修改root用户的初始密码。
内容概要:`STARTUP.A51` 是 Keil C51 编译器自带的启动文件,用于初始化 8051 单片机的硬件和软件环境。该文件主要完成三个任务:初始化堆栈指针、清零内部数据存储器、跳转到主程序。文件中定义了内存模式(如 SMALL),并设置了堆栈指针的初始值为 0x60。接着通过循环将内部数据存储器的所有字节清零,确保程序开始时数据存储器的状态是确定的。此外,文件还列出了 8051 单片机的各个中断向量地址,并为每个中断提供占位符,实际的中断处理程序需要在其他文件中实现。最后,启动代码段初始化堆栈指针和数据段后,跳转到 `MAIN` 函数开始执行主程序。; 适合人群:对嵌入式系统开发有一定了解,尤其是使用 8051 单片机的开发者。; 使用场景及目标:①理解 8051 单片机启动文件的工作原理;②掌握如何初始化堆栈指针和数据段;③熟悉中断向量表的设置及其作用。; 其他说明:此文件为程序正常运行提供了必要的初始化操作,开发者可以根据具体需求修改该文件以适应不同的硬件和软件环境。
内容概要:该论文研究了一种基于行波理论的输电线路故障诊断方法。当输电线路发生故障时,故障点会产生向两侧传播的电流和电压行波。通过相模变换对三相电流行波解耦,利用解耦后独立模量间的关系确定故障类型和相别,再采用小波变换模极大值法标定行波波头,从而计算故障点距离。仿真结果表明,该方法能准确识别故障类型和相别,并对故障点定位具有高精度。研究使用MATLAB进行仿真验证,为输电线路故障诊断提供了有效解决方案。文中详细介绍了三相电流信号生成、相模变换(Clarke变换)、小波变换波头检测、故障诊断主流程以及结果可视化等步骤,并通过多个实例验证了方法的有效性和准确性。 适合人群:具备一定电力系统基础知识和编程能力的专业人士,特别是从事电力系统保护与控制领域的工程师和技术人员。 使用场景及目标:①适用于电力系统的故障检测与诊断;②能够快速准确地识别输电线路的故障类型、相别及故障点位置;③为电力系统的安全稳定运行提供技术支持,减少停电时间和损失。 其他说明:该方法不仅在理论上进行了深入探讨,还提供了完整的Python代码实现,便于读者理解和实践。此外,文中还讨论了行波理论的核心公式、三相线路行波解耦、行波测距实现等关键技术点,并针对工程应用给出了注意事项,如波速校准、采样率要求、噪声处理等。这使得该方法不仅具有学术价值,也具有很强的实际应用前景。
内容概要:本文详细介绍了光伏-混合储能微电网能量管理系统的模型架构及其控制策略。首先探讨了光伏发电模块中的MPPT(最大功率点跟踪)控制,采用扰动观察法和改进型变步长策略来提高光伏板的发电效率。接着重点讲解了混合储能系统的功率分配,利用一阶低通滤波算法将功率需求分为低频和高频两部分,分别由蓄电池和超级电容处理。此外,文中还深入讨论了SOC(荷电状态)管理策略,确保电池和超级电容在不同工作状态下保持最佳性能。仿真结果显示,在光伏出力剧烈波动的情况下,系统能够有效地维持稳定的电压水平,并显著提高了储能设备的使用寿命。 适合人群:对光伏微电网、储能技术和能量管理系统感兴趣的科研人员、工程师和技术爱好者。 使用场景及目标:适用于研究和开发高效、可靠的光伏-混合储能微电网系统,旨在优化能量管理和提高系统稳定性。具体应用场景包括但不限于家庭光伏系统、小型微电网以及工业能源管理系统。 其他说明:文中提供了详细的代码实现和仿真结果,便于读者理解和复现实验。同时,模型设计采用了模块化思路,方便进行个性化修改和扩展。
内容概要:本文详细介绍了基于MATLAB和CVX平台实现的储能调峰调频联合优化模型。该模型不仅涵盖了储能的基本参数设定、负荷不确定性处理、充放电策略制定,还包括了调峰调频的联合调度、功率约束处理、鲁棒优化等方面的内容。通过构建考虑电池退化成本、充放电功率约束以及用户负荷不确定性的储能优化模型,展现了储能系统在电力系统中的高效协同工作。文中提供了详细的代码示例,解释了各个部分的功能和实现方法,强调了模型的深度与创新性。 适合人群:适用于具有一定编程基础和技术背景的研究人员、工程师以及希望深入了解储能系统优化的学生。 使用场景及目标:该模型主要用于电力系统中储能设备的优化调度,旨在提高储能系统的经济效益和社会效益。通过联合调峰调频,能够显著提升储能系统的收益,实现1+1>2的超线性增益效果。此外,该模型还可以用于教学和科研,帮助初学者理解和掌握储能优化的相关技术和理论。 其他说明:代码中包含了丰富的注释和模块化的子程序,使得整个模型易于理解和扩展。对于有经验的开发者,可以在现有基础上进一步改进和定制,以适应不同的应用场景。
大模型技术白皮书2023版
图像增广 PyTorch 版
批量修改文件名可以帮助用户节省大量时间,提高工作效率 里面附带使用教程
《计算机应用基础》第2章--Windows-XP操作系统.ppt
包括:源程序工程文件、Proteus仿真工程文件、电路原理图文件、配套技术手册、论文资料等 1、采用51/52单片机(通用)作为主控芯片; 2、采用1602液晶显示使用过程及状态,液晶屏亮度会随光线自动调整; 3、按键输入6位密码,输入密码正确则锁打开,显示open!输入密码错误次数超过3次,蜂鸣器报警并且锁定键盘; 4、密码可以自己修改,必须是锁打开时才能改密,为防止误操作,修改密码得输入两次; 5、采用24C02保存密码,掉电不丢失; 6、可通过红外遥控器输入密码操作锁的状态;
内容概要:本文深入剖析了2025年全球感知技术的十大发展趋势,涵盖多模态感知融合、3D感知与空间计算、脑机接口中的感知反馈技术、5G/6G赋能的超低延迟感知、语音与情感识别的高级化、生物感知与数字健康、环境感知与自适应智能、增强现实(AR)与触觉反馈技术、气味与化学感知、量子感知与极端条件测量。文章详细介绍了每项技术的技术原理、关键算法、实现方式、商业案例及未来前景,强调了感知技术在智慧城市、自动驾驶、智慧医疗、工业自动化等领域的深刻影响。报告指出,感知技术正从单一传感模式向多模态融合、从二维数据向三维空间重建、从传统网络通信向超低延迟和高可靠性网络升级,实现全场景、全维度的智能感知。; 适合人群:对感知技术感兴趣的科技爱好者、研究人员、决策者、企业管理层和投资人。; 使用场景及目标:①了解感知技术的最新进展和未来发展方向;②为技术研究提供全面、深入的参考;③为商业应用提供具体的案例和前景分析;④推动跨领域协同创新,构建开放共赢的产业生态。; 其他说明:报告基于近年来技术研发的最新进展、业界前沿的技术路线以及各大科技企业在商业落地方面的丰富实践。随着感知技术的不断成熟,数据隐私与安全保护问题也需高度重视,以确保技术进步与社会伦理和谐统一。未来,感知技术将成为推动社会进步和产业升级的重要力量,为实现万物互联、智慧决策和智能体验提供无限可能。
本论文主要论述了如何使用JAVA语言开发一个校园新闻网站 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述校园新闻网站的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析设计。 校园新闻网站的主要使用者分为管理员和用户,实现功能包括管理员:首页、个人中心、用户管理、新闻类型管理、校园新闻管理、留言板管理、论坛交流、系统管理,用户前台:首页、校园新闻、论坛交流、留言反馈、个人中心、后台管理等功能。由于本网站的功能模块设计比较全面,所以使得整个校园新闻网站信息管理的过程得以实现。 本系统的使用可以实现本校园新闻网站管理的信息化,可以方便管理员进行更加方便快捷的管理,可以提高管理人员的工作效率。 基于Springboot+vue的校园新闻网站【源码+数据库+参考论文】 感兴趣自行下载学习!
内容概要:本文详细探讨了三相三电平PWM整流器的闭环控制策略及其核心技术——三电平SVPWM算法。文章首先介绍了三相三电平PWM整流器的基本概念和优势,如输出三种电平以降低谐波含量并减少滤波器体积和成本。接着阐述了闭环控制策略的重要性,强调了电压外环和电流内环的双闭环控制机制。随后,文章深入讲解了三电平SVPWM算法的工作原理,包括空间电压矢量的选择、扇区判断、矢量作用时间和死区补偿等关键技术环节。此外,还讨论了中点电位平衡的问题以及PI参数的整定方法。最后,通过示波器测试验证了系统的性能指标,如THD低于3%,直流电压纹波小于1%。 适合人群:从事电力电子领域的工程师和技术人员,尤其是对三相三电平PWM整流器及其控制策略感兴趣的读者。 使用场景及目标:适用于高压大功率场合,旨在提高整流器的性能,降低谐波含量,实现单位功率因数运行。通过合理设计闭环控制策略和优化SVPWM算法,确保整流器在各种工况下都能稳定、高效地工作。 其他说明:文中提供了大量MATLAB和C语言代码片段,帮助读者更好地理解和实现相关算法。同时,针对实际调试过程中遇到的问题给出了实用的解决方案,如中点电位平衡和死区补偿等。
全新红娘本地交友系统定制版源码 相亲婚恋交友小程序源码
内容概要:文章探讨了AI技术,特别是DeepSeek,如何驱动地图生成的变革。首先介绍了地图制图在AI时代的背景与挑战,强调了DeepSeek与地图融合的两种主要方式:嵌入地图制图链和研发地图语言自身的预训练模型。随后详细描述了DeepSeek在地图生成中的具体应用,包括智能化地图生成器DoMapAI的整体框架,地图制图链中的知识图谱推理路径,以及地图语言的Token化过程。最后,文章总结了AI时代地图制图的职业变化和技术变革,指出地图制图正经历“大变局”。 适合人群:从事地图制图及相关领域的研究人员、工程师,以及对AI与地图生成感兴趣的学者。 使用场景及目标:①理解AI技术在地图生成中的应用,特别是DeepSeek的作用;②掌握智能化地图生成器DoMapAI的工作原理及其应用场景;③学习地图语言Token化的方法及其在地图生成中的应用;④探索AI时代地图制图的职业发展方向和技术变革。 阅读建议:本文内容较为专业,建议读者先了解基本的AI技术和地图制图知识。重点关注DeepSeek与地图融合的具体方法和应用场景,理解智能化地图生成器DoMapAI的工作流程,以及地图语言Token化的实现过程。在阅读过程中,可以结合实际案例进行思考,以更好地理解AI技术对地图制图的影响。
chromedriver-mac-arm64-135.0.7049.114.zip
《网络布线与小型局域网搭建(第2版)》第3章-布线系统的设计.ppt
内容概要:本文详细介绍了使用Abaqus软件进行子弹穿钢板模型的模拟方法,重点探讨了CAE文件的作用和创建过程。首先概述了子弹穿钢板模拟的重要性和应用场景,接着深入讲解了CAE文件的概念及其作为模拟‘大脑’的关键地位。文中提供了详细的Python代码示例,涵盖创建部件、定义材料属性、划分网格、设置接触条件以及显式动力学分析步骤等方面的内容。此外,还讨论了网格划分的艺术、接触设置的注意事项、求解器参数的选择以及后处理技巧,强调了每个环节的具体操作和优化建议。 适合人群:从事工程模拟领域的研究人员和技术人员,尤其是对Abaqus软件有一定了解并希望深入掌握其高级特性的用户。 使用场景及目标:适用于需要模拟高速冲击条件下材料行为的研究项目,如防护材料研发、结构抗冲击设计等。通过学习本文,读者能够掌握创建复杂工程模拟模型的方法,提高模拟效率和准确性。 其他说明:文章不仅提供了理论指导,还包括大量实用的操作提示和代码片段,有助于读者快速上手并在实践中不断改进模型。同时,文中提到的一些优化技巧对于提升计算性能和结果可靠性具有重要价值。