TCPDF a SVG obrázok – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

TCPDF a SVG obrázok – PHP – Fórum – Programujte.comTCPDF a SVG obrázok – PHP – Fórum – Programujte.com

 

juraj1750
Návštěvník
24. 10. 2019   #1
-
0
-

Viete mi poradiť. Program mi vygeneroval sudoku, vo formáte svg a chcem ju prekonvertovať do súboru pdf a používam plugin TCPDF.Môj problém spočíva v tom, že sudoka sa do pdf nahraje s prázdnou mriežkou bez číslic. Ale keď si sudoku vo formáte svg stiahnem niekde z internetu a skonvertujem do pdf tak je to správne. Len môj obrázok sa nezobrazuje správne - to je mriežka bez číslic. Pripájam aj súbor aj kód.Ďakujem za rady

<?php
require __DIR__.'/vendor/html2pdf/autoload.php';
 // create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetSubject('TCPDF priklad');
$pdf->SetKeywords('TCPDF, PDF, example, test, guide');
// set default header data

// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
//set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
//set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
//set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
//set some language-dependent strings
//$pdf->setLanguageArray($l);
// ---------------------------------------------------------
// set font
$pdf->SetFont('dejavusans', '', 10);
// add a page
$pdf->AddPage();
$html = '<h1>HTML priklad</h1>
 
<img src="33.svg" style="display:block;color:black;width:400;height:400"  >
';
// output the HTML content
$pdf->writeHTML($html);
$pdf->Output('example_006.pdf', 'I');
?>


A tu je súbor,33.zip,
neviem ako tu mám nahrať súbor,tak som to dal na svoju stránku.

Nahlásit jako SPAM
IP: 88.212.36.–
Kit+15
Guru
24. 10. 2019   #2
-
0
-

#1 juraj175
Zkus místo toho nevalidního HTML poslat jen to SVG.

Nahlásit jako SPAM
IP: 46.135.85.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
juraj1750
Návštěvník
24. 10. 2019   #3
-
0
-

#2 Kit
myslíš takto?


$html = '<img src="33.svg" style="display:block;color:black;width:400;height:400" > ';
 

Nahlásit jako SPAM
IP: 88.212.36.–
Kit+15
Guru
25. 10. 2019   #4
-
0
-

#3 juraj175
Ne. Takto: 

$html = file_get_contents("33.svg");

Ovšem nevím, zda to bude fungovat.

Nahlásit jako SPAM
IP: 46.135.85.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
juraj1750
Návštěvník
25. 10. 2019   #5
-
0
-

#4 Kit
Nefunguje dokonca nezobrazilo nič.

Nebude zrada v xml v vygenerovanom kóde v súboru svg? Niekde som čítal že pri tomto kóde
file_get_contents treba použiť príkaz regex a xml ja neviem.
Súbor si môžeš stiahnuť pod zdrojovým kódom

Nahlásit jako SPAM
IP: 88.212.36.–
gna
~ Anonymní uživatel
1849 příspěvků
25. 10. 2019   #6
-
+1
-
Zajímavé
Kit +

SVG jde vložit funkcí ImageSVG, ale to má stejný efekt jako img v html.

Problém je v tom, že TCPDF nepodporuje tag symbol. Pokud ten generátor umožňuje vybrat verzi, tak zkus SVG 1.0. Jinak můžeš to SVG nejjednodušeji (prasácky) upravit přehozením atributu id ze symbol do toho vnořeného path.

Nahlásit jako SPAM
IP: 213.211.51.–
juraj1750
Návštěvník
25. 10. 2019   #7
-
0
-

#6 gna
Funguje to. Nedá sa to nejako inak spraviť? Lebo keď budem mať napr 200 súborov,tak každý jedne ručne opravovať??? Program nemá možnosť si vybrať verziu SVG

Ďakujem

