PageOffice 使用教程
PageOffice 是什么?
PageOffice 是一款专业的在线文档控件,主要用于在 Web 应用中(如 ASP.NET, Java, PHP 等)实现在线打开、编辑、保存、打印 Word、Excel、PPT、PDF 等各种 Office 文档的功能。

核心特点:
- 无需安装 Office: 客户端电脑上无需安装 Microsoft Office,即可通过浏览器直接编辑文档。
- 安全可控: 文档内容不会在客户端或服务器上产生临时文件,安全性高。
- 功能丰富: 提供全面的文档编辑功能,如修订、批注、表单域、数据填充、数字签名等。
- 易于集成: 提供标准化的 API 和控件,方便开发者快速集成到现有项目中。
环境准备与安装
在开始编码之前,请确保您的开发环境已准备就绪。
-
开发环境:
- 后端: 支持 .NET Framework / .NET Core (ASP.NET), Java (JSP/Servlet), PHP 等多种技术栈,本教程以 ASP.NET (C#) 为例。
- 前端: 任何现代浏览器(Chrome, Firefox, Edge, IE 11+ 等)。
- Web 服务器: IIS (ASP.NET), Tomcat (Java), Apache/Nginx (PHP) 等。
-
获取 PageOffice 资源:
(图片来源网络,侵删)- 从 PageOffice 官网下载开发包,解压后你会看到以下关键文件和文件夹:
PageOffice.dll/PageOffice.jar/PageOffice.php:核心组件。reginfo.ini/lic.lic:授权文件,这是程序能正常运行的关键。Samples:示例代码文件夹,强烈建议先运行示例,理解其工作模式。POInstall:安装向导工具,可以自动将控件注册到客户端浏览器中(可选,但推荐)。
- 从 PageOffice 官网下载开发包,解压后你会看到以下关键文件和文件夹:
-
部署核心文件到项目:
- 对于 ASP.NET (.NET Framework):
- 将
PageOffice.dll复制到你的 Web 项目的Bin文件夹下。 - 将
reginfo.ini复制到 Web 项目的根目录下。
- 将
- 对于 Java:
- 将
PageOffice.jar复制到你的 Web 项目的WEB-INF/lib文件夹下。 - 将
lic.lic复制到 Web 项目的WEB-INF文件夹下(或按官方指引配置路径)。
- 将
- 对于 PHP:
- 将
PageOffice.php复制到你的 Web 项目的根目录或包含路径下。 - 将
lic.lic复制到 Web 项目的根目录下。
- 将
- 对于 ASP.NET (.NET Framework):
核心概念:PageOffice 的工作模式
理解 PageOffice 的工作原理至关重要,它主要涉及三个角色:
- Web 服务器: 运行你的 ASP.NET/Java/PHP 应用程序,处理业务逻辑。
- PageOffice 服务器端组件: 在服务器端,负责与客户端控件通信、设置文档属性、处理用户操作(如保存)等。
- PageOffice 客户端控件: 一个 ActiveX 控件(IE)或浏览器插件(Chrome/Firefox/Edge),嵌入到 HTML 页面中,负责在客户端打开和渲染文档。
工作流程:
- 用户在浏览器中访问你的网页。
- 服务器端代码生成一个包含 PageOffice 控件的 HTML 页面,并附带一个文档的 URL。
- 浏览器加载页面,并尝试加载 PageOffice 客户端控件。
- 控件从服务器请求指定的文档,并在浏览器窗口中打开它。
- 用户编辑文档,点击“保存”按钮。
- 控件将文档内容通过 HTTP POST 请求发送回服务器上一个你指定的临时处理程序(如
SaveFile.aspx)。 - 服务器端的保存处理程序接收文档,并执行你定义的业务逻辑(如保存到数据库、指定文件夹等)。
第一个 PageOffice 应用程序:打开只读 Word 文档
让我们从一个最简单的例子开始:在网页中打开一个只读的 Word 文档。

步骤 1:创建网页
在你的 Web 项目中创建一个 ASPX 页面,OpenDoc.aspx。
步骤 2:编写前端代码 (OpenDoc.aspx)
在页面的 HTML 部分,你需要一个容器来放置 PageOffice 控件,并引入 PageOffice 的 JavaScript 文件。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="OpenDoc.aspx.cs" Inherits="YourProjectName.OpenDoc" %>
<!DOCTYPE html>
<html>
<head runat="server">PageOffice 示例:打开文档</title>
<!-- 引入 PageOffice 客户端脚本 -->
<script type="text/javascript" src="PageOffice.js" charset="utf-8"></script>
</head>
<body>
<form id="form1" runat="server">
<div style="width:1000px;height:600px;">
<!-- PageOfficeCtrl 控件将在这里显示 -->
<asp:Literal ID="PageOfficeCtrl1" runat="server"></asp:Literal>
</div>
</form>
</body>
</html>
步骤 3:编写后端代码 (OpenDoc.aspx.cs)
这是最关键的一步,在 C# 代码后端,你需要实例化 PageOffice.PageOfficeCtrl 对象,并进行配置。
using System;
using System.Web.UI;
using PageOffice; // 引入 PageOffice 命名空间
namespace YourProjectName
{
public partial class OpenDoc : Page
{
protected void Page_Load(object sender, EventArgs e)
{
// 1. 创建 PageOfficeCtrl 控件实例
PageOfficeCtrl poCtrl = new PageOfficeCtrl();
// 2. 设置控件属性
poCtrl.ServerPage = "PageOfficeServer.aspx"; // **必须设置**,指向 PageOffice 的网关文件
poCtrl.SetJsFunction("AfterDocumentOpened", "AfterDocumentOpened"); // 设置打开文档后的回调函数(可选)
// 3. 设置文档打开方式
// OpenModeType: 枚举类型,定义了多种打开模式
// - ReadOnly: 只读模式
// - Normal: 普通编辑模式
// - DocAdmin: 文档管理模式
poCtrl.WebOpen("doc/test.docx", OpenModeType.ReadOnly);
// 4. 将控件添加到页面中
// 注意:这里使用 Literal 控件来输出 HTML
PageOfficeCtrl1.Text = poCtrl.HtmlCode;
}
}
}
步骤 4:配置 Web.config
为了让 PageOffice 正常工作,你需要在 Web.config 中添加一些配置。
<configuration>
<system.web>
...
<!-- 1. 注册 PageOffice 处理程序 -->
<httpHandlers>
<add verb="GET,POST" path="PageOfficeServer.aspx" type="PageOffice.PageOfficeHandler, PageOffice" />
<add verb="GET,POST" path="posetup.exe" type="PageOffice.PosetupHandler, PageOffice" />
<add verb="GET,POST" path="pageoffice.js" type="PageOffice.PageOfficeJSHandler, PageOffice" />
<add verb="GET,POST" path="favicon.ico" type="PageOffice.PageOfficeIconHandler, PageOffice" />
</httpHandlers>
</system.web>
<!-- 2. 对于 IIS 7.0 及以上版本,还需要在 system.webServer 节点下添加 -->
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<add name="PageOfficeHandler" verb="GET,POST" path="PageOfficeServer.aspx" type="PageOffice.PageOfficeHandler, PageOffice" resourceType="Unspecified" preCondition="integratedMode" />
<add name="PosetupHandler" verb="GET,POST" path="posetup.exe" type="PageOffice.PosetupHandler, PageOffice" resourceType="Unspecified" preCondition="integratedMode" />
<add name="PageOfficeJSHandler" verb="GET,POST" path="pageoffice.js" type="PageOffice.PageOfficeJSHandler, PageOffice" resourceType="Unspecified" preCondition="integratedMode" />
<add name="PageOfficeIconHandler" verb="GET,POST" path="favicon.ico" type="PageOffice.PageOfficeIconHandler, PageOffice" resourceType="Unspecified" preCondition="integratedMode" />
</handlers>
</system.webServer>
</configuration>
步骤 5:添加 PageOffice 网关文件
在你的项目中添加一个名为 PageOfficeServer.aspx 的页面,这个页面不需要任何代码,它只是一个占位符,用于 PageOffice 的内部通信。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="PageOfficeServer.aspx.cs" Inherits="YourProjectName.PageOfficeServer" %> <!-- 这个页面是空的,PageOffice 会自动处理它 -->
运行项目:
运行你的 OpenDoc.aspx 页面,浏览器中应该会直接打开 doc/test.docx 这个文档,并且是只读状态。
核心功能详解
编辑和保存文档
要允许用户编辑并保存文档,你需要做两件事:
A. 修改打开模式为编辑模式
在 OpenDoc.aspx.cs 中,将 OpenModeType.ReadOnly 改为 OpenModeType.Normal。
poCtrl.WebOpen("doc/test.docx", OpenModeType.Normal);
B. 创建保存处理程序
创建一个新页面 SaveFile.aspx,用于接收用户保存的文档。
SaveFile.aspx.cs:
using System;
using System.Web.UI;
using PageOffice;
namespace YourProjectName
{
public partial class SaveFile : Page
{
protected void Page_Load(object sender, EventArgs e)
{
// 1. 创建 PageOfficeCtrl 对象
PageOfficeCtrl poCtrl = new PageOfficeCtrl();
// 2. 从请求中获取保存的文件
// SaveFile() 方法会检查请求中是否有 PageOffice 上传的文件
poCtrl.SaveFile();
// 3. 获取保存后的文件流或路径,进行业务处理
// 保存到服务器的特定文件夹
string savePath = Server.MapPath("~/SavedDocs/");
if (!System.IO.Directory.Exists(savePath))
{
System.IO.Directory.CreateDirectory(savePath);
}
string filePath = System.IO.Path.Combine(savePath, "edited_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".docx");
// 注意:实际项目中,poCtrl.CustomSaveData 可能包含更多元数据
// 这里简单地将文件保存到本地
poCtrl.DocumentWriter.SaveToFile(filePath);
// 4. 给客户端一个响应,告知保存成功
// 可以通过 JavaScript 回调函数来处理
Response.Write("<script>alert('文档保存成功!');</script>");
Response.End();
}
}
}
C. 在主页面中设置保存处理程序 URL
回到你的主页面(如 OpenDoc.aspx.cs),使用 SaveFilePage 属性指定保存处理程序的 URL。
// 在 Page_Load 中
poCtrl.SaveFilePage = "SaveFile.aspx"; // 指定保存处理程序
poCtrl.WebOpen("doc/test.docx", OpenModeType.Normal);
当用户在 PageOffice 中编辑文档并点击“保存”按钮时,文档内容就会被 POST 到 SaveFile.aspx,你就可以在其中处理保存逻辑了。
填充数据(Word 邮件合并)
这是 PageOffice 的一个非常强大的功能,可以用来生成合同、报告等。
步骤:
- 准备 Word 模板: 在 Word 文档中,用书签标记需要动态填充的位置,在需要填入姓名的地方插入书签
BookmarkName。 - 编写代码填充数据:
// 在打开文档前设置数据
poCtrl.SetData("BookmarkName", "张三"); // 书签名 -> 值
poCtrl.SetData("BookmarkDept", "技术部");
// 然后打开文档
poCtrl.WebOpen("doc/contract_template.docx", OpenModeType.Normal);
打开文档后,书签 BookmarkName 和 BookmarkDept 的位置就会被自动替换为“张三”和“技术部”。
自定义工具栏
你可以通过代码动态地显示或隐藏 PageOffice 默认的工具栏按钮,甚至添加自定义按钮。
// 隐藏默认的“打印”按钮
poCtrl.Toolbars = false; // 隐藏所有工具栏
// 或者
poCtrl.ShowToolbarButton("Print", false); // 隐藏单个按钮
// 添加自定义按钮
poCtrl.AddCustomToolButton("保存", "OnSaveClick", 1);
// 在页面中定义 JavaScript 函数供自定义按钮调用
PageOfficeCtrl1.JsFunction += @"
function OnSaveClick() {
alert('自定义保存按钮被点击!');
// 这里可以调用 PageOffice 的保存方法
document.getElementById('PageOfficeCtrl1').SaveFile();
}
";
高级应用与注意事项
-
安全性:
- 授权文件: 确保
reginfo.ini或lic.lic文件在部署时被正确放置,且路径不被客户端直接访问。 - 路径安全: 不要将文档路径直接暴露给客户端,最好通过服务器端代码动态生成或验证路径,防止路径遍历攻击。
- 权限控制: 在打开文档前,检查当前用户是否有权限访问该文档。
- 授权文件: 确保
-
跨浏览器支持:
- PageOffice 对 IE 浏览器支持最好(使用 ActiveX),对于 Chrome, Firefox, Edge 等现代浏览器,它使用浏览器插件,首次使用时,浏览器可能会提示安装插件,引导用户下载并安装
posetup.exe。 - 建议使用
POInstall工具进行预部署,或提供清晰的安装指引。
- PageOffice 对 IE 浏览器支持最好(使用 ActiveX),对于 Chrome, Firefox, Edge 等现代浏览器,它使用浏览器插件,首次使用时,浏览器可能会提示安装插件,引导用户下载并安装
-
错误处理:
- 在代码中添加
try-catch块来捕获和处理可能发生的异常,例如文件未找到、权限不足等。 - 使用
poCtrl.Alert()方法可以向用户显示友好的错误提示。
- 在代码中添加
-
性能优化:
- 对于大文档,首次加载可能会慢一些,这是正常的。
- 合理使用缓存机制,避免频繁从数据库或文件系统读取文档模板。
总结与学习路径
- 跑通示例: 首先完整地运行官方
Samples目录下的示例,理解每个示例的功能和代码结构。 - 模仿实现: 从最简单的“打开只读文档”开始,然后实现“编辑保存”,再尝试“数据填充”,每一步都确保理解其背后的原理。
- 查阅官方文档: PageOffice 官方文档是最权威的参考资料,包含了所有控件的属性、方法和事件的详细说明。
- 探索高级功能: 在掌握基础后,逐步学习修订、批注、数字签名、表单域等高级功能,它们能极大地丰富你的应用。
PageOffice 是一个功能强大且成熟的控件,虽然初次接触时会觉得配置项较多,但只要理解了其“服务器端配置 + 客户端渲染”的核心模式,就能很快上手,祝你开发顺利!
