Программно включить права использования Adobe PDF

Есть ли способ программно включить права использования 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();
}

person danmaier2010    schedule 10.03.2011    source источник


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

Удачи!

person Dmitry    schedule 11.03.2011
comment
pdfReader.removeUsageRights () помог мне. Большое спасибо @Dmitry, очень благодарен за вашу помощь :) - person danmaier2010; 11.03.2011
comment
@ danmaier2010: Я рад помочь. Если мой ответ помог, отметьте, пожалуйста, как ответ. Спасибо. Дмитрий - person Dmitry; 11.03.2011

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

  • Adobe Acrobat - менее 500 пользователей
  • Adobe LiveCycle Reader Extensions - более 500 пользователей

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

person sep    schedule 05.05.2011
comment
Datalogics PDF Java Toolkit (datalogics.com/products/pdf/pdfjavatoolkit) можно используется для программного обеспечения чтения PDF-файлов (добавления прав использования). Заявление об ограничении ответственности, я работаю в Datalogics. - person Brandon Haugen; 03.05.2017

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

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

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

person Mark Storer    schedule 10.03.2011

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

            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()
person Serg    schedule 02.09.2013
comment
да, добавление этих параметров '\ 0', правда помогло с новым PdfStamper. Я получил ответ от itextpdf.com/examples/iia.php?id=166 - person hamish; 27.08.2014

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

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

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

person Robin Joseph    schedule 24.05.2013