关于pdf:使用-PDF-Ai-GPT-工具获得-PDF-文件的内容摘要

龙年春节初七,OpenAI 的文字生成视频的模型 Sora 公布,微信公众号和知乎 AI 畛域涌现了大量介绍 Sora 的文章。 我是一个技术类文章创作者,Sora 的性能仿佛对我没有太大帮忙,还是老老实实钻研如何用 ChatGPT 来提供本人的写作效率吧。 我之前公布的文章:聊聊 SAP 原版技术书籍系列之三:SAP Business Technology Platform,文章开端介绍了这本书试读版的摘要,就是 ChatGPT Store 里一个名叫 PDI Ai PDF 的工具生成的。 这个工具在 ChatGPT Store 的 PDF 搜寻关键字排名名列第一,有60万次以上的使用量。 我最先间接把 PDF 通过附件的形式上传到 GPT 输出 Prompt 的中央,而后收到提醒,须要把这个 PDF 上传到一个叫做 myaidrive.com 的网站,而后把生成的链接给它,它就能够依据此链接来检索 PDF 的内容。 AI Drive 是一个相似 Google Drive 的网站,上传 PDF 之后,生成一个 url: 我把这个 url 连同 Prompt 一起发送给它: 很快我就收到了这个 PDF 的内容摘要: 这个PDF的前15页内容涵盖了对于SAP Business Technology Platform (SAP BTP)的应用案例辨认、翻新类型、以及如何利用SAP Activate办法辨认业务流程中的缺口,并思考可扩展性选项。以下是依据您的要求,按要点合成的概要:应用案例辨认:文档探讨了SAP BTP如何提供不同的能力,并通过应用案例模式帮忙辨认特定于业务环境的应用案例。通过一个对于Rocking Gas公司的故事引入,展现了如何在数字转型我的项目中思考SAP BTP的价值提案,并强调了在过来几个月中SAP BTP的应用有余及其后劲的开释。(浏览样本, 页 2)翻新类型:具体探讨了SAP BTP能够解决的不同业务问题区域,如性能扩大、触达扩大、过程翻新、过程自动化、跨产品工作流、跨性能业务流程、机器学习和物联网(IoT)。每种翻新类型都具体阐明了通过SAP BTP如何实现,并通过具体例子说明了每种类型的利用。(浏览样本, 页 3-4)利用SAP Activate辨认业务缺口:强调了如何应用SAP Activate办法辨认业务流程中的缺口,这是施行SAP S/4HANA和SAP S/4HANA Cloud我的项目的关键步骤。文档解释了fit-to-standard练习的重要性,以及如何通过配置积压工作和集成与扩大需要的辨认来实现业务需要。(浏览样本, 页 11)可扩展性概念:探讨了在SAP S/4HANA施行中,通过扩大来满足业务需要的不同办法。包含利用内扩大和侧边扩大两种次要技术,以及它们如何帮忙在不同的业务场景中实现性能扩大。(浏览样本, 页 13-14)我的微信公众号文章,如果蕴含了 AI 生成的文字,我会专门注明。 ...

February 22, 2024 · 1 min · jiezi

关于pdf:对比几家比较优质的PDF转Word-SDK

Hello 大家好,我是小瘪三。咱们打工人平时办公免不了要对一些文档格局行转换。咱们将探讨几款支流的 PDF 转 Word SDK,剖析它们在咱们打工人的理论工作中所出现的劣势与劣势。 Solid:老牌的 PDF to Office 转档库,有几十年的积攒。Aspose: 反对十分多的文件格式互转,也蕴含PDF 转 word 。Foxit:自主研发 PDF,PDF to Office 也是最近刚推出的。ComPDFKit: 最近一家新锐公司,更新频率很高。补充一下谢谢话不多说,间接比照一下 PDF 转 word 的成果。比照表:我别离筛选了一些不同特色的文档进行测试,其中包含页数多,蕴含表格,图文混排。波及到论文,cad制图,金融等畛域,先看一下这些文档的转档耗时。 12个文档中,foxit 有三个文档没有转换胜利,其余三个 SDK 全副文档都转换胜利了。Aspose SDK 因为试用起因只能转换前4页,然而有些状况下比照其余三个转了全副页面的速度还慢。综合下来ComPDFKit的转换速度最快。接下来咱们看一下具体成果。 成果文档 - 651页文档.pdf原文档: 各SDK厂商转档比照 ComPDFKit:根本没啥问题,然而字体和原文档有区别 foxit:能够看到会有一些小的辨认谬误,次要在跨行的时候,存在局部粗体辨认谬误的状况 Solid: 根本也没啥问题,没什么谬误,不过也存在字体区别。 成果文档 - 证券文档.pdf原文档: 各SDK厂商处理结果: ComPDFKit: 整体排版正确,第二页的局部字体会呈现拖影景象,局部文字会呈现超出文本框的景象。foxit:整体排版正确,第二页的局部字体会呈现拖影景象,第一页的图表会呈现超出文本框的景象。Solid:整体排版正确,第一页的图表会呈现超出文本框的景象,第一页的页脚图片透明度辨认谬误。Aspose:整体排版正确,第二页的局部文字下有投影。成果文档 - 论文2.pdf原文档: 各SDK厂商处理结果: ComPDFKit: 在公式局部的转换都是转换了文档中原有的字符,所以会呈现乱码。foxit:并没有辨别小标题的粗体与注释的细体,且局部文本用图片代替,排版相对而言比拟凌乱。Solid: 对公式局部的反对比拟好,然而局部符号应用了形变后的图片代替,比拟影响观感。成果文档 - 图文混排.pdf原文档: 各SDK厂商处理结果:图文混排版面都放弃的不错。 ComPDFkit, foxit, solid 文字的字体和原文档都不太解决,aspose 最靠近, 然而aspose 的背景图片缩放不对。ComPDFkit有几个字最上方被裁掉了。 ComPDFKit: foxit: Solid:Aspose:成果文档 - 图文带简略表格.pdffoxit 的文字背景形态变了,变成了不规则的。aspose 背景图片变小了。ComPDFKit 的工夫有一部分被裁掉了。Solid 成果良好。原文档: ...

August 21, 2023 · 1 min · jiezi

关于pdf:ComPDFKit-专业的PDF文档处理SDK

ComPDFKit提供业余、全平台反对的PDF开发库,包含Windows、Mac、Linux、Android、iOS、Web平台。开发者能够疾速、灵便整合PDF性能到各开发平台的软件、程序、零碎中。丰盛的性能,多种开发语言,灵便的部署计划可供选择,满足您对PDF文档的所有需要。 联系方式:中武官网: https://www.compdf.com/zh-cn 英文官网:https://www.compdf.com/ 领英页面: https://www.linkedin.com/company/pdf-technologies-pte-ltd/ Twitter: https://twitter.com/compdfkit Facebook: https://www.facebook.com/profile.php?id=100085132077341 产品&性能:1.ComPDFKit PDF SDK PDF查看 提供弱小的渲染引擎,轻松渲染简单的PDF文档,反对自定义UI和各种性能操作,如单双页布局,间断滚动,书签,纲要和缩略图等。 PDF批注 领有独立的正文控件。反对增加、删除、编辑、导入、导出、扁平化所有类型的PDF标记以及自定义正文,包含亮高、手绘、文本框、附注等。 PDF签名 反对增加传统的电子签名和数字签名,以跟踪和减速签名工作流程,同时保障签名的真实性和安全性。 PDF表单填写 能够轻松创立、删除、编辑、填写、扁平化和打印表单域,包含文本域、复选框、单选按钮、下拉列表和签名等。 PDF页面治理 增加PDF页面治理性能到应用程序,实现PDF文档减少空白页、删除、复制、重排、旋转、裁剪、拆分合并等页面治理的所有需要。 PDF内容编辑 轻松增加、编辑、删除PDF中的文本和图像,同时反对更改文档内容的大小、字体和色彩等。 PDF平安爱护 通过明码、权限等多种形式对PDF文档进行爱护。针对共享文件,可增加自定义的页眉页脚、水印、贝茨码来爱护知识产权。 标记密文 对图像、文本和矢量图形中的敏感信息或隐衷数据进行不可逆的密文解决,阻止了别人拜访敏感信息。同时反对多种形式标记密文。 PDF转PDF/A 反对PDF文件转换为合乎ISO规范的PDF/A文档,包含PDF/A-1a和PDF/A-1b。为长期、平安地归档电子文件提供解决方案。 PDF文档比照 提供文档比照性能,比照类似的或不同版本的PDF文档。反对比照文档中的文字、图片、线条等内容。以不同色彩展现PDF文档的编辑、删除、减少等变动。 2.ComPDFKit 转档 SDK PDF转Word 反对将PDF文件中的内容转为流排构造的数据,并放弃原文件页面布局。反对字体大小、色彩、粗体、斜体和下划线等辨认。 PDF转Excel PDF文件反对转档有边框、无边框、边框不全的Excel表格,可1:1还原单元格、原文件排版,并反对辨认表格内的公式。 PDF转PPT 提供转档开发库将每页PDF内容转换为可编辑的PPT,将文本转换为文本框;辨认文件内的图片并反对进行旋转、裁剪等操作。 PDF转TXT 反对将PDF转为TXT纯文本格式,简直所有平台都反对关上&浏览的格局,文件体积小便于贮存,关上迅速无缓冲。 PDF转CSV ComPDFKit转档SDK反对从PDF中精确提取表格并将其转换为CSV,一个表格转换为一个CSV文件。 PDF转Image 提供SDK将PDF文件转换为高质量的图像格式,包含PNG和JPEG。保障所有图像品质和分辨率都将放弃不变。 PDF转RTF 提供SDK轻松实现将 PDF 文件转换为可编辑的RTF(富文本格式)文件。 PDF转HTML ComPDFKit转档SDK反对将PDF转为单页或多页的可供网页浏览器读取的HTML网页。 3.ComPDFKit API PDF To / From Word 提供API接口,帮忙您的APP实现PDF文件和Word文件格式互转:PDF转Word、Word转PDF格局。 PDF To / From Excel 提供API接口,帮忙您的APP实现PDF文件和Excel文件格式互转:PDF转Excel、 Excel转PDF格局。 ...

March 7, 2023 · 1 min · jiezi

关于pdf:简单的小技巧如何从网页上下载内嵌的PDF文件

目录前言开始 关上开发者工具选中Network栏目后再抉择XHRCtrl+R(刷新)在新标签页中关上该文件即可获取下载链接开始 关上开发者工具我以谷歌浏览器为例,其余浏览器也是一样操作。下图中就有一个内嵌的《卷积神经网络》PDF文件 选中Network栏目后再抉择XHR此时能够看到XHR中是没有任何货色的。咱们依照其提醒按下Ctrl+R,其实就是刷新一下页面,从新向服务器申请数据。Ctrl+R(刷新)刷新之后,能够看到XHR中多了四个货色,其中最上面就是咱们的指标,PDF文件。在新标签页中关上该文件即可获取下载链接功败垂成

December 28, 2022 · 1 min · jiezi

关于pdf:使用dompdfdompdf实现生成pdf文件

一:dompdf/dompdf地址github:https://github.com/dompdf/dompdf packagist:http://packagist.p2hp.com/pac... 二:dompdf/dompdf装置composer require dompdf/dompdf三:dompdf/dompdf简略实例$pdf = new \Dompdf\Dompdf();$content = 'pdf内容';$pdf->loadHtml($content);//设置纸张大小和方向$pdf->setPaper('A4', 'landscape');$options = new Options();//设置应用近程图片填充pdf内容$options->setIsRemoteEnabled(true);$pdf->setOptions($options);//将html转为PDF$pdf->render();//下载生成的pdf文件$pdf->stream('xxx.pdf');//将生成的pdf保留到服务器file_put_contents('xxx.pdf',$pdf->output());//将生成的pdf文件渲染到页面$pdf->stream('xxx.pdf', [ 'compress' => 0, 'Attachment' => 0]);四:解决生成的pdf文件中文乱码1:下载字体包装置脚本utilshttps://github.com/dompdf/utils 2:字体包装置脚本解决将下载下来的装置脚本中的load_font.php文件拷贝到我的项目的vender平级目录下,而后将须要的字体包文件ttf也放到load_font.php同一级目录下(例如simsun.ttf) 3:执行字体包装置脚本php load_font.php simsun simsun.ttf4:批改装置字体包中的文件门路(留神:不操作此项再本机上是失常的,放到服务器就会有问题了)找到dompdf\dompdf\lib\fonts\installed-fonts.json文件,这时候咱们就能够看到咱们刚刚装置的字体包 这里咱们能够看到引入的字体包相干门路都是本机门路,咱们能够看到 dompdf\dompdf\lib\fonts门路下存在咱们须要的文件,批改引入门路即可,如: 5:html应用字体包款式即可body { font-family: simsun;}依据如上操作咱们就能够解决中文乱码问题

December 19, 2022 · 1 min · jiezi

关于pdf:最好用pdf编辑软件Acrobat-Pro-DC-pdf编辑软件

pdf编辑软件哪个好用?Acrobat Pro DC是最好用的pdf编辑软件,Acrobat Pro DC 将寰球最佳的PDF解决方案晋升到新的高度,配有直观触控式界面,通过开发弱小的新性能,使用户能在任何中央实现工作。Acrobat Pro DC功能强大,它能对于pdf所需制作的内容都可能进行编辑,通过电脑你能够十分轻松地对照片或者文档进行编辑与批改,大大提供效率,它能够关上所有PDF文档,并能与所有PDF文档进行交互。可查看、搜寻、验证和打印  PDF 文件,还能够对其进行数字签名以及开展合作。简略、明了、便捷。Acrobat Pro DC pdf编辑软件下载acrobat pro dcmac软件特色简直任何货色都能够创立PDF应用Acrobat DC,简直能够将任何货色变成高质量的PDF,在任何屏幕上看起来都很棒。您甚至能够疾速拆散和合并文档。编辑PDF并转换它们您无需应用Acrobat DC从头开始从新创立文档。相同,您能够将PDF导出为office等文件格式,或者从PDF外部编辑文本。简略平安地共享和签订PDF通过Acrobat DC,能够在任何设施上随时随地共享文档,发送以供审阅,并使其签名和返回。您能够应用Acrobat进行更多操作无论何时何地,只有您须要实现工作,就能够自信地应用Acrobat DC中的所有弱小性能。

October 4, 2022 · 1 min · jiezi

关于pdf:Mac上的pdf编辑工具PDF-Expert

PDF Expert是一款疾速、笨重、易用的PDF编辑器。可能轻松在MAC上实现PDF编辑、浏览、批注、编辑文本、增加照片、填写表单、签订合同、合并PDF文档以及加密爱护,只需微微点击几下即可。 编辑图片轻松在PDF文件中增加、替换和调整图片或扭转标记或图表,应用PDF Expert所有都将变的那么容易。增加链接能够在文档中任意局部减少连贯。此外,还能够为图像增加链接。订正隐衷信息PDF Expert 能够永恒删除或红色文本和暗藏隐衷数据在你的PDF文档中。找到你所要批改的一句话、词组、短语、数量疾速删除或暗藏起来,这对机密文件十分有用。编辑目录PDF Expert 能够更简略更轻松地浏览整个文件。快捷键能够帮忙在几秒钟做到这一点。子项目的轮廓是一个很有用的性能补充。编辑PDF文档轻松编辑PDF文本,图像,增加自定义图形,弱小的性能超简略的应用办法疾速编辑您的PDF。

August 16, 2022 · 1 min · jiezi

关于pdf:pdf增强插件Enfocus-PitStop-Pro-2022-for-Mac

Enfocus PitStop Pro 2022 Mac版是目前Acrobat PDF上最弱小的PDF加强插件,次要用于查看、编辑和批量批改PDF文件,是很多Acrobat用户必装的PDF插件之一。pitstop pro中文版能够查看您的PDF文件是否有印刷错误、并主动修复PDF中最常见的谬误、让您无需退出Acrobat即可手动编辑PDF的简直所有内容。 性能介绍 PDF品质管制(Preflight)厌倦了手动查看PDF的每一页是否有谬误?PitStop Pro自动检测PDF文件中简直所有可能的谬误。主动更正PitStop Pro不仅能够检测到谬误,还能够让您本人修复或主动实现。PDF编辑PitStop Pro还可让您手动编辑PDF文件中的简直所有内容,而无需来到Adobe Acrobat。

August 15, 2022 · 1 min · jiezi

关于pdf:Mac版pdf编辑器Acrobat-Pro-DC-2022激活补丁

Acrobat Pro DC 2022是一款十分优良的pdf制作软件,将世界上最优良的PDF解决方案晋升到新高度,其配有直观触控式界面及弱小的新性能,能够将任何纸质文件转换为可编辑的电子文件,用于传输、签订和分享。新工具核心能够更简略迅速的拜访常应用的工具。

August 3, 2022 · 1 min · jiezi

关于pdf:pdf转图片

<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.18</version> </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>jbig2-imageio</artifactId> <version>3.0.2</version> </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox-tools</artifactId> <version>2.0.18</version> </dependency>@Test public void pdf2image2() throws IOException { PDDocument pdDocument; FileInputStream fileInputStream = new FileInputStream("d:/test.pdf"); pdDocument = PDDocument.load(fileInputStream); PDFRenderer renderer = new PDFRenderer(pdDocument); // 获取PDF页数 int pages = pdDocument.getNumberOfPages(); for (int i = 0; i < pages; i++) { BufferedImage image = renderer.renderImage(i, 2.5f, ImageType.BINARY, RenderDestination.PRINT); FileOutputStream out = new FileOutputStream("d:\\imageresult" + i + ".png"); // PNG ImageIO.write(image, "png", out); } pdDocument.close(); }应用renderImage会小很多 ...

November 18, 2021 · 2 min · jiezi

关于pdf:SpringBoot集成LibreOfficejodconverter做文件预览office转pdf

简介LibreOffice 是一款凋谢源代码的自在收费全能办公软件,可运行于 Microsoft Windows, GNU/Linux 以及 macOS 等操作系统上。它蕴含了 Writer, Calc, Impress, Draw, Math 以及 Base 等组件,可别离用于文本文档、电子表格、幻灯片演示文稿、绘图文档、数学公式编辑、数据库治理等工作。 LibreOffice 采纳对企业和个人用户均收费的 MPL 2.0 受权协定。您能够自在散发该软件,无需领取受权费用(但您依然能够付费取得经认证的业余反对)。它的源代码齐全公开,任何人都能够参加软件的开发和保护。 jodconverter概述JODConverter是 Java OpenDocument 转换器,可在不同办公格局之间转换文档。它利用Apache OpenOffice或LibreOffice,它们为当今可用的 OpenDocument 和 Microsoft Office 格局提供能够说是最好的收费导入/导出过滤器。 JODConverter主动执行 OpenOffice/LibreOffice 反对的所有转换。反对的转换包含(但不限于。您的 OOo 装置反对的所有转换都由 JODConverter 反对): 文件类型 输出格局 输入格局文本 DOC、DOCX、ODT、OTT、RTF、文本等。 DOC、DOCX、HTML、JPG、ODT、OTT、FODT、PDF、PNG、RTF、TXT 等。电子表格 CSV、ODS、OTS、TSV、XLS、XLSX 等。 CSV、HTML、JPG、ODS、OTS、FODS、PDF、PNG、TSV、XLS、XLSX 等。介绍 ODP、OTP、PPT、PPTX等 GIF、HTML、JPG、ODP、OTP、FODP、PDF、PNG、PPT、PPTX、BMP 等。画画 ODG、OTG 等 GIF、JPG、ODG、OTG、FODG、PDF、PNG、SVG、TIF、VSD、BMP 等。其余 HTML DOC、DOCX、HTML、JPG、ODT、OTT、FODT、PDF、PNG、RTF、TXT 等。JODConverter能够以多种不同的形式应用: 指标1.实现office文档->pdf 入门案例装置libreofficelibreoffice官网下载地址下载能够抉择windows/linux或其余操作系统本节依照windows进行测试 新建springboot我的项目,引入以下依赖。 <!--转换工具--> <dependency> <groupId>org.jodconverter</groupId> <artifactId>jodconverter-spring-boot-starter</artifactId> <version>4.4.2</version> </dependency> <dependency> <groupId>org.jodconverter</groupId> <artifactId>jodconverter-local</artifactId> <version>4.4.2</version> </dependency> <dependency> <groupId>org.jodconverter</groupId> <artifactId>jodconverter-core</artifactId> <version>4.4.2</version> </dependency>配置文件jodconverter: local: enabled: true # libreOffice根目录 officeHome: src/main/resources/office-plugin # 工作执行的超时工夫 taskExecutionTimeout: 86400000 # 工作队列的超时工夫 taskQueueTimeout: 86400000 # 端口(线程) portNumbers: [2001,2002,2003] # 一个过程的超时工夫 processTimeout: 86400000以上配置文件是基于本地的libreoffice服务进行配置,更多配置能够查看主动拆卸类JodConverterLocalProperties ...

November 3, 2021 · 1 min · jiezi

关于pdf:前端如何将HTML-生成PDF并避免中文乱码的解决方法

前端生成PDF 如果是非 UTF-8 字符再生成PDF 的过程中容易乱码,且布局容易错乱,是因为前端很多出现后果都是基于字体来绘制的,而前端又无奈通过浏览器拜访客户机的本地资源,因为权限的管制,所以容易导致字体缺失从而导致乱码,因而任何一个前端工具在生成PDF 时候,如果是非英文字体,须要进行字体配置后,通知生成引擎,当渲染该类元素时能够去找这类字体,从而防止错别字。 字体配置所有ActiveReportsJS组件都基于Web浏览器环境来运行。 桌面报表设计器 是基于 Electron应用Chromium来显示用户界面。Web 在线设计器 和 报表 viewer 组件在用户计算机的浏览器中运行的 Web 应用程序。PDF, Excel 和 HTML 导出生成器 基于浏览器环境来测量并生成报表内容。通常状况下,报表由文本内容组成,浏览器通过应用glyphs来渲染的字体形态。字体资源蕴含将字符编码映射到代表这些字符的字形的信息。因而,浏览器须要拜访字体资源,才可能依照预期显示文本。 ActiveReportsJS 中的所有文本项都具备几种字体属性,包含 字体: 字体ID 如 Arial, Calibri, 或 Times New Roman字体款式: 失常 或 斜体字体粗细: 较细,细体,失常,适中,粗体,较粗这三个属性的独特组合称为“字体”。字体系列通常由多个字体组成,通常由独自的文件示意。例如,以下是Windows 零碎中Arial字体系列文件夹的屏幕截图: 当 ActiveReportsJS 渲染报表时,它将这些字体属性翻译成font-family, font-style、font-style 和 font-weight 和font-weightCSS款式属性,并依附浏览器来解析相干的字体资源,提取所需的字形。浏览器有两种形式来拜访字体资源它们可能装置在浏览器运行的零碎中,也可能是可下载的。 应用可下载的字体资源易于保护;所有浏览器都反对它,并且它保障了在所有环境中文本内容的统一输入。此外,ActiveReportsJS PDF 导出须要注册字体,因为它将其子集嵌入到PDF文档中。因而,确保所有环境中报表输入统一的最佳办法是配置ActiveReportsJS组件以拜访可下载的字体资源。本文提供了实现该指标的分步指南。 首先,决定在报表中应用哪些字体系列。它能够是规范字体,如Arial、Times New Roman或Helvetica。也能够是一种或多种网络字体。咱们在演示网站示例报表中应用 Montserrat 字体。在任何状况下,请确保你领有字体的所有文件。ActiveReportsJS反对以下字体格局。 字体格局 文件扩展名 留神WOFF 1.0 (Web 凋谢字体格局) *.woff WOFF 2.0 (Web 凋谢字体格局) *.woff2 IE11 不反对TrueType *.ttf OpenType .ttf, .otf 配置桌面设计器字体您能够在以下地位找到独立的报表设计器字体配置。 ...

June 10, 2021 · 1 min · jiezi

关于pdf:发明-PDF-的-Adobe-联合创始人查尔斯格什克因病去世享年-81-岁

硅谷最驰名和最受尊敬的人物之一,Adobe 公司的联结创始人查尔斯·格什克博士上周五因病逝世,享年 81 岁。 查尔斯·格什克博士于 1982 年与 Xerox 的共事约翰·沃诺克博士独特创建了 Adobe,并公布了引发出版反动的关键技术产品——Adobe PostScript。随后查尔斯·格什克博士于1986年12月至1994年7月负责Adobe首席运营官,并于1989年4月负责总裁,直至2000年4月退休。 查尔斯·格什克在职业生涯里取得了泛滥荣誉,他于 1999 年被选为计算机协会(ACM)的会员。2002 年,被任命为计算机历史博物馆的院士。2006 年,查尔斯·格什克和 约翰·沃诺克 一起取得了美国电子协会的成就奖章。2008 年,他取得了 IEEE 计算机协会的计算机企业家奖和时任美国总统奥巴马颁发的 2008 年国家技术与翻新奖章。2010 年,他与约翰·沃诺克独特被马可尼学会授予马可尼奖。 Adobe 联结创始人,前首席执行官兼董事会主席约翰·沃诺克得悉音讯时苦楚的示意:「我无奈设想去哪能够找到一个像查尔斯·格什克一样优良且让人喜爱的合作伙伴,所有和查尔斯相识的人,无一不十分思念他。」 查克·格施克的人生经验查尔斯·格什克毕业于泽维尔大学,在那里他取得了古典文学学位和数学硕士学位,之后他攻读卡内基梅隆大学计算机科学业余,并取得了博士学位。 他的职业生涯开始于,负责 Xerox 的 Palo Alto 钻研核心的计算机科学实验室研究员,1980 年,他在该实验室帮助建设了施乐影像迷信实验室并负责经理,职责也变成了在监督和发展计算机科学,图形,图像处理和光学畛域的钻研流动。 1982 年,他和约翰·沃诺克为施乐公司进行了交互式图形钻研,但因为难以将其翻新和研究成果从实验室转移到生产中而感到丧气。 两人决定冒险成立公司一家公司去践行本人的想法,随后 Adobe 成立了 ,很快他们的第一个产品 PostScript 面世,它容许将高度具体的业余文档从集体计算机发送到激光打印机。两年之内,Adobe 的支出就冲破 170 万美元。 1985 年,苹果计算机公司购买了 Adobe 19%的股份,并开始用其 LaserWriter 打印机包装 PostScript,从而帮忙苹果计算机公司成为图形设计的当先计算机。 1986 年,Adobe 与德州仪器单干,将 PostScript 应用程序集成到其激光打印机中。尔后不久,IBM 为其集体计算机授予了 PostScript 许可。 随后 Adobe 在 1986 年进行了 IPO(首次公开募股)。 查尔斯·格什克还帮助公司开发出了划时代的软件产品,给人们创作和沟通的形式带来了反动,其中就包含明天宽泛遍及的 PDF、Arobat、Illustrator、Premiere Pro 和 Photoshop 等。 ...

April 19, 2021 · 1 min · jiezi

关于pdf:如何基于DevExpress实现对PDF等文档预览及操作处理

点击获取工具>>在个别的管理系统模块外面,越来越多的设计到一些罕用文档的上传保留操作,其中如PDF、Word、Excel等文档,有时候是通过分布式的WCF技术实现数据的显示和解决,因而心愿间接预览而不须要下载文件,这样可能给咱们提供很多的不便。在DevExpress外面,提供了相应的控件来显示和解决这些文档,本文次要介绍如何利用DevExpress的控件实现对PDF、Word、Excel文档的预览和操作解决。 一、PDF的预览和操作在较早的DevExpress的控件外面,曾经提供了对应的PDF文档的显示控件,不过因为其对PDF格局反对不是很好,有些文档是Office导出的,也不是很失常浏览,因而很少应用,本文介绍的DevExpress的PDF查看控件是基于14.1的,测试过很多文档,如同都能失常关上,因而也想在零碎中宽泛应用了。 为了演示这些控件的解决,我独自编写了一个例子,用来实现对PDF、Word、Excel等文档的解决。 为了显示PDF文档,咱们须要在界面外面增加一个XtraPdfViewer.PdfViewer的控件,这个次要是用来显示PDF的,它有很多属性办法,用来实现对PDF的解决操作,测试界面设计好如下所示。 对PDF,咱们个别次要是用来关上文件,另存为,或者预览就能够了。相干的操作代码如下所示。 `/// <summary>/// PDF测试显示窗体/// </summary>public partial class PDFViewer : Form{//记录窗体的名称readonly string mainFormText; public PDFViewer(){InitializeComponent(); //记录窗体的名称,并实现文档变动事件的解决,不便显示新的文件名称mainFormText = this.Text;pdfViewer1.DocumentChanged += new DevExpress.XtraPdfViewer.PdfDocumentChangedEventHandler(pdfViewer1_DocumentChanged);} /// <summary>/// PDF文档变动后,实现对新文件名称的显示/// </summary>void pdfViewer1_DocumentChanged(object sender, DevExpress.XtraPdfViewer.PdfDocumentChangedEventArgs e){string fileName = Path.GetFileName(e.DocumentFilePath);if (String.IsNullOrEmpty(fileName)){Text = mainFormText;}else{Text = fileName + " - " + mainFormText;}} /// <summary>/// 关上PDF文件/// </summary>private void btnOpenFile_Click(object sender, EventArgs e){string filePath = FileDialogHelper.OpenPdf();if (!string.IsNullOrEmpty(filePath)){this.pdfViewer1.LoadDocument(filePath);}} /// <summary>/// 另存为PDF文件/// </summary>private void btnSaveAs_Click(object sender, EventArgs e){string dir = System.Environment.CurrentDirectory;string filePath = FileDialogHelper.SavePdf("", dir);if (!string.IsNullOrEmpty(filePath)){try{this.pdfViewer1.SaveDocument(filePath);MessageUtil.ShowTips("保留胜利");}catch (Exception ex){LogTextHelper.Error(ex);MessageUtil.ShowError(ex.Message);}}} ...

February 8, 2021 · 2 min · jiezi

关于nginx:工具pdf在线转换并保存

import requestsimport timeclass PDF2Word(): def __init__(self): self.machineid = 'ccc052ee5200088b92342303c4ea9399' self.token = '' self.guid = '' self.keytag = '' def produceToken(self): url = 'https://app.xunjiepdf.com/api/producetoken' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'X-Requested-With': 'XMLHttpRequest', 'Origin': 'https://app.xunjiepdf.com', 'Connection': 'keep-alive', 'Referer': 'https://app.xunjiepdf.com/pdf2word/',} data = {'machineid':self.machineid} res = requests.post(url,headers=headers,data=data) res_json = res.json() if res_json['code'] == 10000: self.token = res_json['token'] self.guid = res_json['guid'] print('胜利获取token') return True else: return False def uploadPDF(self,filepath): filename = filepath.split('/')[-1] files = {'file': open(filepath,'rb')} url = 'https://app.xunjiepdf.com/api/Upload' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0', 'Accept': '*/*', 'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2', 'Content-Type': 'application/pdf', 'Origin': 'https://app.xunjiepdf.com', 'Connection': 'keep-alive', 'Referer': 'https://app.xunjiepdf.com/pdf2word/',} params = ( ('tasktype', 'pdf2word'), ('phonenumber', ''), ('loginkey', ''), ('machineid', self.machineid), ('token', self.token), ('limitsize', '2048'), ('pdfname', filename), ('queuekey', self.guid), ('uploadtime', ''), ('filecount', '1'), ('fileindex', '1'), ('pagerange', 'all'), ('picturequality', ''), ('outputfileextension', 'docx'), ('picturerotate', '0,undefined'), ('filesequence', '0,undefined'), ('filepwd', ''), ('iconsize', ''), ('picturetoonepdf', ''), ('isshare', '0'), ('softname', 'pdfonlineconverter'), ('softversion', 'V5.0'), ('validpagescount', '20'), ('limituse', '1'), ('filespwdlist', ''), ('fileCountwater', '1'), ('languagefrom', ''), ('languageto', ''), ('cadverchose', ''), ('pictureforecolor', ''), ('picturebackcolor', ''), ('id', 'WU_FILE_1'), ('name', filename), ('type', 'application/pdf'), ('lastModifiedDate', ''), ('size', ''),) res= requests.post(url,headers=headers,params=params,files=files) res_json = res.json() if res_json['message'] == '上传胜利': self.keytag = res_json['keytag'] print('胜利上传PDF') return True else: return False def progress(self): url = 'https://app.xunjiepdf.com/api/Progress' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0', 'Accept': 'text/plain, */*; q=0.01', 'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'X-Requested-With': 'XMLHttpRequest', 'Origin': 'https://app.xunjiepdf.com', 'Connection': 'keep-alive', 'Referer': 'https://app.xunjiepdf.com/pdf2word/',} data = { 'tasktag': self.keytag, 'phonenumber': '', 'loginkey': '', 'limituse': '1'} res= requests.post(url,headers=headers,data=data) res_json = res.json() if res_json['message'] == '解决胜利': print('PDF解决实现') return True else: print('PDF解决中') return False def downloadWord(self,output): url = 'https://app.xunjiepdf.com/download/fileid/%s'%self.keytag res = requests.get(url) with open(output,'wb') as f: f.write(res.content) print('PDF下载胜利("%s")'%output) def convertPDF(self,filepath,outpath): filename = filepath.split('/')[-1] filename = filename.split('.')[0]+'.docx' self.produceToken() self.uploadPDF(filepath) while True: res = self.progress() if res == True: break time.sleep(1) self.downloadWord(outpath+filename)应用: ...

January 19, 2021 · 2 min · jiezi

关于pdf:vuepdfjs-canvas-踩坑心得

最近公司做了一个我的项目,次要性能是把印章在PDF上拖拽定位的。 这个性能次要两个点: 块的拖拽即时显示印章内容;PDF回显(因波及多人操作,回显包含之前人所签的最终成果)。应用的pdf.js@2.2.28 读取PDF文件,通过canvas 以图像的模式回显在页面上(因为不是单纯的显示,还有很多交互,最终抉择了这个计划) 开始所有都挺顺利的,拖拽计算坐标,PDF回显封装,印章属性设置。。。 PDF回显电子签章在开发过程中没成想PDF回显深了一个大坑,开始是曾经有印章不能回显,在网上搜寻要改pdf.work.js源码,搜寻上面这个判断,都注掉就行了 // if (data.fieldType === 'Sig') {// data.fieldValue = null;// _this3.setFlags(_util.AnnotationFlag.HIDDEN);// }尽管可能显示印章了,但在翻页时会产生只显示一半色彩的状况,钻研了好几天,更换pdf.js 版本、缩小canvas 配置项都没胜利。忽然在一次测试中发现,要是上来就把所有都渲染进去如同就没问题,随即用了一个比拟low的办法,就是上来就把所有pdf都渲染DOM,但不显示进去(display:none),只有与以后页码雷同的才显示,目前测试还没发现问题。 另,现有几个小问题: 布局时尽量用 padding、box-sizing: content-box;,用margin 有时取坐标数据不好管制;因为找的例子是适配挪动端的,外面有个参数window.devicePixelRatio,这个在mac 下通常为2,因为挪动端用这个计算了宽度,在mac 下应用的时候根底坐标都*2了,PC 无脑改成1;对于 window.devicePixelRatio 能够具体参考:张鑫旭-设施像素比devicePixelRatio简略介绍 附上pdf 的例子外围渲染pdf 的局部也是网上收集的,依据业务再进行了批改;pdfjs-fix-sig 只是把电子签章那块解决了,顺手公布在本人的私服上了,npm 上必定没有,失常引到的名称是 pdfjs-dist <template> <div class="pdf-box" id="pdf-box"> <div class="pdf-page-btn-box"> <y-button @click="handleSub()" :disabled="disabledSub">上一页</y-button> <div class="input-box"> <input class="input-wrap" :title="pdfCurrentPage" v-model="tunePage" @blur="pageChange" @keyup.13="pageChange"/> </div> <div class="num-page-box"> / {{pdf_pages}}</div> <y-button @click="handleAdd()" :disabled="disabledAdd">下一页</y-button> </div> <div class="pdf-view-wrap"> <div ref="canvasBox" class="canvas-box" id="canvas-box" :style="{width:`${pdf_div_width}px`,margin:'0 auto'}"> <slot name="drag-collection-box"></slot> <!-- <canvas ref="canvasPage" :id="'the-canvas'+pdfCurrentPage"--> <!-- style="border: 1px #eeeeee solid;"></canvas>--> <template v-for="index in pdf_pages"> <canvas ref="canvasPage" :id="'the-canvas'+index" v-show="index === Number(pdfCurrentPage)" style="border: 1px #eeeeee solid;"></canvas> </template> </div> </div> <ul v-if="sealPlaceShow" class="seal-place" ref="sealPlace" :style="`height: ${canvasHeight}px`"> <li v-for="index in 5"></li> </ul> </div></template><script> // 筹备PDF文件和签章数量、类型 import Vue from "vue"; let PDFJS = require('pdfjs-fix-sig'); PDFJS.GlobalWorkerOptions.workerSrc = Vue.prototype.GLOBAL.dataUrl + '/staticFront/script/pdfjs-fix-sig/build/pdf.worker.min.js'; export default { name: "pdf-box", props: { pdfSrc: { type: String }, sealPlaceShow: { type: Boolean, default: false } }, data() { return { pdf_scale: 1,//pdf放大系数 (1.33 回显的pdf 章是100,但思考到回显的pdf是按595*841展现【所对应应的章是75*75】),A4: 595 * 841 pdf_pages: null, pdfDoc: null, pdf_div_width: '595', pdf_src: null, pdfCurrentPage: 1, tunePage: 1, disabledAdd: false, disabledSub: true, // 初始不能减页 canvasWidth: 0, canvasHeight: 0, sealPlaceFlag: false, } }, watch: { sealPlaceShow: { handler(val) { this.sealPlaceFlag = val; }, immediate: true } }, created() { if (this.pdfSrc.length > 0) { this.getPdfUrl(); } else { this.$Message.error({content: '请应用正确的PDF文件'}); } }, methods: { getPdfUrl() { //取得pdf //例子:加载pdf文件示例; this.loadFile(this.pdfSrc); //线上申请 文件流(2020年11月03日 08:55:02 未测试) // this.$http.get(this.pdfSrc).then((res) => { // this.pdf_src = res.url; // this.loadFile(this.pdf_src) // }, (err) => { // console.log(err); // }); }, //初始化pdf loadFile(url) { let _this = this; let loadingTask = PDFJS.getDocument(url); loadingTask.promise.then((pdf) => { _this.pdfDoc = pdf; _this.pdf_pages = _this.pdfDoc.numPages; // 总页数 _this.$nextTick(() => { _this.setAddSubBtn(); for (let i = 1; i <= _this.pdf_pages; i++) { _this.renderPage(i) } }) }) }, //渲染pdf页 renderPage(num) { let _this = this; this.pdfDoc.getPage(num) .then((page) => { let canvas = document.getElementById('the-canvas' + num); let ctx = canvas.getContext('2d'); // let dpr = window.devicePixelRatio || 1; // mac 的 window.devicePixelRatio 为 2 let dpr = 1; let bsr = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1; let ratio = dpr / bsr; let viewport = page.getViewport({scale: this.pdf_scale}); canvas.width = viewport.width * ratio; canvas.height = viewport.height * ratio; _this.canvasWidth = canvas.width; _this.canvasHeight = canvas.height; _this.$emit('setCanvasAttr', { canvasWidth: _this.canvasWidth, canvasHeight: _this.canvasHeight, pdfCurrentPage: _this.pdfCurrentPage, numPages: this.pdfDoc.numPages }); canvas.style.width = viewport.width + 'px'; _this.pdf_div_width = viewport.width; // 定位在左边时须要canvas的宽度进行计算 canvas.style.height = viewport.height + 'px'; ctx.setTransform(ratio, 0, 0, ratio, 0, 0); let renderContext = { canvasContext: ctx, viewport: viewport }; page.render(renderContext).promise.then((res) => { // console.log(this.getBounding('canvasPage')); // console.log(this.getEleClass('layout-menu-left').clientWidth); // console.log(this.getBounding('canvasPage').right - this.getEleClass('layout-menu-left').clientWidth + 'px'); }); }); }, // 减页 handleSub() { this.pdfCurrentPage--; this.tunePage = this.pdfCurrentPage; this.setAddSubBtn(); }, // 加页 handleAdd(_str) { this.pdfCurrentPage++; this.tunePage = this.pdfCurrentPage; this.setAddSubBtn(); }, // 判断翻页按钮是否禁用并渲染canvas setAddSubBtn() { this.disabledSub = this.pdfCurrentPage <= 1; this.disabledAdd = this.pdfCurrentPage >= this.pdf_pages; // this.renderPage(this.pdfCurrentPage); this.$emit('setCanvasAttr', { canvasWidth: this.canvasWidth, canvasHeight: this.canvasHeight, pdfCurrentPage: this.pdfCurrentPage, numPages: this.pdfDoc.numPages }); }, pdfChangePage() { this.$emit('pdf-change-page', true); }, getEleClass(_str) { return document.getElementsByClassName(_str)[0]; }, getBounding(_str) { return this.$refs[_str].getBoundingClientRect(); }, pageChange() { // 输出字符容错 this.pdfCurrentPage = isNaN(Number(this.tunePage)) ? 1 : Number(this.tunePage); // 输出大数容错 this.pdfCurrentPage = this.tunePage > this.pdf_pages ? this.pdf_pages : this.tunePage; this.setAddSubBtn(); } } }</script>父级援用<pdfBox ref="pdfBox" :pdfSrc="doSignData.originFile" :canvasHeight="canvasHeight" :sealPlaceShow="true"> <div slot="drag-collection-box" v-if="$route.meta.viewType !== 'view'"> <!-- 这个插槽放在pdf 上显示的印章 --> </div> </pdfBox>最初放上款式@drag-block-size: 75px;.e-sign-wrap { .pdf-page-btn-box { position: absolute; text-align: right; font-size: 12px; right: 0; z-index: 5; padding: 7px; color: #42474f; .input-box, .num-page-box { display: inline-block; height: 22px; line-height: 22px; } .input-box { width: 30px; .input-wrap { width: 100%; padding: 0 2px; font-size: 12px; border: 1px transparent solid; border-bottom: 1px #dddee1 solid; border-radius: 2px; color: #495060; text-align: right; &:focus { outline: none; } } } .num-page-box { vertical-align: middle; } } .pdf-box { float: left; font-size: 0; position: relative; .pdf-view-wrap { position: relative; display: inline-block; .drag-box { li { cursor: move; user-select: none; position: absolute; opacity: .7; z-index: 5; border: 1px dashed transparent; .party { color: #ffffff; height: 24px; line-height: 24px; padding-left: 5px; width: 100%; font-size: 12px; } .content { width: 98px; height: 49px; line-height: 18px; padding: 5px; font-size: 14px; text-align: center; display: table-cell; vertical-align: middle; word-break: break-all; .sign-type { font-size: 12px; } } &.drag-block { width: @drag-block-size; height: @drag-block-size; background-color: #cfddfb; .party { background-color: #9bbcff; } .content { color: #78a5ff; } } &.place-block { width: @drag-block-size; height: @drag-block-size; background-color: #ffcccc; .party { background-color: #f09494; } .content { color: #f09494; line-height: 16px; padding: 0; font-size: 12px; } //.btn-box { // .btn { // width: 100%; // } //} } &.drag-block, &.place-block { &.checked::after { content: ''; width: 100%; height: 100%; border: 2px #004CC0 solid; display: block; position: absolute; top: 0; left: 0; z-index: 0; } img { -webkit-user-drag: none; } } .btn-box { cursor: pointer; .btn { //float: left; width: 100%; font-size: 12px; text-align: center; height: 24px; line-height: 24px; background-color: #004cc0; color: #ffffff; } } } } canvas { width: 595px; height: 842px; //max-width: 595px; //max-height: 841px; } } .seal-place { display: inline-block; position: absolute; right: -25px; min-height: 841px; li { width: 5px; height: 100%; display: inline-block; border: 1px #eee solid; border-left: none; } } }}

January 15, 2021 · 4 min · jiezi

关于pdf:pdfjsdist模块实现pdf文件预览功能

对于pdf文件,通过测试ios是能够失常关上,而在安卓机上,则须要下载福昕阅读器能力关上。如何可能不借助客户端之力,依附h5来实现pdf文件预览性能呢?咱们能够装置pdfjs-dist模块来实现。本示例是基于vue框架: 装置pdfjs-dist包:npm install pdfjs-dist -D 这里应用的版本是:"pdfjs-dist": "^2.4.456" 2、html模板 <template> <div class="canvas-container"> <canvas v-for="page in pages" :id="'the- canvas'+page" :key="page"> </canvas> </div></template>3、script代码段 import PDFJS from 'pdfjs-dist';import workerSrc from 'pdfjs-dist/build/pdf.worker.entry'PDFJS.workerSrc = workerSrc;export default { name: 'Pdf', data() { return { pages: [] }; }, created() { this._loadFile(yourUrl); }, methods: { _renderPage (num) { this.pdfDoc.getPage(num).then((page) => { let canvas = document.getElementById('the-canvas' + num) var vp = page.getViewport({scale: 1}); let ctx = canvas.getContext('2d') let dpr = window.devicePixelRatio || 1 let bsr = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1 let ratio = dpr / bsr let viewport = page.getViewport({scale: window.innerWidth / vp.width}); canvas.width = viewport.width * ratio canvas.height = viewport.height * ratio canvas.style.width = viewport.width + 'px' ctx.setTransform(ratio, 0, 0, ratio, 0, 0) let renderContext = { canvasContext: ctx, viewport: viewport } page.render(renderContext) if (this.pages > num) { this._renderPage(num + 1) } }) }, _loadFile (url) { this.$showLoading(); PDFJS.getDocument(url).promise.then((pdf) => { this.$closeLoading(); this.pdfDoc = pdf this.pages = this.pdfDoc.numPages this.$nextTick(() => { this._renderPage(1); }); }); } }};4、css代码 ...

August 28, 2020 · 1 min · jiezi

关于pdf:Pdf-转换-图片

PDDocument document = null; String pdfdir = "d:/pdf2image/"; File file = new File(pdfdir); if(!file.exists()||!file.isDirectory()){ System.out.println("the diretory is not exist"); return; } File [] files = file.listFiles(); for(File pdf :files){ String filepath = pdf.getAbsolutePath(); if(!filepath.contains(".pdf")){ continue; } String filename = pdf.getName(); String imageNamePrefix = filename.substring(0,filename.lastIndexOf(".")); File imagedir = new File(pdfdir+imageNamePrefix); if(!imagedir.exists()){ imagedir.mkdir(); } InputStream inputStream = new FileInputStream(pdf); document = PDDocument.load(inputStream); PDFRenderer renderer = new PDFRenderer(document); int pageCount = document.getNumberOfPages(); System.out.println("共 "+pageCount+" 页."); for (int i = 0; i < pageCount; i++) { BufferedImage image = renderer.renderImage(i, 1.9f); ImageIO.write(image, "jpg", new File(pdfdir+imageNamePrefix+File.separator+ i + ".jpg")); } }<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.18</version> </dependency>

July 29, 2020 · 1 min · jiezi