Php 如何在Drupal 8中将可打印模块与自定义页面一起使用

Php 如何在Drupal 8中将可打印模块与自定义页面一起使用,php,pdf,module,drupal-8,Php,Pdf,Module,Drupal 8,我有一个自定义的页面构建与自定义路径和自定义控制器,我想让它可以打印下载 我正在查看可打印模块,但我不知道如何获取将其打印为pdf文件的路径 有什么想法吗?有几种方法可以实现这一点: 使用 实体打印允许您打印任何Drupal实体(Drupal 7和8)或 查看(仅限Drupal 8)至PDF 与打印等其他模块相比,该模块是轻量级的 模块,具有完整的测试覆盖范围,可以在生产中使用 对于D7和D8 使用打印模块的新主机() 这是打印模块的新主页。该模块利用 pdf_api模块生成pdf文件 使用(很

我有一个自定义的页面构建与自定义路径和自定义控制器,我想让它可以打印下载

我正在查看可打印模块,但我不知道如何获取将其打印为pdf文件的路径


有什么想法吗?

有几种方法可以实现这一点:

使用

实体打印允许您打印任何Drupal实体(Drupal 7和8)或 查看(仅限Drupal 8)至PDF

与打印等其他模块相比,该模块是轻量级的 模块,具有完整的测试覆盖范围,可以在生产中使用 对于D7和D8

使用打印模块的新主机()

这是打印模块的新主页。该模块利用 pdf_api模块生成pdf文件

使用(很好地支持本地化)

Drupal站点的#1打印和PDF按钮。打印机友好型 没有编码、css或print.css的页面。快速、简单、专业

打印友好&PDF按钮可在打印或打印时节省纸张和墨水 创建PDF。它快速、简单,打印时看起来很棒。添加 按钮,您的用户将看到差异

打印友好&PDF的工作原理打印友好&PDF按钮 自动创建页面的打印机友好版本和PDF版本 无需创建打印CSS文件。没有编码, 需要黑客或编程。只需安装打印友好型& PDF插件,激活,并选择完全自定义设置。信息技术 还可以使用户删除文档中的图像和段落 文本,所以他们实际上只需要打印他们想要的内容


使用可打印模块本身的控制器,我能够生成pdf。您只需要将实体视图(比较showFormat方法)与您自己的渲染数组(构建)交换。本例中未实际使用ConfigFactory

<?php

namespace Drupal\your_module\Controller;

use Drupal\Core\Config\ConfigFactory;
use Drupal\Core\Controller\ControllerBase;
use Drupal\printable\PrintableFormatPluginManager;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

/**
 * Returns response.
 */
class PrintViewController extends ControllerBase {

  /**
   * The printable format plugin manager.
   *
   * @var \Drupal\printable\PrintableFormatPluginManager
   */
  protected $printableFormatManager;

  /**
   * The configuration factory.
   *
   * @var \Drupal\Core\Config\ConfigFactory
   */
  protected $configFactory;

  /**
   * Constructs a PrintViewController object.
   *
   * @param \Drupal\printable\PrintableFormatPluginManager $printable_format_manager
   *   The printable format plugin manager.
   * @param \Drupal\Core\Config\ConfigFactory $config_factory
   *   The config factory class instance.
   */
  public function __construct(PrintableFormatPluginManager $printable_format_manager, ConfigFactory $config_factory) {
    $this->printableFormatManager = $printable_format_manager;
    $this->configFactory = $config_factory;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('printable.format_plugin_manager'),
      $container->get('config.factory')
    );
  }

  /**
   * Builds the response.
   */
  public function build() {

    $build['content'] = [
      '#type' => 'item',
      '#markup' => $this->t('It works!'),
    ];

    return $this->showFormat($build, 'pdf'); // One of 'pdf' / 'print'
  }

  /**
   * Returns the entity rendered via the given printable format.
   *
   * @param array $build
   *   The render array be printed.
   * @param string $printable_format
   *   The identifier of the hardcopy format plugin (i.e. print or pdf).
   *
   * @return \Symfony\Component\HttpFoundation\Response
   *   The printable response.
   */
  public function showFormat(array $build, $printable_format) {
    if (!$this->printableFormatManager->getDefinition($printable_format, FALSE)) {
      throw new NotFoundHttpException();
    }

    $format = $this->printableFormatManager->createInstance($printable_format);
    $format->setContent($build);
    return $format->getResponse();
  }

}

除了列出现有模块并引用它们的描述之外,这并不能真正回答问题。问题是如何使自定义页面可打印。在Drupal7中,将
print/
放在使用打印模块的路径之前同样容易。在Drupal 8上没有明显的方法。我建议其他解决办法。请阅读我在那里提到的内容,而不是咄咄逼人的否决投票。我知道打印在D8中不起作用,所以我建议其他解决方案。把你的反对票留给其他人!!!你没有提供问题的答案,因此投了反对票!实体打印和可打印模块都不能打印自定义创建的页面(使用路由和控制器)。第三个模块是第三方服务。如果你知道的更好,那么解释一下怎么做,这样我就可以把它作为一个答案。两年前。我很确定那些模块在工作你不明白吗?这些模块*无法打印自定义创建的页面*。