Как добавить только пароль пользователя в файл pdf без добавления пароля владельца с помощью iText? Насколько я понимаю, это можно сделать, только добавив пароль пользователя вместе с паролем владельца.
Как добавить в PDF только пароль пользователя без пароля владельца с помощью iText
comment
Как вы ожидаете, что PDF-файл с паролем пользователя, но без пароля владельца, будет вести себя? Любой, кто не идентифицирует себя по паролю, считается владельцем документа и, таким образом, вероятно, имеет больше прав, чем кто-либо, идентифицирующий себя по паролю пользователя?
- person mkl   schedule 21.01.2013
comment
Это то, чего хотел мой заказчик, лично мне это не нравится.
- person imgen   schedule 22.01.2013
comment
Попросите своего клиента предоставить образец PDF-файла с нужными ему настройками безопасности. Если он предоставит образец, осмотрите его. Я не удивлюсь, если в этом PDF-файле будут и пароль пользователя, и пароль владельца, но один из них будет либо паролем по умолчанию, либо случайным.
- person mkl   schedule 22.01.2013
comment
Какой тогда пароль владельца по умолчанию? Я смущен
- person imgen   schedule 22.01.2013
comment
Если вы ограничиваете разрешения с помощью зашифрованных разрешений, но не требуете, чтобы пользователь вводил пароль при открытии PDF-файла, PDF-файл фактически зашифровывается с использованием пароля пользователя по умолчанию, определенного в спецификации (и, следовательно, общеизвестного). Возможно, ваш клиент или его программное обеспечение также реализовали использование этого пароля по умолчанию для пароля владельца. Придется осматривать.
- person mkl   schedule 22.01.2013
comment
В спецификации фактически говорится, что при вычислении соответствующих записей словаря шифрования: Если нет пароля владельца, используйте вместо него пароль пользователя (Алгоритм 3: вычисление значения O (пароль владельца) словаря шифрования) в ISO 32000-1 < / а>). Вы можете сделать это в iText, используя тот же пароль, что и у владельца, и в качестве пароля пользователя. @Bruno всегда полон удивления, эта спецификация.
- person mkl   schedule 22.01.2013
Ответы (2)
Шифрование существующего PDF выполняется следующим образом:
public void encryptPdf(String src, String dest) throws IOException, DocumentException {
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.setEncryption(USER, OWNER,
PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128 | PdfWriter.DO_NOT_ENCRYPT_METADATA);
stamper.close();
reader.close();
}
См. http://itextpdf.com/examples/iia.php?id=219
Если OWNER null
, то будет сгенерирован случайный пароль владельца (который никто не знает). Может быть, это то, что имеет в виду ваш клиент. Как уже объяснялось в mkl, на самом деле нет смысла иметь PDF-файл с паролем ПОЛЬЗОВАТЕЛЯ, но без пароля ВЛАДЕЛЬЦА.
person
Bruno Lowagie
schedule
22.01.2013
Хорошо, честно, я думаю, мне придется принять это как ограничение iText.
- person imgen; 22.01.2013
Это не ограничение iText; это ограничение, присущее ISO-32000-1. Я почти уверен, что у Foxxit есть такое же ограничение; возможно, они используют стандартный пароль владельца (вы тоже можете это сделать).
- person Bruno Lowagie; 22.01.2013
Какой стандартный пароль владельца? Извините, я не специалист по PDF, так что просветите меня.
- person imgen; 22.01.2013
Возможно, Foxxit выбрал 32-символьный пароль, который поставляется с Foxxit, и, возможно, они всегда используют один и тот же пароль.
- person Bruno Lowagie; 22.01.2013
Проблема в том, что у меня нет этого пароля, думаю, мне придется использовать свой стандартный пароль и т. Д. :)
- person imgen; 22.01.2013
Следующий код - это то, что вам нужно, чтобы добавить пароль владельца.
JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperprintobj);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE,new File(fileName));
exporter.setParameter(JRPdfExporterParameter.IS_ENCRYPTED, Boolean.TRUE);
exporter.setParameter(JRPdfExporterParameter.IS_128_BIT_KEY, Boolean.TRUE);
//exporter.setParameter(JRPdfExporterParameter.USER_PASSWORD, "jasper");
exporter.setParameter(JRPdfExporterParameter.OWNER_PASSWORD, "reports");
exporter.setParameter(
JRPdfExporterParameter.PERMISSIONS,
new Integer(PdfWriter.ALLOW_COPY | PdfWriter.ALLOW_PRINTING)
);
exporter.exportReport(); // finally export as pdf
Используйте этот код в java, где вы создаете pdf.
person
Nagarajan S R
schedule
22.01.2013
добавление шифрования зависит от вас. но это функция безопасности, которую я рекомендую
- person Nagarajan S R; 22.01.2013
Я не добавляю пароль владельца, мой клиент хочет только добавить пароль пользователя. Он говорит, что определенное программное обеспечение, такое как foxit, может это делать, поэтому нам нужно его добавить. И я говорю о добавлении в существующие PDF-файлы, а не о создании нового.
- person imgen; 22.01.2013