Điểm:1

Add custom font to mpdf while using PDF using mPDF module

lá cờ jp

I made a custom module to create a PDF from a views page. This module depends on PDF using mPDF. I'm now trying to add a custom Google font. This should be the default font when generating a pdf. But I can't find out what I should do to have a custom font used in the PDF.

The mPDF documentation gives me an example of what I should do to load the custom font. I tried adding this in a custom function called right before generating the pdf but it doesn't work.

I both tried adding the font as default font to the setting (as shown in the example) or/and via css just using font-family: aller, none of it worked till now.

So my question is, am I using the code snippet in the right way? Or what can I do to get this to work?

My code:

GenerateViewsPdf.php -> Controller

<?php

namespace Drupal\views_pdf\Controller;

use Drupal\Core\Controller\ControllerBase;
use Drupal\pdf_using_mpdf\Conversion\ConvertToPdf;
use Symfony\Component\DependencyInjection\ContainerInterface;

class GenerateViewsPdf extends ControllerBase
{
  /**
   * @var ConvertToPdf
   */
  protected $convertToPdf;

  /**
   * Inject ConvertToPdf service
   *
   * GeneratePdf constructor.
   * @param ConvertToPdf $convert
   */
  public function __construct(ConvertToPdf $convert)
  {
    $this->convertToPdf = $convert;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container)
  {
    return new static(
      $container->get('pdf_using_mpdf.conversion')
    );
  }

  public function generateviews($arg = NULL, $views_name = NULL, $display_id = NULL)
  {
    addFont();
    $settings = $this->convertToPdf->getConfig();
    $settings["pdf_font_size"] = '10mm';
    $settings["default_font"] = 'aller';
    $settings["orientation"] = 'landscape';
    $settings["pdf_css_file"] = __DIR__ . "/../../css/style.css";
    
    $rendered_view = \Drupal::service('renderer')->render(views_embed_view($views_name, $display_id, $arg));
    $this->convertToPdf->convert($rendered_view, $settings);
    return true;
  }
}

function addFont(){
  $defaultConfig = (new \Mpdf\Config\ConfigVariables())->getDefaults();
  $fontDirs = $defaultConfig['fontDir'];

  $defaultFontConfig = (new \Mpdf\Config\FontVariables())->getDefaults();
  $fontData = $defaultFontConfig['fontdata'];
  $mpdf = new \Mpdf\Mpdf(
    [
      'tempDir' => __DIR__ . '/../../upload',
      'fontDir' => array_merge($fontDirs, [
        __DIR__ . '/../../fonts'
      ]),
      'fontdata' => $fontData + [
          'aller' => [
            'R' => 'aller_rg-webfont.ttf',
            'I' => 'aller_it-webfont.ttf',
          ],
        ],
      'default_font' => 'aller'
    ]
  );
}

——UPDATE——

I just tried adding the fontdata directly to the mpdf code in the vendor folder and this works perfectly so the font files work fine. And the idea of adding the fontdata is fine. But I don't know where to inject this code to make it work.

Điểm:0
lá cờ jp

Sử dụng phương pháp tôi đã thử không hoạt động vì tôi đã thêm phông chữ vào đối tượng mPDF khác với phông chữ được sử dụng khi tạo pdf. Bí quyết là thêm dữ liệu phông chữphông chữDir đến cài đặt khi Mpdf mới() được tạo ra trong ConvertToPdf.php tệp trong PDF bằng mô-đun mPDF. Điều này có thể được thực hiện đơn giản bằng cách thêm dữ liệu phông chữphông chữDir đến $settings trước khi gọi $this->convertToPdf->convert($rendered_view, $settings);

Vì vậy, giải pháp cuối cùng trông như thế này:

<?php

không gian tên Drupal\views_pdf\Controller;

sử dụng Drupal\Core\Controller\ControllerBase;
sử dụng Drupal\pdf_using_mpdf\Conversion\ConvertToPdf;
sử dụng Symfony\Component\DependencyInjection\ContainerInterface;

lớp GenerateViewsPdf mở rộng ControllerBase
{
  /**
   * @var ConvertToPdf
   */
  $convertToPdf được bảo vệ;

  /**
   * Tiêm dịch vụ ConvertToPdf
   *
   * Hàm tạo GeneratePdf.
   * @param ConvertToPdf $convert
   */
  chức năng công khai __construct(ConvertToPdf $convert)
  {
    $this->convertToPdf = $convert;
  }

  /**
   * {@inheritdoc}
   */
  tạo hàm tĩnh công khai (ContainerInterface $container)
  {
    trả về tĩnh mới (
      $container->get('pdf_using_mpdf.conversion')
    );
  }

  hàm công cộng tạo ra lượt xem($arg = NULL, $views_name = NULL, $display_id = NULL)
  {
    $settings = $this->convertToPdf->getConfig();
    $settings["pdf_font_size"] = '10mm';
    $settings["default_font"] = 'aller';
    $settings["orientation"] = 'phong cảnh';
    $settings["pdf_css_file"] = __DIR__ . "/../../css/style.css";
    
    // bắt đầu thêm phông chữ tùy chỉnh
    $settings["fontDir"] = __DIR__ . '/../../../../../custom/views_pdf/fonts';
    $settings["fontdata"] = ['aller' => [
        'R' => 'aller_rg-webfont.ttf',
        'Tôi' => 'aller_it-webfont.ttf',
    ]];
    // dừng thêm phông chữ tùy chỉnh
    
    $rendered_view = \Drupal::service('renderer')->render(views_embed_view($views_name, $display_id, $arg));
    $this->convertToPdf->convert($rendered_view, $settings);
    trả về đúng;
  }
}

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.