4

有没有办法以编程方式从 .net 代码启用 Adob​​e PDF 使用权限?我正在使用 ITextSharp 库用 XML 数据(从应用程序生成)填充 XFA 表单,但输出 PDF 没有启用使用权限,因此用户无法与之交互(这通常不是问题,但是原始 PDF 由政府提供,用户必须单击一些验证按钮,并且该过程是用户/公司特定的)

这可以从 Adob​​e Reader 手动完成,但您必须拥有 adobe acrobat 专业许可证。

谷歌说“只有 Adob​​e 产品可以做到这一点”.. ( 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();
}
4

5 回答 5

5

以编程方式执行此操作的唯一方法是使用 Adob​​e Reader Extension Server。您可以在此处查看 Adob​​e 白皮书:http: //www.adobe.com/sea/products/server/readerextensions/pdfs/readerextensionsserver_ds.pdf

在上述情况下,您将使用 iTextSharp 创建 Pdf 文档,然后使用 Adob​​e Reader Extension Server 允许 Pdf 文档在 Adob​​e Reader 中具有扩展功能。

但是,有一个小窗口可让您使用 iTextSharp 并填写已启用 Reader 的 PDF 文档。如果你有这样的 Pdf 文档(Reader Enabled),那么你可以使用 iText/iTextSharp 来填写 XFA 数据。您可以在此处查看示例:http: //itextpdf.com/examples/iia.php ?id=166

祝你好运!

于 2011-03-11T00:19:53.957 回答
2

目前只有 2 个产品可以启用使用权限:

  • Adobe Acrobat - 少于 500 个用户
  • Adobe LiveCycle Reader Extensions - 超过 500 个用户

这里有一些关于这个特性的发现。

于 2011-05-05T12:17:51.630 回答
1

不,Adobe 使用强加密来确保它......我相信 PPK。

谷歌说“只有 Adob​​e 产品才能做到这一点”

那是因为只有 Adob​​e 产品才能做到这一点。您可以支付一些 Acrobat 服务器产品或其他...$$...但仅此而已。

于 2011-03-10T21:37:13.067 回答
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()
于 2013-09-02T23:40:27.677 回答
0

您可以在使用 PdfStamper 使用 thi 代码时使用 PdfStamper 完成它

PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(
                                                                      newPath, FileMode.CreateNew, FileAccess.Write), '\0', true);

如果表单启用了阅读器扩展,它将起作用

于 2013-05-24T09:46:09.530 回答