我正在开发一个项目,用户可以上传受密码保护的pdf文件。还有一个表单,用户可以在其中提供密码。
有没有办法用PHP打开这个受密码保护的pdf文件?
答案 0 :(得分:2)
你可以通过使用简单的java程序并从PHP脚本调用可执行jar文件来实现。 您需要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文件位于同一文件夹中。
答案 1 :(得分:0)
我们提供名为SetaPDF-Extractor的产品,可以从PHP中提取PDF文档中的文本。请注意,它不是免费的。如果您进行了正确的身份验证,它还允许您从受保护的文档中提取文本。以下代码只是一些虚拟逻辑,但应该显示可能的内容。有关身份验证的详细信息可以在here找到:
<?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>';