Autopopulating PDF použitím PHP formuláře včetně diakritiky – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Autopopulating PDF použitím PHP formuláře včetně diakritiky – PHP – Fórum – Programujte.comAutopopulating PDF použitím PHP formuláře včetně diakritiky – PHP – Fórum – Programujte.com

 

ondrej39+1
Věrný člen
13. 9. 2014   #1
-
0
-

Čau,

jsem mizerný programátor a posledních pár dní řeším, jak zprovoznit diakritiku při vyplňování předchystaného .pdf formuláře za pomocí formuláře na webu. Nejdříve jsem zjišťoval, jakým způsobem vůbec vyplňování zprovoznit a nakonec jsem se rozhodl pro PDFTk. Aktuálně mám tedy napsané toto:

<?php

if(isset($_POST['odeslat'])){

    $jmeno = $_POST['jmeno'];
    $prijmeni = $_POST['prijmeni']; 
    $mesto = 'Brno';
    $mail = 'email@email.com';

$content = '%FDF-1.2
1 0 obj<</FDF<< /Fields[
<</T(Name)/V('.chr(0xFE).chr(0xFF).mb_convert_encoding($jmeno,'UTF-16BE', 'UTF-8').')>>
<</T(Surname)/V('.chr(0xFE).chr(0xFF).mb_convert_encoding($prijmeni,'UTF-16BE', 'UTF-8').')>>
<</T(City)/V('.chr(0xFE).chr(0xFF).mb_convert_encoding($mesto,'UTF-16BE', 'UTF-8').')>>
<</T(Mail)/V('.chr(0xFE).chr(0xFF).mb_convert_encoding($mail,'UTF-16BE', 'UTF-8').')>>
] >> >>
endobj
trailer
<</Root 1 0 R>>
%%EOF';

    file_put_contents('test.fdf', $content);
    
    //$fp = fopen('test.fdf', 'w');
    //fwrite($fp, $content);
    //fclose($fp);

    exec("pdftk forma.pdf fill_form test.fdf output filled.pdf flatten");
    
    }
     
?>


<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <title></title>
  </head>
  <body>
    <form method="POST" action="">
      <input type="text" name="jmeno" /><br />
      <input type="text" name="prijmeni" /><br />
      <input type="submit" name="odeslat" value="Odeslat!">
    </form>        
  </body>
</html>

Mé testovací .pdf tedy obsahuje 4 pole (Name, Surname, City, Mail) a skript pro vyplnění .pdf z formuláře (nebo proměnných) jsem převzal z této stránky. Vyplňování normálně funguje pro anglický - nadiakritický - jazyk, ale jakmile do formuláře zadám cokoli s diakritikou, v .pdf se mi namísto diakritických znaků zobrazují pouze otazníky.

Nevíte, jakým způsobem mám změnit kódování, abych měl správně diakritiku i v samotném .pdf? Zkoušel jsem i jiný způsob vyplňování, pomocí fpdm.php, ale rovněž jsem se nesetkal s úspěchem.

Budu rád za každou odpověď,

Ondřej

Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
Matěj Andrle+1
Grafoman
13. 9. 2014   #2
-
0
-

#1 ondrej39
Jak těžké použít Google... :D

http://stackoverflow.com/questions/6047970/weird-characters-when-filling-pdf-with-pdftk

V tomto řešení bohužel Unicode nepojede! (Lze jen změnit jazyk (jeden - reskeptive AJ jde téměř na každém) - UTF podporuje všechny...)

Nahlásit jako SPAM
IP: 78.136.149.–
ondrej39+1
Věrný člen
13. 9. 2014   #3
-
0
-

#2 Matěj Andrle
Díky za odpověď, na googlu jsem hledal dohromady asi tak 12 hodin, mimojiné stránku, kterou jsi mi poslal, jsem také navštívil, ale nemám nejmenší zdání, jaký kód ze stránky vzít a na jaké místo ho nakopírovat. Zabývám se výhradně grafikou a s programováním mám minimální až žádnou zkušenost. Pokud bys mi mohl jak pro blbce napsat, co mám udělat, budu ti vděčný.

Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
Matěj Andrle+1
Grafoman
13. 9. 2014   #4
-
0
-

#3 ondrej39

1 down vote accepted

Solved with utf8_decode. I guess there were some caching problems and the characters were still showing

Ten string, co ti blbne, jen dekóduješ do ISO formátu!

Nahlásit jako SPAM
IP: 78.136.149.–
ondrej39+1
Věrný člen
13. 9. 2014   #5
-
0
-

#4 Matěj Andrle

Takže třeba <</T(Name)/V('.utf8_decode($jmeno).')>> ?

 

Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
Matěj Andrle+1
Grafoman
13. 9. 2014   #6
-
0
-

#5 ondrej39
To co vám jde blbě... Protože to je formátováno v globálním měřítku (Unicode je pro všechny jazyky), ovšem vámi použité řešení umožňuje pouze jeden ISO jazyk... (Vzhledem k tomu, že AJ a jiné obsahují jen základní písmena latinky, to tak úplně není pravda.)

Nahlásit jako SPAM
IP: 78.136.149.–
ondrej39+1
Věrný člen
13. 9. 2014   #7
-
0
-

#6 Matěj Andrle
Prosím tě, můžeš mi napsat jak přesně mám upravit ten kód? Blbnou mi úplně všechna pole v tom pdfku, potřebuji, aby diakritika jela ve všech (Name, Surname, City, Mail). Jak mám tedy nastavit to dekódování? Protože jsem změnil

