动态地将数字附加到PDF或使提交按钮根据该数字更改其URL

时间:2010-05-04 13:06:14

标签: c# asp.net pdf pdf-form

我正在从SQL数据库提供PDF并在浏览器中显示它们。我正试图找出一种方法在PDF中动态嵌入一个数字,以便当用户提交XML表单数据时,我可以使用该PDF文档记录的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软件中。最大的问题是如何在我通过someServer.com/pdfLink.aspx?formID=5显示PDF之前修改PDF以执行这两个选项中的任何一个。

3 个答案:

答案 0 :(得分:1)

在PDF中嵌入一个数字并不完全是犹太人,但有一些事情你可以做,以符合规范。

当前的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:”或类似的东西,这样可以很容易地识别你的曲目。

答案 1 :(得分:0)

查询字符串是只读的,因此您无法在运行时动态更改它。不过你可以:

  1. 在最初呈现提交页面时将recordID添加到表单

  2. 您是否可以处理提交表单,然后执行Response.Redirect或Server.Transfer到正确的页面,并将recordid参数添加到查询字符串

答案 2 :(得分:0)

在尝试@plinth的建议时,我意识到我必须从XML提交中更改(因为他的数据直接在PDF上。所以我将表单更改为提交为具有XML数据+嵌入PDF的XDP。当我这样做并查看时表单提交的原始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>

注意倒数第二行。它自动包含PDF的url,它具有我需要的formID值。所以我所要做的就是从表单中获取XDP而不是纯XML文章,它为我提供了所需的一切。