以编程方式启用Adobe PDF使用权限

时间:2011-03-10 14:08:13

标签: pdf itext generated

有没有办法以编程方式从.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();
}

5 个答案:

答案 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种产品可以启用使用权:

  • Adob​​e Acrobat - 少于500位用户
  • Adob​​e LiveCycle Reader Extensions - 超过500个用户

有关此功能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,它将起作用