C# 动态地将数字附加到PDF中,或使“提交”按钮基于该数字更改其URL

C# 动态地将数字附加到PDF中,或使“提交”按钮基于该数字更改其URL,c#,asp.net,pdf,pdf-form,C#,Asp.net,Pdf,Pdf Form,我正在从SQL数据库提供PDF,并在浏览器中显示它们。我正试图找到一种方法,在PDF中动态嵌入一个数字,这样当用户提交XML表单数据时,该PDF SQL记录的recordID就可以供我使用。用户点击表单上的提交按钮,表单将其XML数据提交到我的提交页面。如果有某种方法可以动态更改提交URL,那么我可以使用查询字符串将recordID传递给我自己。我不是在代码中生成PDF,它是手工创建的,然后上传到我的网站 编辑 用户会得到一个链接someServer.com/pdfLink.aspx?formI

我正在从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和查询字符串添加到submit按钮的submit URL中,或者将其嵌入PDF else软件中。最大的问题是,在通过
someServer.com/pdfLink.aspx?formID=5显示PDF之前,如何修改PDF以执行这两个选项之一。

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

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

  • 您是否可以处理提交表单,然后执行响应、重定向或服务器转移,并将recordid参数添加到查询字符串中以转到正确的页面


  • 在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:”或者类似的东西,这样可以很容易地识别您的轨迹。

    在尝试@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>
    
    
    测试我
    

    请注意第二行到最后一行。它自动包含PDF的url,该url具有我所需的formID值。因此,我所要做的就是从表单中获取XDP而不是纯XML帖子,它提供了我所需的一切。

    我认为您不太理解这个问题。我添加了更多的解释来帮助您。使用unique submit如何每个表单的URL?您需要为此实现一个HTTP处理程序。例如,一个表单将发布到someserver.com/submit/5,另一个表单将提交到someserver.com/submit/6。这很好,但我仍然坚持的问题是,如何让PDF将其自身发布到这些唯一的URL?您必须更改URL Acrobat发布到using Acrobat Professional。是的,这不是一个真正的选项。我正在Acrobat pro中设计模板表单,但之后最终用户将对其进行修改,因此让他们更改URL以匹配(当时不存在的)formID将不起作用。这似乎是合理的。我现在正在尝试。