gpt4 book ai didi

javascript - 在浏览器中编辑*现有* PDF

转载 作者:行者123 更新时间:2023-12-03 13:49:04 29 4
gpt4 key购买 nike

我有一个 Web 应用程序,它当前正在从服务器获取 PDF 的 base64 表示。我可以使用 Mozilla 的 pdf.js 在 <canvas> 上显示它并使用下拉菜单切换页面。

根据我所能找到的一切和Can Mozilla's pdf.js modify PDFs? ,无法使用 pdf.js 编辑 PDF。

我找到了 jsPDF虽然我可以拿起 Canvas 做 .toDataURL()为每个页面使用它并用它构建一个新的PDF文档,但有两个问题:

  • 新生成的 PDF 将只是每一页上的一系列图像,因此原始 PDF 中的任何文本在我完成后都将成为图像。
  • 我用 jsPDF 生成一个新的 PDF,然后将它的 base64 发送回 pdf.js 以在 Canvas 上显示它。在这些步骤之间发生了一些事情,其中​​页面的图像被错误地缩放,因此在每次新的 PDF 更改后,每个页面都占用大约 3/4 的 Canvas 。我一直无法让它保持相同的大小/比例。

  • jsPDF 看起来没有办法加载现有的 PDF,它只能创建新的 PDF。 pdfmakePDFKit看起来他们只创建新的 PDF 文件。

    所以我的问题:

    有什么可以同时查看pdf(来自base64)并对其进行更改的吗?
    理想情况下,我会观察 Canvas 的变化,然后将该变化绘制到 pdf 页面上。完成后,将其导出为 base64 字符串以发送回服务器。

    最佳答案

    快速回答 - 不,您不太可能找到跨浏览器的解决方案。您不太可能找到完美的 PDF 解决方案。最好考虑让用户编辑 HTML 并在服务器上生成 PDF。
    [编辑 2021 年 6 月 29 日-鉴于此问题来自 2017 年,您可能认为它已过时并打折。好吧,据我所知,答案仍然是相关的,每隔一周就会有人通过并给它一个赞成票。但是,如果您确实在旅途中找到了一个好的库或实用程序,请回来并列出它。谢谢。]
    答案很长——PDF 格式既精彩又不俗。因其便携性而出色,但因其内部结构和存储机制而令人讨厌。没有像 HTML 那样友好的“DOM”。如果我们重新开始开发可移植的文档格式,我们不会选择 PDF。但是 PDF 目前有太多的动力不能被抛弃,时期。
    年轻观众可能想知道这种狂躁的格式到底是如何进入市场领先地位的,以及它来自哪里。嗯,当 PDF 的创始人制定设计时,在 XML、JSON、HTML 甚至 Internet 出现之前,他们并没有考虑到今天的文档共享。他们正在研究一种更好的方式来编码打印指令 - PostScript 打印机驱动程序概念。在打印机消耗它们之前,从不期望它们被编辑,并且它们对于任何其他目的毫无值(value)。然后有人注意到您可以将 PostScript 绘图指令解释到屏幕上,随后有人发现将其用作可移动的跨设备显示概念的巨大潜力。我们来了。
    回到问题 - 要以任何有意义的 GUI 方式编辑 PDF,您需要解压缩 PDF 并将组件(图像、格式化文本、页面)呈现到显示设备;然后让人们弄乱布局;然后重新打包PDF。您必须完全按照 PDF 标准执行此操作,否则您可能会发现编辑的 PDF 文件的下游消费者崩溃或无法渲染它。您必须满足各种 Acrobat 标准级别,以及编辑包(Word、Illustrator、InDesign)供应商在 PDF 文件中添加的快捷方式和膨胀;图层、缩略图等。
    然后我们来到颜色。阅读 PDF 规范,您将看到原始 PDF 制作者可以决定使用的一系列色彩空间选项。您必须将这些解释为屏幕和背面等合理的设备颜色。
    然后是字体。字体可能是嵌入的子集,也可能不是。为了保持对 PDF 的保真度,您需要按照 PDF 中定义的比例在绘图表面上将字形实现为矢量图形。这主要意味着使用某种平台相关的类型库——棘手的跨平台。此外,您需要获得字体的适当使用许可,这对于大多数人想要看起来时髦和专业的字体来说可能是昂贵的。
    鉴于 PDF 中的分层、缩放和旋转功能,您可能会将 html Canvas 视为绘图表面。任何知道的人都会告诉您,在 Canvas 的世界中,您几乎可以自己处理文字处理类型的功能。
    不是不可能,但很难。
    将 PDF 渲染到显示器的组件主要充当打印驱动程序,严格遵守 PDF 绘图指令,通常生成光栅或有时生成 SVG 图形。这是一条单行道——他们阅读和画画,但对所画的对象没有“ Handlebars ”的感觉。没有句柄就意味着没有操作,而且这些家伙当然无意让您修改和回写。
    您会发现许多“保存到 pdf”的产品。当客户端时,他们将倾向于抓取一组像素并将光栅图形转储到一个文件中,文件中包裹着最薄的“PDF”定义。如果它们是基于服务器的,那么它们就可以非常强大——有很多工具,比如 Aspose 和 ABCPDF,它们真正提供了一些 PDF 处理服务器端——但这不是你在你的 OP 中寻找的。
    总结 - 非常复杂的主题。如果有任何潜在的东西出现,就涵盖的 PDF 功能而言,它可能会受到许多限制,从而限制了它可以安全编辑的内容。
    如果您正在寻找最终导出为 PDF 的文档的在线编辑,那么前进的方法是保留文档源的 html 版本并让用户使用 TinyMCE、CKEditor 等对其进行编辑,然后使用其中一个服务器 -边工具来获取保存的源 HTML 并呈现为 PDF。像 ABCPDF 这样的工具可以忠实地呈现 HTML,让您可以添加图像、页眉和页脚、页码等。
    这是对您(假设的)需求的务实回答,尽管它在字体(许可)问题、基于浏览器的编辑器的笨拙、某些 HTML 编辑所规定的 HTML 的全面怪异方面仍有一些权衡组件等。但它是可行的。
    最后的想法 - 重新考虑您需要的范围。如果在服务器上编辑 HTML 并转换为 PDF 对您来说是可用的,那么这是一条很受欢迎的路径,您会发现客户端和服务器的免费和商业组件都支持它。
    编辑:如果您需要对 PDF 进行注释,那么事情就容易多了。在服务器上,您需要生成文档页面的图像,将这些图像发送到客户端,将它们显示给用户,让用户对其进行标记,将注释的坐标捕获回服务器并使用服务器端 PDF 库将注释渲染到 PDF 中。这是可以实现的,但需要从服务器端 PDF 到图像处理以及客户端演示和注释捕获的各种技能组合。
    编辑:读者可能有兴趣知道我上面画的图片是否发生了变化。截至 2019 年 1 月,我坚持我写的内容。供应商正在以更好的工具和库进入市场,这些工具和库可以比以前做得更多。但是,您仍然需要评估您的需求并确认它们的限制——很可能会有一些限制。我所知道的供应商还没有为任何 PDF 文件提供客户端、跨浏览器、跨设备、全功能的 PDF 编辑库——总是有一些限制。但我很高兴得到纠正。

    关于javascript - 在浏览器中编辑*现有* PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44073718/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com