【问题标题】:Edit pdf embedded in the browser and save the pdf directly to server编辑嵌入在浏览器中的pdf并将pdf直接保存到服务器
【发布时间】:2015-05-20 17:41:47
【问题描述】:

我有这个工作流程。

  1. 将包含表单字段的 pdf 加载到浏览器中(iframe 或 div 中的 pdf)。
  2. 用户填写
  3. 用户单击“提交”按钮(在另一个 div 中)以保存 pdf。

我想在#3 中做的是收集与表单字段关联的所有数据并将数据保存到数据库表中。我不希望用户将 pdf 保存到他/她的本地计算机并将其上传到服务器。我想让它更加用户友好。

我将在服务器端使用 Java/JSP/Servlet。我查看了似乎很流行/众所周知的处理 pdf 文件的 itext,但 itext 似乎用于生成/编辑 pdf,但我不确定是否有任何方法可以使功能能够编辑嵌入在浏览器中的 pdf 并保存到数据库中。

是否有任何 adobe 软件提供某种功能,我可以注入某种可以捕获用户提交的脚本?我知道 PDF 不是前端脚本语言,但我只是在问。

我打算创建一个看起来像此 PDF 的 HTML 表单,并在用户单击“提交”按钮时将其填充到 PDF 中,但正如我所说,我想让它更加用户友好。

如果有人看过或做过此类功能,我将不胜感激,可以给我一些资源或提示。

【问题讨论】:

    标签: java pdf itext


    【解决方案1】:

    我的假设:您有一个交互式 PDF 文档,其中包含类似于 submit_me.pdf 的 AcroForm 字段:

    主要区别在于表单上有不同的按钮:

    • POST 会像 PDF 是 HTML 表单一样发布我填写的数据,
    • FDF 将以表单数据格式将数据发布到服务器,这种格式与 PDF 非常相似,但仅包含数据对,而不包含实际表单,
    • XFDF 将以 XML 表单数据格式(即表单数据格式的 XML 版本)将数据发布到服务器。
    • RESET 会将所有字段重置为其初始值。

    SubmitForm 示例显示了如何将按钮添加到现有表单中。请注意,除了此示例中描述的选项之外,还有更多选项。

    例如:

    • 除了使用 POST 方法,您还可以通过调整一些参数来使用 GET,
    • 您也可以将完整的 PDF(数据 + 表格)提交到服务器,但这仅在最终用户将 Adob​​e Acrobat 作为插件时才有效。如果插件只是 Adob​​e Reader,这将不起作用,
    • ...

    为了向您展示提交表单时会发生什么,我编写了ShowData servlet。此 servlet 返回发送到服务器的字节。

    如果是 POST:

    personal.loginname=jdoe&personal.name=John+Doe&personal.password=test&personal.reason=reason&post.x=29&post.y=7
    

    请注意,我还以这样一种方式定义了按钮,即我的点击坐标被传递给服务器。你可能不需要这个。

    如果是 FDF:

    %FDF-1.2
    %âãÏÓ
    1 0 obj
    <</FDF<</Fields[<</T(FDF)>><</Kids[<</T(loginname)/V(jdoe)>><</T(name)/V(John Doe)>><</T(password)/V(test)>><</T(reason)/V(Reason)>>]/T(personal)>>]/ID[<EF0089E16ED50F11CB6057A700B9046E><1205D069D1D6AE37665B6FF7EEA65414>]>>/Type/Catalog>>
    endobj
    trailer
    <</Root 1 0 R>>
    %%EOF
    

    如果是 XFDF:

    <?xml version="1.0" encoding="UTF-8"?>
    <xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve"
    ><f href="http://itextpdf.com:8180/book/submit_me.pdf"
    /><fields
    ><field name="XFDF"
    /><field name="personal"
    ><field name="loginname"
    ><value
    >jdoe</value
    ></field
    ><field name="name"
    ><value
    >John Doe</value
    ></field
    ><field name="password"
    ><value
    >test</value
    ></field
    ><field name="reason"
    ><value
    >Reason</value
    ></field
    ></field
    ></fields
    ><ids original="EF0089E16ED50F11CB6057A700B9046E" modified="1205D069D1D6AE37665B6FF7EEA65414"
    /></xfdf
    >
    

    在理想情况下,这将是您的解决方案。它在 PDF 的全球标准 ISO-32000-1 中进行了描述。但是:许多人开始使用不支持此功能的糟糕 PDF 查看器,因此如果您想使用此解决方案,您必须确保人们使用像样的 PDF 查看器作为他们的浏览器插件。

    【讨论】:

    • 非常感谢您的详细回答。
    • @bruno lowagie ...我的要求是编辑一个带有一些文本替换的pdf文件,然后再次将其另存为pdf。我在这个网站上找到了很多解决方案,但没有一个是有效的按照我的期望..请分享任何可以轻松做到这一点的代码..谢谢我从过去 3 天开始尝试过,但仍然卡住了。
    • @VikrantKashyap PDF 不是文字处理格式。也许你正在尝试做一些不可能的事情。无论如何:您正在劫持旧答案的评论部分以发布新问题。这不是在 StackOverflow 上完成的。
    • 嗨@brunolowagie你能给我那个示例PDF文件的链接吗?如果我把那个按钮放在html表单中,还有其他解决方案吗?
    • @BhaumikThakkar 该示例 PDF 是一个带有一些愚蠢字段的简单表单。你有什么用呢?无论如何,您都必须创建一个包含特定于您的 应用程序的字段的 AcroForm。你为什么不自己创建这样的表格?我真的不明白你的问题。
    猜你喜欢
    • 2015-05-26
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 2013-11-05
    • 1970-01-01
    • 2017-10-19
    • 2016-07-22
    相关资源
    最近更新 更多