我正在从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以执行这两个选项中的任何一个。
答案 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)
查询字符串是只读的,因此您无法在运行时动态更改它。不过你可以:
在最初呈现提交页面时将recordID添加到表单
您是否可以处理提交表单,然后执行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文章,它为我提供了所需的一切。