Nahlásit jako SPAM
IP: 88.212.36.–
Kit+15
Guru
25. 10. 2019   #8
-
0
-

#7 juraj175
samozřejmě to jde. Natáhni si to do DOMDocument a přehoď atributy.

Nahlásit jako SPAM
IP: 46.135.85.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
juraj1750
Návštěvník
25. 10. 2019   #9
-
0
-

#8 Kit
a nejaký príklad na môj problém mi nemôžeš ukázať???

Nahlásit jako SPAM
IP: 88.212.36.–
Kit+15
Guru
25. 10. 2019   #10
-
0
-

#9 juraj175
Tady to máš pro jeden soubor: 

$doc = new \DOMDocument('1.0', 'UTF-8');
$doc->load("33.svg");
$symbols = $doc->getElementsByTagName('symbol');
foreach ($symbols as $symbol) {
    $id = $symbol->getAttribute('id');
    $symbol->removeAttribute('id');
    $paths = $symbol->getElementsByTagName('path');
    foreach ($paths as $path) {
        $path->setAttribute('id', $id);
    }
}
echo $doc->saveXML();
Nahlásit jako SPAM
IP: 46.135.85.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
25. 10. 2019   #11
-
0
-

#6 gna
Ten element symbol není vůbec podporován nebo jen nepodporuje atribut id?

Nahlásit jako SPAM
IP: 46.135.85.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
juraj1750
Návštěvník
25. 10. 2019   #12
-
0
-

#11 Kit
Ja to chcem aby výstup bol v pdf

// add a page
$pdf->AddPage();
//$html = '<img src="34.svg" style="display:block;color:black;width:400;height:400" > ';
//$html = file_get_contents("33.svg");
// output the HTML content      +
//$html = utf8_decode($html);
///$pdf->writeHTML($html);

       $pdf = new \DOMDocument('1.0', 'UTF-8');
$pdf->load("34.svg");
$symbols =$pdf->getElementsByTagName('symbol');
foreach ($symbols as $symbol) {
    $id = $symbol->getAttribute('id');
    $symbol->removeAttribute('id');
    $paths = $symbol->getElementsByTagName('path');
    foreach ($paths as $path) {
        $path->setAttribute('id', $id);
    }
}
///  $pdf ->saveXML();

$pdf->writeHTML(utf8_encode($html), true, false, true, false, '');
$pdf->Output('example_006.pdf', 'I');


vypisuje chybu

Fatal error: Call to undefined method DOMDocument::writeHTML() in D:\www\word3\15.php on line 51

a môžeš pre viac súborov napísať kód? Symbol tam musí byť aj keď som ručne prepísal id do path.

Nahlásit jako SPAM
IP: 88.212.36.–
Kit+15
Guru
25. 10. 2019   #13
-
0
-

#12 juraj175
proč jsi přejmenoval $doc na $pdf? Zlikvidoval sis tak původní objekt.

Nahlásit jako SPAM
IP: 46.135.85.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
juraj1750
Návštěvník
25. 10. 2019   #14
-
0
-

   

$doc = new \DOMDocument('1.0', 'UTF-8');
$doc->load("33.svg");
$symbols = $doc->getElementsByTagName('symbol');
foreach ($symbols as $symbol) {
    $id = $symbol->getAttribute('id');
    $symbol->removeAttribute('id');
    $paths = $symbol->getElementsByTagName('path');
    foreach ($paths as $path) {
        $path->setAttribute('id', $id);
    }
}
ECHO $ordernumber= $doc->saveXML();


Už som to dal na pôvodne ale obrázok nie je pdf

Nahlásit jako SPAM
IP: 88.212.36.–
Kit+15
Guru
25. 10. 2019   #15
-
0
-

#14 juraj175
Očekával jsem, že ten závěr bude vypadat nějak takhle: 

