Я работаю над проектом, где пользователь может загрузить защищенный паролем pdf-файл. Существует также форма, в которой пользователь может предоставить для нее пароль.
Есть ли способ открыть этот защищенный паролем pdf с помощью PHP?
вы можете сделать это, используя простую java-программу и вызывая исполняемый файл jar из вашего PHP-скрипта. Вам нужен файл pdfbox.jar для удаления пароля из файла PDF, который вы можете загрузить с https://pdfbox.apache.org/download.cgi . В этом примере вы получаете текстовый файл, вы также можете создавать PDF-файл после разблокировки.
package pdftotext; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.text.PDFTextStripper; public class PdfTotext { public static void main(String[] args) { String filename = args[0]; String password = args[1]; PDDocument pd; BufferedWriter wr; try { File input = new File(filename); // The PDF file from where you would like to extract File output = new File("unlock.txt"); // The text file where you are going to store the extracted data pd = PDDocument.load(input,password); pd.setAllSecurityToBeRemoved(true); PDFTextStripper stripper = new PDFTextStripper(); wr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(output))); stripper.writeText(pd, wr); if (pd != null) { pd.close(); } wr.close(); } catch (Exception e){ e.printStackTrace(); } } }
В скрипте PHP вам необходимо передать имя файла и пароль
<?php exec("java -jar pdfTotext.jar filename.pdf password"); ?>
убедитесь, что исполняемый файл jar, файл библиотеки и файл pdf находятся в одной папке.
Мы предлагаем продукт под названием SetaPDF-Extractor , который может извлекать текст из PDF-документов в PHP. Обратите внимание, что это не бесплатно. Он также позволяет извлекать текст из защищенных документов, если вы прошли проверку подлинности. Следующий код – это просто фиктивная логика, но должна показать, что возможно. Подробности об аутентификации можно найти здесь :
<?php require_once("library/SetaPDF/Autoload.php"); // create a document instance $document = SetaPDF_Core_Document::loadByFilename("Laboratory-Report.pdf"); if ($document->hasSecHandler()) { // get the security handler $secHandler = $document->getSecHandler(); // auth by the user password if (!$secHandler->authByUserPassword('a secret password')) { // ... not authenticated } // auth by the owner password if (!$secHandler->authByOwnerPassword('another secret password')) { // ... not authenticated } // stop at least here if you are not authenticated } // create an extractor instance $extractor = new SetaPDF_Extractor($document); // get the plain text from page 1 $result = $extractor->getResultByPageNumber(1); // output echo '<pre>'; echo htmlspecialchars($result); echo '</pre>';