Как создать серию PDF-файлов в PHP 7.3.5 через domdpf?

Здравствуйте, попробую объяснить суть:
пхп 7.3.5
домпдф последней версии с https://github.com/dompdf/

1. хочу скачать википедию.
1.1. берем статьью, например $url = 'https://ru.wikipedia.org/wiki/Хост';
1.2. выкачиваем нужные ссылки на смежные статьи из нужного div-a в статье п. 1.1.:
получается так:
5e27054f4176a373589286.png

1.3. далее хочу в цикле по каждой ссылке с рисунка создать пдф, но получается лишь сделать на 1ю ссылку

вот код весь:

<?php
// reference the Dompdf namespace
require_once 'dompdf/autoload.inc.php';

use Dompdf\Dompdf;
use Dompdf\Options;


//download image
/*function file_get_contents_curl($url) { 
    $ch = curl_init(); 
  
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_URL, $url); 
  
    $data = curl_exec($ch); 
    curl_close($ch); 
  
    return $data; 
} 
  
//$data = file_get_contents_curl( $url ); 
//$fp = 'logo-1.png'; 
//file_put_contents( $fp, $data ); 
//echo "File downloaded!"
*/

// instantiate and use the dompdf class
//get HTML by URL
$url = 'https://ru.wikipedia.org/wiki/Хост';
$html = file_get_contents($url);

$dom = new DOMDocument();
$dom->loadHTML($html);

//get all a-tags from div.mw-body-content
$links = [];
$xPath = new DOMXPath($dom);
$anchorTags = $xPath->evaluate("//div[@class=\"mw-body-content\"]//a/@href");

foreach ($anchorTags  as $anchorTag) {
    $links[] = $anchorTag->nodeValue;
}

foreach($links as $link) {

  //decode url to cyrillic
  $linkDecoded = urldecode($link);

  //if url contains unneeded words, delete them
  if ( (strpos($linkDecoded, 'Категори') === false) && (strpos($linkDecoded, 'Википедия') === false) && 
    (strpos($linkDecoded, 'index.php') === false) && (strpos($linkDecoded, 'Файл') === false) && 
    (strpos($linkDecoded, '#') === false) ) {
    
    //if $linkDecoded[0] === '/' -> add 'https://ru.wikipedia.org'
    if ($linkDecoded[0] === '/') {
      $linkDecoded  = 'https://wikipedia.ru.org' . $linkDecoded . '<br>';

      // 5 === len(wiki/); https://stackoverflow.com/questions/11290279/get-everything-after-word
      $title = substr($linkDecoded, strpos($linkDecoded, 'wiki/') +5); 
      
      echo $linkDecoded;

      //DOMpdf -> pdf
      $options = new Options();

      $options->set('defaultFont', 'DejaVu Sans');

      //не было тут его, если что - убрать
      $html = file_get_contents($url);

      $dompdf = new Dompdf($options);
      $dompdf->loadHtml($html);

      //(Optional) Setup the paper size and orientation
      $dompdf->setPaper('A4', 'landscape');
      // Render the HTML as PDF
      $dompdf->render();
      
      // Output the generated PDF to Browser
      //title is basename === https://wikipedia.ru.org/wiki/             ->      Протокол_передачи_данных
      $dompdf->stream($title); 
    } 
  }
}


кто подскажет как сделать пдф со всех ссылок с рисунка?
  • Вопрос задан
  • 168 просмотров
Решения вопроса 1
@shevchenko__k
Помогаю новорожденным web программистам
проблема в том что метод render выдает return и получается так что в цикле отрабатывает только один виток. тебе надо в цикле собрать весть html с помощью конкатенации и только потом один большой html подавать на конвертацию в pdf
примерно вот так у вас должно быть
$html = '';

foreach($links as $link) {

  //decode url to cyrillic
  $linkDecoded = urldecode($link);

  //if url contains unneeded words, delete them
  if ( (strpos($linkDecoded, 'Категори') === false) && (strpos($linkDecoded, 'Википедия') === false) && 
    (strpos($linkDecoded, 'index.php') === false) && (strpos($linkDecoded, 'Файл') === false) && 
    (strpos($linkDecoded, '#') === false) ) {
    
    //if $linkDecoded[0] === '/' -> add 'https://ru.wikipedia.org'
    if ($linkDecoded[0] === '/') {
      $linkDecoded  = 'https://wikipedia.ru.org' . $linkDecoded . '<br>';

      // 5 === len(wiki/); https://stackoverflow.com/questions/11290279/get-everything-after-word
      $title = substr($linkDecoded, strpos($linkDecoded, 'wiki/') +5); 
      
      echo $linkDecoded;

      

      //не было тут его, если что - убрать
      $html .= file_get_contents($url);
    } 
  }
}

//DOMpdf -> pdf
      $options = new Options();

      $options->set('defaultFont', 'DejaVu Sans');

$dompdf = new Dompdf($options);
      $dompdf->loadHtml($html);

      //(Optional) Setup the paper size and orientation
      $dompdf->setPaper('A4', 'landscape');
      // Render the HTML as PDF
      $dompdf->render();
      
      // Output the generated PDF to Browser
      //title is basename === https://wikipedia.ru.org/wiki/             ->      Протокол_передачи_данных
      $dompdf->stream($title);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
rogerCopy
@rogerCopy Автор вопроса
спасибо , как всегда подвела невимательность:
вместо
$linkDecoded  = 'https://wikipedia.ru.org' . $linkDecoded;


надо
$linkDecoded  = 'https://ru.wikipedia.org' . $linkDecoded;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы