Программно включить права использования Adobe PDF - PullRequest
4 голосов
/ 10 марта 2011

Есть ли способ программно включить права на использование Adobe PDF из кода .net? Я использую библиотеку ITextSharp, чтобы заполнить форму XFA данными XML (сгенерированными из приложения), но выходной PDF не имеет разрешенных прав использования, поэтому пользователи не могут взаимодействовать с ним (это обычно не было бы проблемой, НО исходный PDF предоставляется правительством, и пользователь должен нажать несколько кнопок проверки, и этот процесс зависит от пользователя / компании)

Это может быть выполнено вручную из Adobe Reader, но у вас должна быть профессиональная лицензия Adobe Acrobat.

Google говорит, что "Только продукты 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 ]

5 голосов
/ 11 марта 2011

Единственный способ сделать это программно - использовать 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 и заполнять уже PDF-документы с поддержкой Reader.Если у вас есть такой PDF-документ (Reader Enabled), вы можете использовать iText / iTextSharp для заполнения данных XFA.Вы можете проверить пример здесь: http://itextpdf.com/examples/iia.php?id=166

Удачи!

2 голосов
/ 05 мая 2011

В настоящее время только 2 продукта могут включать права использования:

  • Adobe Acrobat - для менее чем 500 пользователей
  • Расширения Adobe LiveCycle Reader - для более чем 500 пользователей

Были сделаны некоторые выводы относительно этой функции здесь .

1 голос
/ 03 сентября 2013

Это сработало для меня:

            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()
1 голос
/ 11 марта 2011

Нет.Adobe использует Strong Crypto, чтобы обеспечить это ... Я думаю, PPK.

Google is saying that "Only Adobe products can do that"

Это потому, что только продукты Adobe могут это делать.Вы можете заплатить за какой-нибудь продукт сервера Acrobat или другой ... $$$ ... но это все.

0 голосов
/ 24 мая 2013

вы можете завершить его с помощью PdfStamper при использовании PdfStamper используйте этот код

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

если для формы включено расширение Reader, она будет работать

...