如何从PHP或JavaScript删除.pdf限制?

时间:2019-01-22 17:39:06

标签: javascript php pdf

我一直在使用qpdf删除CSSTransition限制,可以在php这样的系统中使用,例如:

<Route render={({ location }) => {
    let direction = location.state ? location.state.direction : null
    let doAnimation = !!direction 

    // direction = the type of animation to use, if null = no animation

    return (
        <TransitionGroup enter={doAnimation} exit={doAnimation} >
            <CSSTransition 
                key={location.key} 
                classNames={direction || "none"} 
                timeout={500}> 
                <Switch  
                    location={location}>
                    {routes}
                </Switch> 
            </CSSTransition>
        </TransitionGroup> 
    )
}} /> 

这在localhost上运行良好,但是出于安全原因,无法在共享的虚拟主机上执行。

因此,我正在寻找另一种无需shell命令即可完成此工作的方法。

在PHP或JavaScript语言上是否有解决方案?

编辑

我正在测试的pdf并没有被密码阻止,我所知道的是我无法从中复制文本,但是在应用了“ qpdf --decrypt ..”命令之后,我就可以做到。

2 个答案:

答案 0 :(得分:1)

您可以在GitHub php-pdftk

中使用以下存储库

示例PHP代码:

use mikehaertl\pdftk\Pdf;

$pdf = new Pdf('/path/my.pdf');

$pdf->allow('AllFeatures')      // Change permissions
    ->flatten()                 // Merge form data into document (doesn't work well with UTF-8!)
    ->compress($value)          // Compress/Uncompress
    ->keepId('first')           // Keep first/last Id of combined files
    ->dropXfa()                 // Drop newer XFA form from PDF
    ->dropXmp()                 // Drop newer XMP data from PDF
    ->needAppearances()         // Make clients create appearance for form fields
    ->setPassword($pw)          // Set owner password
    ->setUserPassword($pw)      // Set user password
    ->passwordEncryption(128)   // Set password encryption strength
    ->saveAs('new.pdf'); 

答案 1 :(得分:-1)

使用JavaScript(PDF.js)编写的Mozilla PDF Reader可以满足您的所有这些需求。您可以显示所有PDF,而不受共享网络托管的限制。我现在已经对其进行了文本复制,文档打印和其他限制的测试-您可以不受限制地进行所有操作。

仅对于文档读取密码,您将需要一个密码,并且我希望您了解,如果密码足够牢固,则无法使用任何其他软件删除此密码。您也可以使用密码打开在线所有文档(如果有的话),但是将跳过所有其他限制。我已使用所有者和用户密码中的256-bit of key length对它进行了测试。

Online DEMO

如果有人不了解OP(原始海报)的QPDF库,我是否发现了有关此QPDF库的以下信息:

  

受保护的PDF文件具有两种类型的密码:OWNER和USER。
  OWNER密码用于强制权限。
  USER密码用于打开pdf文件。
  ...
  如果还使用USER密码保护了它,也可以解密它,但是您需要知道该密码。

     

Source

使用此库,您无需编写明确的某些代码即可删除PDF限制。通过自动 读取文档,它消除了(所有者密码)限制。如果设置了用户密码(用于打开PDF文件),那么它会通过从文档中读取自动自动显示该密码的输入对话框。

结论:在受到限制的情况下,OP中的PDF.js库和QPDF库具有相同的作用。

如何开始

只需打开下面的主站点链接,然后转到入门站点(您将在页面顶部找到这种可能性)–您将找到所有这些入门说明。

PDF.js open source project (GitHub链接)。

在此 home site 上,您将找到:

  • 入门信息
  • 示例(很多代码示例)
  • 常见问题解答(答案)
  • API说明

有用的链接: