如何在WordPress中使用domPDF

Kie*_*ade 2 html css php wordpress dompdf

所以我希望在我的WordPress帖子上有一个按钮,将帖子转换为PDF.我找到了domPDF,但我不确定如何使用WordPress实现它?

我知道使用插件会更容易,但我想在没有插件的情况下这样做.

有人可以向我解释如何实现这一点吗?谢谢

Ale*_*ock 7

你的问题是非常开放的.通常,Stack Overflow用于询问非常具体的问题,例如:"为什么这段代码不能按预期运行?" 或者"我应该使用哪个函数来执行[在此处插入编程语言名称]"中的XYZ任务.

说完这个 - 我们偶尔需要一些kickstart,当涉及到搞清楚过程时.所以 - 我会尽我所能回答你的问题; 没有太具体(毕竟,我不是来为你做任务;)).

你真的需要编写代码吗?:如果你想将WordPress帖子转换为PDF,你可能会重新发明轮子.以下是我在Google搜索顶部找到的两个插件(我从未使用它们,并且还没有完全阅读他们的文档):

他们可能会完全按照您的需要进行操作,而无需深入研究您自己的编码.

"我只是说我不想使用插件":好的,没问题.但如果情况确实如此,我警告你要谨慎行事.WordPress使用插件来扩展它的功能有很多很好的理由.

可以通过主题的functions.php文件添加其他功能,或创建子主题并在其中添加更改; 但是,对于您要添加的功能类型,这有许多缺点.

一般来说,如果你想要彻底改变一些东西(是的,在这种情况下 - 你是;你正在添加一些全新的WordPress最初没有设计的东西) - 那么你应该把它放到一个插件中.

另一方面,如果您的更改很小并且只更改了默认配置(即更改循环中帖子的默认排序顺序) - 那么可以添加到主题的functions.php文件中.

要添加到此 - 如果您要更改某些特定主题,您还可以将其添加到主题的functions.php中.除外 - 如果您没有自己编写主题,则应使用插件或创建子主题.

好的 - 谢谢你的抬头.现在给我答案. 无论您选择哪种方式(编写插件,创建子主题或修改主题) - 实现您所需要的核心步骤都大致相同.

假设您已经熟悉了DomPDF的文档,您将会知道生成PDF文档非常简单:

// EXAMPLE TAKEN FROM https://github.com/dompdf/dompdf
// reference the Dompdf namespace
use Dompdf\Dompdf;

// instantiate and use the dompdf class
$dompdf = new Dompdf();
$dompdf->loadHtml('hello world');

// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4', 'landscape');

// Render the HTML as PDF
$dompdf->render();

// Output the generated PDF to Browser
$dompdf->stream();
Run Code Online (Sandbox Code Playgroud)

这段代码$dompdf->loadHtml('hello world');就是您要注入HTML标记的地方.

在这个阶段,最简单的选择是构建一个模板以传递给DomPDF的loadHtml函数.模板将包含帖子的标题和内容.

您编写的代码将从您想要转换的帖子实例内部执行(如果这对您没有意义 - 我建议您查看WordPress Codex).以下是您可能会考虑做的事情的示例:

// DomPDF will have already been initialised at this point in the code.

// Create a function that DomPDF can reference, for ease.
function grabPost() {

// Hook into loop (don't just copy and paste this. Read the codex!)
global $post;

// Creating a really simple template to pass to DomPDF
$title = '<h1>'.$post->post_title.'</h1>';
$content = '<article>'.$post->post_content.'</article>';

$passing = $title.$content;

return $passing;
}

// Pass our generated template into DomPDF
$dompdf->loadHtml(grabPost());

// Rendering PDF and outputting to browser happens below this line
Run Code Online (Sandbox Code Playgroud)

如果你已经阅读了所有这些,现在想"我真的很困惑",我建议你花点时间了解一下你对WordPress结构的了解.花些时间和实验.

我希望这有帮助 :)


Mat*_*nna 6

复制主题中的 dompdf 目录。

在主题目录的 function.php 中插入:

function me_post_pdf(){
    if (isset($_POST['me_post_pdf'])){
        include 'dompdf-master/autoload.inc.php';
        global $wp;
        $current_url = home_url(add_query_arg(array(),$wp->request));
        
        $html = file_get_contents($current_url);
        
        $options = new Options();
        $options->set('A4','potrait');
        $options->set('enable_css_float',true);
        $options->set('isHtml5ParserEnabled', true);
    
        $dompdf = new DOMPDF($options);
        $dompdf->loadHtml($html);
    
        $dompdf->render();
    
        $dompdf->stream('title.pdf');
    }
}

add_action('init', 'me_post_pdf');
Run Code Online (Sandbox Code Playgroud)

在文件 single.php 添加:

<form method="POST">
    <input type="submit" value="click me">
    <input type="hidden" name="me_post_pdf" value="submitted">
</form>
Run Code Online (Sandbox Code Playgroud)

它可能会在安装的主题的基础上稍微弯曲

  • 只需确保将表单方法设置为发布,因为默认情况下它是“获取” (3认同)