快速回答 - 不,你很难找到一个跨浏览器的解决方案。您很难找到PDF完美的解决方案。最好考虑让用户编辑HTML并在服务器上生成PDF。
为什么 - PDF格式同时出色和恶魔般。由于它的便携性,它非常出色,但由于其内部结构和存储机制而变得异常恶劣。没有像HTML那样友好的“DOM”。如果我们重新开始开发一种可移植的文档格式,它不会是我们会选择的PDF格式。但是PDF目前有太多的动力被抛弃,期间。
年轻的观众可能会想知道这种狂躁的格式究竟是如何进入市场领先地位以及它来自何处。那么,当PDF的创始人在制定设计时,在XML,JSON,HTML甚至互联网之前,他们并没有在考虑今天的文档共享。他们正在研究更好的方式来编码打印指令 - PostScript打印机驱动程序概念。在打印机消耗它们之前,这些预计不会被编辑,并且它们对于任何其他目的都毫无价值。然后有人注意到你可以将PostScript绘图指令解释为一个屏幕,随后有人发现将它用作可移动的跨设备显示概念的巨大潜力。在这里,我们是。回到问题 - 要以任何有意义的GUI方式编辑PDF,您需要解压缩PDF并将组件(图像,格式化文本,页面)呈现给显示设备。然后让人们搞乱布局;然后重新打包PDF。您必须完全符合PDF标准,否则您可能会发现编辑后的PDF文件的下游使用者崩溃或无法呈现它。您将不得不满足各种Acrobat标准级别,并且编辑软件包(Word,Illustrator,InDesign)供应商将快捷键和膨胀量嵌入PDF文件;图层,缩略图等。
然后,我们来颜色。阅读PDF规范后,您会看到原始PDF生产者可以决定使用的一系列色彩空间选项。你将不得不将这些解释为屏幕上合理的设备颜色和背面等。
然后字体。字体可能是嵌入子集,或者不是。为了保持PDF的逼真度,您需要在PDF中定义的比例尺上将字形实现为绘图表面上的矢量图形。这主要意味着利用某种平台相关类型的库 - 棘手的跨平台。此外,您将需要许可字体的适当使用,这可能是大多数人想用来看起来时髦和专业的字体的昂贵。
鉴于PDF中的分层,缩放和旋转功能,您可能会将HTML画布视为绘图表面。任何知道的人都会告诉你,在画布的世界里,你对于文字处理类型的功能几乎是你自己的。
不是不可能,但很难。
将PDF呈现到显示器的组件主要充当打印驱动程序,严格遵守PDF绘图说明,并且通常会生成栅格或有时会生成SVG图形。这是一条单行道 - 他们阅读和绘制,但对绘制的对象没有“处理”的意义。没有句柄意味着没有操纵,而这些家伙当然不想让你修改和回写。
你会发现许多'保存到PDF'产品。当客户端时,他们将倾向于抓取一组像素并将光栅图形转储到一个文件中,并在其周围贴上最薄的'PDF'定义单板。在那里他们是基于服务器的,那么他们可以非常强大 - 有很多像Aspose和ABCPDF这样的工具可以真正提供一些与服务器端的PDF协作 - 但这不是您在OP中寻找的东西。
总结 - 非常复杂的主题。如果任何事情都有可能出现,它可能会在所涵盖的PDF功能方面存在许多限制,并因此限制可以安全编辑的内容。
如果您正在寻找最终以PDF格式导出的文档的在线编辑,那么前进的方法是保留文档源的html版本并让用户使用TinyMCE,CKEditor等进行编辑,然后使用一个的服务器端工具将保存的源代码HTML并呈现为PDF。像ABCPDF这样的工具可以让你忠实地让你添加图片,页眉和页脚,页码等。
这是一个对你的(假设)需求的实用答案,尽管它在字体方面仍然有一些权衡许可)问题,基于浏览器的编辑器的笨拙,HTML编辑组件制定的HTML的全面怪异等,但它是可行的。
最后的想法 - 重新思考你所需要的范围。如果HTML编辑和在服务器上转换为PDF可用于您,这是一个非常流行的路径,您可以找到免费和商业组件以供客户端和服务器支持。
编辑:如果您需要注释PDF,那么事情会更容易。在服务器上,您需要生成文档页面的图像,将这些图像发送给客户端,将其显示给用户,让用户将其标记出来,将注释的坐标捕获回服务器,然后使用服务器端PDF库将注释呈现到PDF中。它是可以实现的,但需要各种技能来为服务器端PDF进行图像处理和客户端表示和注释捕获。
你可以看看[PDFNetJS](https://blog.pdftron.com/2015/11/10/pdfnetjs-html5-pdf-viewer-and-editor/)。 – ConnorsFan
我曾见过那个。这有点矫枉过正。而不是包含一个或两个JS文件,它看起来像需要包含多个资产文件夹,并且很难让这个文件在我的环境中工作(Siebel应用程序)。不过,我正在尝试这一个,直到找到解决方案更好 – neilsimp1
PDFNetJS尝试检索.mem文件,它是一些二进制数据。这不能由我正在使用的应用程序(Siebel)提供,因此它看起来不像是一个选项。 – neilsimp1