Могу ли я заполнить зашифрованный PDF с помощью iTextSharp? - PullRequest
5 голосов
/ 16 января 2009

У меня есть заполняемый, сохраняемый файл PDF с паролем владельца (к которому у меня нет доступа). Я могу заполнить его в Adobe Reader, экспортировать файл FDF, изменить файл FDF, а затем импортировать его.

Затем я попытался сделать это с помощью iText для .NET. Я не могу создать PdfStamper из моего PdfReader, потому что я не предоставил пароль владельца читателю. Есть ли способ сделать это программно или я должен заново создать документ?

Даже при использовании FdfReader требуется PdfStamper. Я что-то пропустил? Что-нибудь законное - я уверен, что смогу взломать документ, но не могу. По иронии судьбы, воссоздание это, вероятно, будет хорошо.

Ответы [ 4 ]

5 голосов
/ 18 апреля 2012

Эта строка будет обходить проверку пароля для редактирования в iTextSharp:

PdfReader.unethicalreading = true;
3 голосов
/ 22 сентября 2009

[Я нашел этот вопрос через несколько месяцев после того, как он был опубликован, и сейчас выкладываю это решение для всех, кто сталкивается с этим вопросом в поиске.]

Я был в точно такой же ситуации: у моего клиента был PDF-файл с заполняемыми полями, который мне был необходим для программного доступа. К сожалению, PDF был защищен паролем, и у них не было пароля, поэтому я обнаружил, что не могу работать с их файлом.

Что я обнаружил, так это то, что iTextSharp версии 4.0.4 (и более поздние) вводит ограничения по паролю, а более ранние версии - нет.

Итак, я скачал версию 4.0.3 и, конечно, все заработало. В моем случае мне даже не пришлось менять свой код, чтобы использовать эту более старую версию.

Вы можете загрузить 4.0.3 (и все другие версии) с SourceForge .

0 голосов
/ 13 декабря 2014

Две важные вещи

  1. Установите PdfReader.unethicalreading = true в , чтобы предотвратить исключение BadPasswordException.
  2. Установить режим добавления в конструкторе PdfStamper, в противном случае подпись Adobe Reader будет повреждена, и Adobe Reader отобразит следующее сообщение: "Этот документ содержал определенные права для включения специальных функции в Adobe Reader. Документ был изменен с момента его создания, и эти права больше не действительны. Пожалуйста, свяжитесь с автором для получения оригинальной версии этого документа. "

Итак, все, что вам нужно сделать, это:

PdfReader.unethicalreading = true;
using (var pdfReader = new PdfReader("form.pdf"))
{
    using (var outputStream = new FileStream("filled.pdf", FileMode.Create, FileAccess.Write))
    {
        using (var stamper = new iTextSharp.text.pdf.PdfStamper(pdfReader, outputStream, '\0', true))
        {
            stamper.AcroFields.Xfa.FillXfaForm("data.xml");
        }
    }
}

См. Как заполнить форму XFA, используя iText?

0 голосов
/ 22 января 2009

Если кто-то еще не вмешивается, я предполагаю, что ответ "Нет"

Завелось восстановить PDF в незашифрованном виде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...