有没有办法以编程方式从.net代码启用Adobe PDF使用权限? 我正在使用ITextSharp库来填充带有XML数据的XFA表单(从应用程序生成), 但输出PDF没有启用使用权限,因此用户无法与之交互(这通常不会成为问题,但原始PDF是gov提供的,以及 用户必须单击某些验证按钮,该过程是用户/公司特定的)
这可以通过Adobe Reader手动完成,但您必须拥有adobe acrobat专业许可证..
谷歌说“只有Adobe产品可以做到这一点”.. (http://old.nabble.com/Enable-Adobe-Reader-usage-rights-td14276927.html)
string pathPDF = @"C:\original.pdf";
string pathCreated = @"C:\created.pdf";
string pathXml = @"C:\data.xml";
using (PdfStamper stamper = new PdfStamper(new PdfReader(pathPDF), System.IO.File.OpenWrite(pathCreated)))
{
stamper.FormFlattening = false;
stamper.AcroFields.Xfa.FillXfaForm(pathXml);
stamper.Close();
}
答案 0 :(得分:5)
以程序方式执行此操作的唯一方法是使用Adobe Reader Extension Server。您可以在此处查看Adobe白皮书:http://www.adobe.com/sea/products/server/readerextensions/pdfs/readerextensionsserver_ds.pdf
在上面的例子中,您将使用iTextSharp创建Pdf文档,然后使用Adobe Reader Extension Server以允许Pdf文档在Adobe Reader中具有扩展功能。
但是,有一个小窗口允许您使用iTextSharp并填写已启用Reader的PDF文档。如果您有这样的Pdf文档(Reader Enabled),那么您可以使用iText / iTextSharp填写XFA数据。您可以在此查看示例: http://itextpdf.com/examples/iia.php?id=166
祝你好运!答案 1 :(得分:2)
目前只有2种产品可以启用使用权:
有关此功能here的一些调查结果。
答案 2 :(得分:1)
没有。 Adobe使用Strong Crypto来确保它... PPK我相信。
Google is saying that "Only Adobe products can do that"
那是因为只有Adobe产品可以做到这一点。您可以支付一些Acrobat服务器产品或其他... $$$ ...但就是这样。
答案 3 :(得分:1)
这对我有用:
string TempFilename = Path.GetTempFileName();
PdfReader pdfReader = new PdfReader(FileName);
//PdfStamper stamper = new PdfStamper(pdfReader, new FileStream(TempFilename, FileMode.Create));
PdfStamper stamper = new PdfStamper(pdfReader, new FileStream(TempFilename, FileMode.Create), '\0', true);
AcroFields fields = stamper.AcroFields;
AcroFields pdfFormFields = pdfReader.AcroFields;
foreach (KeyValuePair<string, AcroFields.Item> kvp in fields.Fields)
{
string FieldValue = GetXMLNode(XMLFile, kvp.Key);
if (FieldValue != "")
{
fields.SetField(kvp.Key, FieldValue);
}
}
stamper.FormFlattening = false;
stamper.Close();
pdfReader.Close()
答案 4 :(得分:0)
您可以使用PdfStamper完成它 使用PdfStamper时使用代码
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(
newPath, FileMode.CreateNew, FileAccess.Write), '\0', true);
如果表单启用了Reader Extension,它将起作用