<</T(Name)/V('.$jmeno.')>>


na

<</T(Name)/V('.utf8_decode($jmeno).')>>


a udělalo to úplný prd. Pořád mi diakritika nefunguje. Já programování fakt vůbec nerozumím, pokud tedy budeš používat nějakou terminologii, tak mi, bohužel, vůbec nepomůžeš. Potřebuji to vysvětlit jak tříletému dítěti.

Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
Matěj Andrle+1
Grafoman
13. 9. 2014   #8
-
0
-

#7 ondrej39
Možná tedy toto:

$content = <<<END
%FDF-1.2
1 0 obj
<<
/Version /1.3
/Encoding /utf_8
/FDF<< /Fields[
<</T(Name)/V('.chr(0xFE).chr(0xFF).mb_convert_encoding($jmeno,'UTF-16BE', 'UTF-8').')>>
<</T(Surname)/V('.chr(0xFE).chr(0xFF).mb_convert_encoding($prijmeni,'UTF-16BE', 'UTF-8').')>>
<</T(City)/V('.chr(0xFE).chr(0xFF).mb_convert_encoding($mesto,'UTF-16BE', 'UTF-8').')>>
<</T(Mail)/V('.chr(0xFE).chr(0xFF).mb_convert_encoding($mail,'UTF-16BE', 'UTF-8').')>>
] >> >>
endobj
trailer
<</Root 1 0 R>>
%%EOF
END;


Formát možná oprav - však to je na tom webu... Já jen vím, že mě šlo jen cp1250 - to máš nahoře - ty konverze... Já to u sebe nemám - pochop, musíš testovat sám...

Nahlásit jako SPAM
IP: 78.136.149.–
ondrej39+1
Věrný člen
13. 9. 2014   #9
-
0
-

#8 Matěj Andrle
Na odkazovaném stackoverflow se právě píše But as I said, I didn't manage to get any of this to work. pdftk just seems to ignore it., což je pravda, protože dosazení "Encoding /utf_8" nedělá vůbec nic. Úplně dole na stránce je nějaký řádek kódu

$fdf_data_strings = array( 'pdf_string' => utf8_decode($form_state['values']['test']); );

Nenapadá tě, kam bych toto měl dosadit? Jestli toto celé mám dosadit do závorky za /V(DOSADIT_ZDE)?

Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
Matěj Andrle+1
Grafoman
13. 9. 2014   #10
-
0
-

#9 ondrej39
Však já ti to psal od začátku - já jsem zprovoznil jen české ISO (tedy Windows 1250) -> a to převedením UNICODE na ISO... Nechápu, kde jsi vzal, že vstupem je UTF-16! Takže tam hledej chybu...

"mb_convert_encoding($mail,'UTF-16BE', 'UTF-8')"

Tady si zjisti správný vstup (o UTF-16 dost pochybuji) a výstupem by mělo být cp1250 - na to nastav i PDF dokument...

Nahlásit jako SPAM
IP: 78.136.149.–
ondrej39+1
Věrný člen
13. 9. 2014   #11
-
0
-

Můžu poprosit o vyjádření někoho jiného? S panem Andrlem se očividně nedomluvím, mluví na mě cizí řečí.

Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
Kit+15
Guru
13. 9. 2014   #12
-
0
-

#11 ondrej39
S generováním PDF z PHP moc zkušeností nemám, také jsem většinou narazil na problémy s češtinou.

Windows-1250 není ISO, asi proto je to takové zmatené.

V odkazu na stackoverflow.com je skutečně napsáno "You can always encode characters using UTF-16BE", mělo by to tedy být v pořádku. Možná máš jen problém s fonty.

Pro konverzi by se měla dát použít funkce 

<?php
function convert($vstup) {
    return chr(0xFE) . chr(0xFF) .
        mb_convert_encoding($vstup, 'UTF-16BE', 'UTF-8');
}

... už kvůli pohodlí. Pokud ve vstupním textu nejsou závorky a zpětná lomítka, mělo by to fungovat.

Nejsem si však jist, že bych chtěl z PHP spouštět další program "pdftk". Našel jsem ještě pure generátor na http://www.tcpdf.org/ včetně fontů. Nezkoušel jsem.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ondrej39+1
Věrný člen
17. 9. 2014   #13
-
0
-

#12 Kit

Omlouvám se za pozdní odpověď, byl jsem mimo domov. Přímo .pdf generovat nechci, protože si docela potrpím na vzhledové stránce .pdf formuláře a nechci se otravovat to celé generovat.

Kite, nevíš, jestli může mít samotná proměnná v php blbě nastavené kódování? A může diakritiku ovlivnit kódování .php souborů? Aktuálně mám všechny nastaveny na UTF-8. Fonty boxů v .pdf souboru, které pomocí html formuláře vyplnit, normálně českou diakritiku podporují.

Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
Petr
~ Anonymní uživatel
746 příspěvků
16. 5. 2015   #14
-
0
-

Sice pozde, ale muze to nekomu pomoci. PDFTk server pri spojovani do formulare pomoci fill_form nepodporuje utf kodovani ma jen zakladnich 255 znaku. Popis je v viz http://stackoverflow.com/…tf8-problems

V odkazu je i uvedeno ze cinani/korejci k tomu utf16 dodelali, ale kdovi co do toho prilinkovali.

Nahlásit jako SPAM
IP: 94.112.108.–
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, 6 hostů

 

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