Php 如何在Drupal 8中将可打印模块与自定义页面一起使用
我有一个自定义的页面构建与自定义路径和自定义控制器,我想让它可以打印下载 我正在查看可打印模块,但我不知道如何获取将其打印为pdf文件的路径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文件 使用(很
有什么想法吗?有几种方法可以实现这一点: 使用 实体打印允许您打印任何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中不起作用,所以我建议其他解决方案。把你的反对票留给其他人!!!你没有提供问题的答案,因此投了反对票!实体打印和可打印模块都不能打印自定义创建的页面(使用路由和控制器)。第三个模块是第三方服务。如果你知道的更好,那么解释一下怎么做,这样我就可以把它作为一个答案。两年前。我很确定那些模块在工作你不明白吗?这些模块*无法打印自定义创建的页面*。