本教程展示如何使用LEADTOOLS SDK在HTML5 JavaScript应用程序的文档查看器中导出带有注释的PDF文档。
概述 | |
---|---|
总结 | 本教程介绍如何将LEADTOOLS文档查看器中的文档导出为HTML5 JavaScript应用程序中的PDF。 |
完成时间 | 20分钟 |
Visual Studio项目 | 下载教程项目(4kb) |
平台 | JS Web应用程序 |
IDE | Visual Studio代码-客户端 |
开发许可 | 下载LEADTOOLS |
方法,熟悉在文档查看器中创建项目和使用注释的基本步骤添加引用和设置License而且在文档查看器中显示文件教程,在工作之前在文档查看器中保存注释到PDF - HTML5 JavaScript教程。
本教程将使用http服务器
,用于运行静态文件服务器的控制台命令。安装http服务器
第一次安装node . js
然后安装http服务器
.
中创建的项目的副本开始在文档查看器中显示文件教程。如果该项目不可用,请按照该教程中的步骤创建它。
所需要的参考资料取决于项目的目的。可以通过添加引用. js
档案位于< INSTALL_DIR > \ LEADTOOLS22 \ Bin \ JS
.
本项目需要参考资料如下:
Leadtools.js
Leadtools.Annotations.Automation.js
Leadtools.Annotations.Designer.js
Leadtools.Annotations.Engine.js
Leadtools.Annotations.Rendering.JavaScript.js
Leadtools.Controls.js
Leadtools.Document.js
Leadtools.Document.Viewer.js
Leadtools.ImageProcessing.Main.js
Leadtools.ImageProcessing.Color.js
Leadtools.ImageProcessing.Core.js
Leadtools.ImageProcessing.Effects.js
请确保将这些文件复制到自由
文件夹,并将它们导入index . html
文件。
有关应用程序需要哪些JS文件的完整列表,请参阅你的申请所包含的文件
许可证解锁项目所需的特性。它必须在调用任何工具箱函数之前设置。有关包括针对不同平台的教程的详细信息,请参阅设置运行时License.
有两种类型的运行时许可证:
创建项目、添加依赖项和许可证集之后,就可以开始编码了。
打开index . html
位于项目文件夹中的文件。中添加以下行< >头
标签导入JS文件,并将依赖项附加到index . html
页面。然后添加以下内容<选择>
元素的体index . html
页面。
< >头
< meta charset =“utf - 8”/>
< meta name =“视口”内容=“宽度=设备宽度,初始= 1.0”/>
<标题>示例主题是< /名称>
< script src =“https://code.jquery.com/jquery-2.2.4.min.js”
诚信=“sha256-BbhdlvQf / xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44 = "crossorigin =“匿名”> < /脚本>
<!——导入LEADTOOLS Dependencies——>
< script src =”。/ lib / Leadtools.js”> < /脚本>
< script src =”。/ lib / Leadtools.Controls.js”> < /脚本>
< script src =”。/ lib / Leadtools.Annotations.Engine.js”> < /脚本>
< script src =”。/ lib / Leadtools.Annotations.Designers.js”> < /脚本>
< script src =”。/ lib / Leadtools.Annotations.Rendering.Javascript.js”> < /脚本>
< script src =”。/ lib / Leadtools.Annotations.Automation.js”> < /脚本>
< script src =”。/ lib / Leadtools.ImageProcessing.Main.js”> < /脚本>
< script src =”。/ lib / Leadtools.ImageProcessing.Color.js”> < /脚本>
< script src =”。/ lib / Leadtools.ImageProcessing.Core.js”> < /脚本>
< script src =”。/ lib / Leadtools.ImageProcessing.Effects.js”> < /脚本>
< script src =”。/ lib / Leadtools.Document.js”> < /脚本>
< script src =”。/ lib / Leadtools.Document.Viewer.js”> < /脚本>
< link rel =“样式表”类型=“文本/ css”href =“style.css”>
<!——导入项目依赖项——>
< script src =“app.js”类型=“text / javascript”> < /脚本>
< / >头
身体< >
< div类=“容器”>
< div类=“工具栏”>
< div类=“vcenter push-right”>
<标签为=“interactiveSelect”> >交互模式:< /标签
<选择id =“interactiveSelect”> < /选择>
< / div >
< div类=“vcenter push-right”>
<标签为=“annotationsSelect”> >注释对象:< /标签
<选择id =“annotationsSelect”> < /选择>
< / div >
< div id =“输出”类=“vcenter push-right”> < / div >
< div id =“serviceStatus”类=“vcenter push-right”> < / div >
<按钮id =“saveAsPdf”类=“vcenter push-right”>保存为PDF . txt
< / div >
< div类=“docContainer”>
< div类=“sidepanel”id =“缩略图”> < / div >
< div类=“centerpanel”id =“观众”> < / div >
< div类=“sidepanel”id =“书签”> < / div >
< / div >
< / div >
身体< / >
打开style.css
位于项目文件夹中的文件。删除默认值身体
样式化,并将下面的代码行添加到身体
.
/*
删除默认的主体样式。
将主体设置为可弯曲的列;
* /
身体{
保证金:0;
显示:flex;
flex-direction:列;
}
.container {
保证金:10 px;
宽度:calc(100% - 20px);
高度:calc(100vh - 20px);
}
.toolbar {
高度:5%;
宽度:100%;
Border-bottom: 2px solid #333;
flex-direction:行;
显示:flex;
}
#{书签
溢出:隐藏;
}
.vcenter {
margin-top:汽车;
margin-bottom:汽车;
}
.hcenter {
margin-left:汽车;
margin-right:汽车;
}
.push-right {
margin-left: 10 px;
}
.docContainer {
高度:95%;
宽度:100%;
显示:flex;
flex-direction:行;
}
.sidepanel {
宽度:15%;
高度:100%;
}
.centerpanel {
宽度:100%;
高度:100%;
}
# saveAsPdf {
高度:50%;
}
/*元素模式的样式* /
.lt-item,
.lt-image-border {
/*框阴影(视图,项目,图像边框)*/
Box-shadow: #333 2px 2px 5px 1px;
}
.lt-view,
.lt-thumb-item {
/*视图*/
保证金:5 px;
填充:5 px;
}
.lt-item {
/*项目*/
边框:2px实心#6ecaab;
background - color: # b2decf;
填充:10 px;
}
.lt-image-border {
/*图像边框*/
边框:3px实体#444;
背景颜色:白色;
}
.lt-thumb-item {
/*缩略图项*/
边框:2px实心#6ecaab;
background - color: # b2decf;
}
.lt-thumb-item。lt-thumb-item-selected {
/*所选缩略图项*/
边框:2px实体#59b2ba;
background - color: # 8 ce1e1;
}
.lt-thumb-item-hovered {
/*悬浮缩略图项目*/
边框:2px实体#52b996;
background - color: # 87 c7b1;
}
.small-modal {
max-width: 200 px;
宽度:200 px;
}
打开app.js
位于项目文件夹中的文件。
添加下面的代码来创建一个主题是
对象,添加自动注释支持,加载默认文档,并将文档导出为嵌入添加注释的PDF。
窗口。onload =函数() {
常量licenseUrl =“https://demo.leadtools.com/licenses/js/LEADTOOLSEVAL.txt”;
常量developerKey ="添加LEADTOOLS.lic.key.txt文件的内容";
lt.RasterSupport。setLicenseUri (licenseUrl developerKey,函数(
setLicenseResult
) {
//查看license状态
如果(setLicenseResult.result) {
console.log ("LEADTOOLS客户端许可证设置成功");
}其他的{
常量味精=“LEADTOOLS许可证丢失,无效或过期\nError:\n”;
console.log(味精);
警报(味精);
}
});
let documentViewer =零;
类ViewerInitializer {
构造函数(回调){
这.callback =回调;
这.init ();
}
静态showServiceError = (jqXHR, statusText, errorThrown) => {
alert ("服务返回错误。详见控制台。”)
常量serviceError = lt.Document.ServiceError。parseError(jqXHR, statusText, errorThrown);
console.error (serviceError);
}
Init = () => {
这.initFactory ();
这.testConnection ();
}
initFactory = () => {
//要与DocumentService通信,它必须正在运行!
//更改这些参数以匹配服务的路径。
lt.Document.DocumentFactory.serviceHost =“http://localhost: 40000”;
lt.Document.DocumentFactory.servicePath ="";
lt.Document.DocumentFactory.serviceApiPath =“api”;
}
testConnection = () => {
常量serviceStatus = document.getElementById(“serviceStatus”);
serviceStatus。innerHTML =“连接到服务:”+ lt.Document.DocumentFactory.serviceUri;
lt.Document.DocumentFactory.verifyService ()
.done((serviceData) => {
serviceStatus。innerHTML =“服务连接已验证!”;
这.createDocumentViewer ();
})
.fail((jqXHR, statusText, errorThrown) => {
serviceStatus。innerHTML =“服务连接不可用。”;
ViewerInitializer。showServiceError(jqXHR, statusText, errorThrown);
});
}
createDocumentViewer = () => {
//初始化用户界面
常量interactiveSelect = document.getElementById(“interactiveSelect”);
常量panZoomOption = document.createElement(“选项”);
panZoomOption。innerHTML =“Pan / Zoom”;
panZoomOption。value = lt.Document.Viewer.DocumentViewerCommands.interactivePanZoom;
interactiveSelect.appendChild (panZoomOption);
常量textOption = document.createElement(“选项”);
textOption。value = lt.Document.Viewer.DocumentViewerCommands.interactiveSelectText;
textOption。innerHTML =“选择文本”;
interactiveSelect.appendChild (textOption);
interactiveSelect。onchange = (e) => documentViewer.commands.run(e.target.value)零);
常量注释select = document.getElementById(“annotationsSelect”);
常量annSelectOption = document.createElement(“选项”);
annSelectOption。innerHTML =“选择注释”;
annSelectOption。value = lt.Annotations.Engine.AnnObject.selectObjectId.toString();
annotationsSelect.appendChild (annSelectOption);
常量annLineOption = document.createElement(“选项”);
annLineOption。innerHTML =“对象”;
annLineOption。value = lt.Annotations.Engine.AnnObject.lineObjectId.toString();
annotationsSelect.appendChild (annLineOption);
常量annRectOption = document.createElement(“选项”);
annRectOption。innerHTML =“矩形对象”;
annRectOption。value = lt.Annotations.Engine.AnnObject.rectangleObjectId.toString();
annotationsSelect.appendChild (annRectOption);
annotationsSelect。Onchange = (e) => {
常量value = +e.currentTarget.value;
documentviewer .annotations. automationmanager . currentobectid = value;
}
// Init文档查看器,沿着面板传递
常量createOptions =新lt.Document.Viewer.DocumentViewerCreateOptions ();
//在这个例子中我们不打算使用elements模式
createOptions.viewCreateOptions.useElements =假;
createOptions.thumbnailsCreateOptions.useElements =假;
//视图的中间面板
createOptions。viewContainer = document.getElementById(“观众”);
//用于缩略图的左边面板
createOptions。thumbnailsContainer = document.getElementById(“缩略图”);
//书签的右边面板
createOptions。bookmarksContainer = document.getElementById(“书签”);
createOptions。useAnnotations =真正的;
//创建文档查看器
documentViewer = lt.Document.Viewer.DocumentViewerFactory.createDocumentViewer(createOptions);
//我们更喜欢SVG视图
documentViewer.view.preferredItemType = lt.Document.Viewer.DocumentViewerItemType.svg;
//创建html5渲染引擎
documentViewer.annotations.automationManager.renderingEngine =新lt.Annotations.Rendering.AnnHtml5RenderingEngine ();
//初始化documentViewer注释
documentViewer.annotations.initialize ();
documentViewer.annotations.automationManager.currentObjectIdChanged.add (函数(发件人,e) {
//当完成绘制时,管理器将返回到选中的对象;所以我们需要强制annotationsSelect元素返回到select object选项
annotationsSelect。value = sender. currentobectid;
});
这interactiveSelect .loadDefaultDoc(是)
}
loadDefaultDoc = (viewer, interactiveSelect) => {
//加载PDF文档
常量url =“https://demo.leadtools.com/images/pdf/leadtools.pdf”;
lt.Document.DocumentFactory.loadFromUri (url,零)
.done((doc) => {
常量Ready = () => {
viewer.setDocument (doc);
常量panZoom = lt.Document.Viewer.DocumentViewerCommands.interactivePanZoom;
interactiveSelect。value = panZoom;
viewer.commands.run (panZoom零)
如果(这.callback)
这.callback(观众);
}
如果(医生。isStructureSupported && !
doc.structure.parse ()
.done(准备好了)
fail (ViewerInitializer.showServiceError);
其他的
准备好();
})
fail (ViewerInitializer.showServiceError);
}
}
新ViewerInitializer ();
$(“# saveAsPdf”) .click(异步函数() {
documentViewer.prepareToSave ();
等待lt.Document.DocumentFactory.saveToCache (documentViewer.document);
常量jobData =新lt.Document.DocumentConverterJobData ();
jobData。documentFormat = lt.Document.Writer.DocumentFormat.pdf;
jobData。annotationsMode = lt.Document.DocumentConverterAnnotationsMode.embed;
let result = await documentViewer.document.convert(jobData);
promptSaveResult(结果);
});
函数promptSaveResult(结果){
常量resultDocument =结果。文档! =零?url: result.archive.url;
常量link = document.createElement(“一个”);
常量url = lt.Document.DocumentFactory.serviceUri +“/”+ resultDocument;
链接。Href = url;
document.body.appendChild(链接);
link.click ();
document.body.removeChild(链接);
删除联系;
}
}
在运行前端HTML5/JS文档查看器之前,运行文档服务。LEADTOOLS SDK安装为以下平台提供了三个文档服务示例:
有关如何在前面列出的三个平台中设置和配置文档服务的说明,请参阅开始使用文档查看器演示教程。
为了本教程的目的,使用了.NET框架文档服务,可以在这里找到它:< INSTALL_DIR > \ LEADTOOLS22 \ \例子文档\ JS \ DocumentServiceDotNet \外汇
.
运行后端文档服务之后,打开命令行和cd
进入项目文件夹。使用实例运行静态文件服务器。http服务器
服务器应该启动并运行http://localhost:8080
.控制台中应该出现一条消息,指示服务器可用的所有端口。
若要测试,请选择一个注释对象,在文档上绘图,然后单击另存为PDF
.注意,某些浏览器可能不显示嵌入的注释。
本教程展示了如何将注释嵌入到HTML5 JavaScript应用程序中的PDF文件中。
感谢您的反馈!
请再次填写表格,开始新的聊天。
所有代理目前都离线。
聊天时间:
星期一至星期五
美国东部时间上午8:30 -下午6点
如需与我们联系,请填写此表格,我们将通过电子邮件与您联系。