$svg = $dom->save();
$pdf->writeHTML($svg, true, false, true, false, '');
$pdf->Output('example_34.pdf', 'I');
Nahlásit jako SPAM
IP: 46.135.85.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
juraj1750
Návštěvník
25. 10. 2019   #16
-
0
-

#15 Kit
Kód na uloženie hlási chybu

ale ja som dal takto

$pdf->writeHTML($doc->saveXML(),true, false, true, false, 'n');
$pdf->Output('example_006.pdf', 'I');

a je prázdny pdf dokument bez obrázka

Nahlásit jako SPAM
IP: 88.212.36.–
Kit+15
Guru
25. 10. 2019   #17
-
0
-

#16 juraj175
Proč jsi odstranil proměnnou $svg?

Zkus to zkombinovat s tím skriptem na začátku.

Je také možné, že element symbol bude nutné úplně odstranit.

Nahlásit jako SPAM
IP: 46.135.85.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
juraj1750
Návštěvník
25. 10. 2019   #18
-
0
-

#17 Kit
Dám celý kód

<?php
require __DIR__.'/vendor/html2pdf/autoload.php';
 // create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetSubject('TCPDF priklad');
$pdf->SetKeywords('TCPDF, PDF, example, test, guide');
// set default header data

// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
//set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
//set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
//set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
//set some language-dependent strings
//$pdf->setLanguageArray($l);
// ---------------------------------------------------------
// set font
//$pdf->SetFont('dejavusans', '', 10);
$pdf->SetFont('times', 'BI', 20,'', 'false');
// add a page
$pdf->AddPage();
$html = ' obsah
';
$doc = new \DOMDocument('1.0', 'UTF-8');
$doc->load("d:/www/word3/34.svg");
$symbols = $doc->getElementsByTagName('symbol');
foreach ($symbols as $symbol) {
    $id = $symbol->getAttribute('id');
    $symbol->removeAttribute('id');
    $paths = $symbol->getElementsByTagName('path');
    foreach ($paths as $path) {
        $path->setAttribute('id', $id);
    }
}
$svg = $doc->saveXML();
$pdf->writeHTML($svg,true, false, true, false, 'n');
$pdf->Output('example_006.pdf', 'I');


?>>


Odstránil séom aj symbol a pdf je stále prázdny

Nahlásit jako SPAM
IP: 88.212.36.–
Kit+15
Guru
Nahlásit jako SPAM
IP: 46.135.85.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
juraj1750
Návštěvník
26. 10. 2019   #20
-
0
-

#19 Kit
 

 $html = 'obsah  ';
  $pdf->ImageSVG('@' . $svg, $x=15, $y=30, $w='', $h='',  $align='', $palign='', $border=1, $fitonpage=false);       $pdf->Write(0, $html, '', 0, 'L', true, 0, false, false, 0);     $pdf->Output('document.pdf', 'I');

Takto mi to funguje vďaka. A ako by to bolo s viacerými súbormi?

Keby som chcel napríklad ručne vložiť druhý obrázok? Ak by sa obrázky načítali z databázy, tak stačí

do load vložiť názov svg súboru aj s cestami a potom by sa všetky obrázky upravili?

Nahlásit jako SPAM
IP: 88.212.36.–
juraj1750
Návštěvník
28. 10. 2019   #21
-
0
-

#19 Kit
skombinoval som to s mysql,stále mi vypisuje len jeden obrázok a chcem aby mi vypísalo na štyri

SVG súbory mi to upravilo len neviem kde to dať aby vypísalo napr 4 obrázky

<?php ob_start() ;
require __DIR__.'/vendor/html2pdf/autoload.php';
// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
 
$pdf->SetCreator("-");
$pdf->SetAuthor('-');
$pdf->SetTitle('Demonstrating pdf with php');
 
//$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING, array(0, 6, 255), array(0, 64, 128));
$pdf->setFooterData(array(0,64,0), array(0,64,128));
 
$pdf->setHeaderFont(array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
 
// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
 
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
//$pdf->SetMargins(PDF_MARGIN_LEFT-5, PDF_MARGIN_TOP-2, PDF_MARGIN_RIGHT-2);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
 
// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
 
// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
  $pdf->setFont('dejavusans', '', 14, '', true);

$pdf->AddPage();
 //$pdf->SetMargins(15, 29, 16,true);
 $doc = new \DOMDocument('1.0', 'UTF-8');
$html = <<<EOD
<h1 style="text-align:center">nadpis</h1>

EOD;
  

$conn = mysqli_connect("localhost", "root", "", "sudoku");  
$sql = "SELECT * FROM  logickehry limit 4 ";  
$result = mysqli_query($conn, $sql);  

           
while($row = mysqli_fetch_assoc($result))  
{                  
// $img=trim($row['nevyriesene']);
 

$doc = new \DOMDocument('1.0', 'UTF-8');
   $img=trim($row['nevyriesenasvg']);
   
$doc->load("http://localhost2/word3/logickehry/$img"); //d:/www/word3/34.svg  
        $symbols = $doc->getElementsByTagName('symbol');
foreach ($symbols as $symbol) {
   $id = $symbol->getAttribute('id');
    $symbol->removeAttribute('id');
   $paths = $symbol->getElementsByTagName('path');
    foreach ($paths as $path) {
        $path->setAttribute('id', $id);
        }
}      
$svg= $doc->saveXML();
 $G=$pdf->ImageSVG('@'.$svg, $x=215, $y=30, $w='70.00cm', $h='70.00cm',$link='',  $align='', $palign='L', $border=1, $fitonpage=false);        
 $html .= <<<EOD
<img src="d:/www/word3/logickehry/".$svg width="300" height="300">
EOD;
}     
$html .= '';
$pdf->writeHTML($html);
//$pdf->writeHTML($html);
   // ob_end_clean();
$pdf->Output('test.pdf', 'I');
?>

Nahlásit jako SPAM
IP: 88.212.36.–
gna
~ Anonymní uživatel
1849 příspěvků
28. 10. 2019   #22
-
+1
-
Zajímavé
Kit +

#21 juraj175
Pravděpodobně jsou tam všechny, ale na jedné stránce a na stejných souřadnicích, takže se překrývají.

Nahlásit jako SPAM
IP: 213.211.51.–
juraj1750
Návštěvník
28. 10. 2019   #23
-
0
-

#22 gna
A nie je nejaký spôsob, aby sa aj tie obrázky automaticky rozložili napr.vedľa seba?

Lebo pri jpg obrázkami tam nie je žiadny problém.

Nahlásit jako SPAM
IP: 88.212.36.–
gna
~ Anonymní uživatel
1849 příspěvků
28. 10. 2019   #24
-
0
-

#23 juraj175 

$x=215, $y=30

To budou souřadnice, kam se má ten obrázek umístit, ne? :)

Nahlásit jako SPAM
IP: 213.211.51.–
juraj1750
Návštěvník
28. 10. 2019   #25
-
0
-

#24 gna
A keď ich bude napríklad 100 obrázkov?Aké budú suradníce všetkých obrázkov

$x=????, $y=?????
Nahlásit jako SPAM
IP: 88.212.36.–
gna
~ Anonymní uživatel
1849 příspěvků
28. 10. 2019   #26
-
0
-

#25 juraj175
Takové jaké si je uděláš. Třeba je můžeš po každém obrázku posunovat.

$x = startx;
$y = starty;
while ...
	image(... $x, $y, ...);
	$x += posunx;
	$y += posuny;

https://www.php.net/manual/en/index.php

Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Podobná vlákna

TCPDF, Debian, locale — založil Jirka

Moodle TCPDF export — založil Hacky

Moodle TCPDF exort — založil Hacky

PHP a SVG — založil Mona

Výpočet výšky SVG — založil ingiraxo

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý