在文档查看器中保存注释到PDF - HTML5 JavaScript

本教程展示如何使用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服务器

创建项目并添加LEADTOOLS引用

中创建的项目的副本开始在文档查看器中显示文件教程。如果该项目不可用,请按照该教程中的步骤创建它。

所需要的参考资料取决于项目的目的。可以通过添加引用. js档案位于< INSTALL_DIR > \ LEADTOOLS22 \ Bin \ JS

本项目需要参考资料如下:

请确保将这些文件复制到自由文件夹,并将它们导入index . html文件。

有关应用程序需要哪些JS文件的完整列表,请参阅你的申请所包含的文件

设置License文件

许可证解锁项目所需的特性。它必须在调用任何工具箱函数之前设置。有关包括针对不同平台的教程的详细信息,请参阅设置运行时License

有两种类型的运行时许可证:

编写HTML文件

创建项目、添加依赖项和许可证集之后,就可以开始编码了。

打开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 >身体< / >

编写CSS文件

打开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;

编写JS文件

打开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.控制台中应该出现一条消息,指示服务器可用的所有端口。

Http服务器运行的截图。

若要测试,请选择一个注释对象,在文档上绘图,然后单击另存为PDF.注意,某些浏览器可能不显示嵌入的注释。

总结

本教程展示了如何将注释嵌入到HTML5 JavaScript应用程序中的PDF文件中。

另请参阅

帮助版本22.0.2023.1.4< / div ><!--BEGIN Copyright notice--> 188金宝搏的网址客服|支持|联系我们|知识产权公告
©1991 - 2023领德科技有限公司版权所有。<!--END Copyright notice-->
iOS
加载……< / div >< / div >< div id ="email-sent-container" class="hidden-group">

您的邮件已发送给技术支持!应该有人联系!如果你的事情很紧急,请回来聊天。

聊天时间:

周一至周五,美国东部时间上午8:30至下午6:00

感谢您的反馈!

请再次填写表格,开始新的聊天。

所有代理目前都离线。

聊天时间:

星期一至星期五

美国东部时间上午8:30 -下午6点

如需与我们联系,请填写此表格,我们将通过电子邮件与您联系。

请填写姓名。 需要填写姓氏。 有效的电子邮件必须(e。g example@example.com)。 问题不能是空的。
支持销售许可< / div >
    上传…
    感谢您的反馈!祝你有愉快的一天!
    谈话结束了。请填写下面的调查!
    我的问题解决了。
    该字段为必填项。
    代理商技术知识< / div ><标签为="knowledge-rating" class="rating-group"> 该字段为必填项。
    代理人的沟通技巧< / div ><标签id ="communication-rating" class="rating-group"> 该字段为必填项。
    188金宝搏的网址客服|支持|联系我们|知识产权公告
    ©1991 - 2023领德科技有限公司版权所有。<!--END Copyright notice-->