将数字动态附加到 PDF 或使提交按钮根据该数字更改其 URL
Posted
技术标签:
【中文标题】将数字动态附加到 PDF 或使提交按钮根据该数字更改其 URL【英文标题】:Dynamically append number to PDF or make submit button change its URL based on that number 【发布时间】:2010-05-04 13:06:13 【问题描述】:我从 SQL 数据库提供 PDF 并在浏览器中显示它们。我正在尝试找出一种在 PDF 中动态嵌入数字的方法,以便当用户提交 XML 表单数据时,我可以使用该 PDF SQL 记录的 recordID。用户点击表单上的提交按钮,表单将其 XML 数据提交到我的提交页面。如果有某种方法可以即时更改提交 URL,那么我可以执行一个查询字符串来将 recordID 传递给我自己。我不是在代码中生成 PDF,它是手动创建的,然后上传到我的网站。
编辑
给用户一个链接someServer.com/pdfLink.aspx?formID=5
他们去那里,该页面从数据库中提取 PDF 并显示它。这会在浏览器全尺寸中拉出 acrobat,因此我的 aspx 页面无法控制提交完成的表单,Acrobat 是。用户填写表单并点击表单中的提交按钮。此提交按钮在表单设计时设置为指向另一个页面someSite.com/pdfSubmit.aspx
提交按钮将 XML 数据发布到该页面,我可以处理它。我需要someSite.com/pdfSubmit.aspx
页面的查询字符串中的recordID。为此,我需要修改 PDF 以将 recordID 和查询字符串添加到提交按钮的提交 URL,或者将其嵌入 PDF else ware。最大的问题是如何在通过 someServer.com/pdfLink.aspx?formID=5
显示 PDF 之前修改 PDF 以执行这两个选项中的任何一个。
【问题讨论】:
如何为每个表单使用唯一的提交 url?您需要为此实现一个 HTTP 处理程序。例如,一个表单将发布到 someserver.com/submit/5,另一个表单将提交到 someserver.com/submit/6。 HTH 那很好,但我仍然坚持的问题仍然存在,如何让 PDF 将其自身发布到那些唯一的 URL? 您必须将 Acrobat 帖子的 URL 更改为使用 Acrobat Professional。 是的,这不是一个真正的选择。我正在 acrobat pro 中设计模板表单,但之后最终用户将对其进行修改,因此让他们更改该 URL 以匹配(当时不存在的)formID 将不起作用。 【参考方案1】:在 PDF 中嵌入数字并不完全符合 kosher 规定,但您可以采取一些措施来遵守规范。
当前的 PDF 规范说“文件的最后一行应仅包含文件结束标记
%%EOF
但是有一些回旋余地 - 实现细节说它在技术上不必是文件的最后一行,而只需要出现在最后 1K 中,一般来说,如果你不搞砸事情太多,大多数顺从的读者甚至不会眨眼。如果我必须这样做,我会倾向于添加一个换行符(如果没有的话),然后是一个 % (这是一个 PDF 注释),一个让我知道它是我的标记,最后是数字。所以像:
// assume we already know it ends with %%EOF
void AppendNumberToPdf(Stream stm, int number, bool addNewline)
stm.Seek(0, SeekOrigin.End); // go to EOF
StreamWriter writer = new StreamWriter(stm, new ASCIIEncoding(), 1024);
writer.WriteLine(string.Format("0% 1 2", (addNewLine ? "\n" : ""), kMyMarkerString, number));
writer.Flush();
kMyMarkerString 应该是“MyApplicationDocumentIdentifier:”之类的东西,或者一些可以轻松识别您的曲目的东西。
【讨论】:
这似乎是合理的。我现在正在尝试。【参考方案2】:查询字符串是只读的,因此您不能在运行时动态更改它。但是你可以:
在提交页面最初呈现时将recordID添加到表单
您能否处理提交表单,然后执行 Response.Redirect 或 Server.Transfer 到正确的页面,并将 recordid 参数添加到查询字符串中
【讨论】:
我认为您不太了解这个问题。我添加了更多解释以提供帮助。【参考方案3】:在尝试@plinth 的建议时,我意识到我必须从 XML 提交进行更改(因为他的数据直接在 PDF 上。所以我将表单更改为作为 XDP 提交,其中包含 XML 数据 + 嵌入式 PDF。当我这样做并查看我遇到了表单提交的原始 XDP。
<?xml version="1.0" encoding="UTF-8" ?>
<?xfa generator="XFA2_4" APIVersion="3.0.8262.0"?>
<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/" timeStamp="2010-05-04T15:15:00Z" uuid="6d0944c8-1573-442c-9c85-11e372bd38c3">
<xfa:datasets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/">
<xfa:data>
<form1>
<TextField1>TestMe</TextField1>
</form1>
</xfa:data>
</xfa:datasets>
<pdf href="ViewPDF.aspx?formID=10" xmlns="http://ns.adobe.com/xdp/pdf/" />
</xdp:xdp>
注意倒数第二行。它自动包含具有我需要的 formID 值的 PDF 的 url。所以我所要做的就是从表单中获取 XDP 而不是纯 XML 帖子,它为我提供了我需要的一切。
【讨论】:
以上是关于将数字动态附加到 PDF 或使提交按钮根据该数字更改其 URL的主要内容,如果未能解决你的问题,请参考以下文章
Javascript:单击提交按钮时如何将隐藏的输入标签附加到表单中?
将每个 seaborn 图形附加到 for 循环内的 PDF