2012-08-08 20 views
17

Estoy usando wkhtmltopdf para exportar páginas html a pdf, pero parece que tiene un problema con los caracteres checos ... cargo todo html en variable, luego cambio la codificación y ejecuto wkhtmltopdf de esta manera:wkhtmltopdf - número de codificación

$html = ob_get_clean(); 
$html = iconv("UTF-8","Windows-1250", $html); 
file_put_contents('../export.php', $html); 

$commandString = WKHTML_LIB.'http://www.estiroad.com/export.php sestava.pdf'; 
exec($commandString); 

el archivo .html tiene la codificación correcta, pero incluso cuando establece --encoding ventanas-1250 parámetro en cadena de comando, es sólo que no trabaja ... Gracias por cualquier idea ...

EDITAR : ¡Resolví el problema! La captura fue en WKHTML_LIB constante, lo que he definido en el comienzo de la página:

define('WKHTML_LIB', "../wkhtmltopdf/wkhtmltopdf-amd64"); 

que acabo de escribir la ruta directamente a la exec(); comando y ahora funciona incluso con las banderas. Lo siento por que molestarse con semejante trivialidad ... Ahora la línea $ commandString se parece a esto:

$commandString = '"../wkhtmltopdf/wkhtmltopdf-amd64" --print-media-type --page-size A4 -R  50 --encoding windows-1250 --header-html header.html --margin-top 10mm --margin-bottom 10mm --margin-left 10mm --margin-right 10mm http://www.estiroad.com/export.php sestava.pdf'; 
+0

¿Debería haber un espacio antes de http? 'WKHTML_LIB.'http: /' – Cups

+0

No debería, pero no tiene efecto si está allí o no ... El comando se ejecuta sin problemas, se genera el pdf, pero está codificado incorrectamente ... Por ejemplo, en lugar de "ř "there is" ø "... –

+0

Lo siento, comentario eliminado ... – Cups

Respuesta

5

He resuelto el problema! La captura fue en WKHTML_LIB constante, lo que he definido en el comienzo de la página:

define('WKHTML_LIB', "../wkhtmltopdf/wkhtmltopdf-amd64"); 

que acabo de escribir la ruta directamente a la exec(); comando y ahora funciona incluso con las banderas. Lo siento por que molestarse con semejante trivialidad ... Ahora la línea $ commandString se parece a esto:

$commandString = '"../wkhtmltopdf/wkhtmltopdf-amd64" --print-media-type --page-size A4 -R  50 --encoding windows-1250 --header-html header.html --margin-top 10mm --margin-bottom 10mm --margin-left 10mm --margin-right 10mm http://www.estiroad.com/export.php sestava.pdf'; 
+0

Posiblemente en la solución original faltaban las comillas dentro de las comillas, por lo que aparecen cuando se insertan en la cadena de comandos. Me gusta '' algún camino con espacios y cosas ''. – userfuser

0

He tenido un problema similar con wkhtmltopdf antes, donde los caracteres chinos no se prestan adecuadamente. He resuelto el problema instalando las fuentes chinas apropiadas.

Por casualidad, ¿tiene que instalar cualquier tipo de letra relacionada con el idioma checo para que los caracteres se procesen correctamente? Como no estoy familiarizado con los caracteres/fuentes checos, no estoy seguro de si esto aplica. Espero que esto ayude.

+0

Creo que esto no ayudará ... Casi todas las fuentes que he instalado admiten caracteres checos y, además, esto no resolvería el problema si el usuario distante quisiera mostrar el pdf ...:/ –

+0

BTW: special checo los caracteres son: ť, ď, ň,,,,,,,,, š,,,,, ð, ž, ý, á, í, é, ú, ů. –

+0

¿Hay alguna razón por la que deba convertir a codificación de UTF-8 a Windows-1250? Además, quizás intente usar iconv con // IGNORE adjuntado al parámetro out_charset. Tal vez también le demos una oportunidad a mb_convert_encoding. –

0

Justo ahora hice una prueba con los personajes que me proporcionó y me funcionan bien. Win7, wkhtmltopdf 0.11.0 rc2. Funciona en portada, toc, marcadores, contenido y encabezados. También probado con caracteres coreanos y chinos e incluso ellos trabajan.

PDF generado usando (ubicaciones de los archivos eliminados) --print-media-type --page-size A5 --header-html header.html --footer-html footer.html --margin-bottom 10mm --margin-top 10mm --margin-left 10mm --margin-right 10mm cover cover.html toc --xsl-style-sheet tocfile.xsl temp.html temp.pdf

temp.html es XHTML extremadamente válida, primera línea dice <?xml version="1.0" encoding="iso-8859-1"?>. El archivo temp.html se escribió en el disco con C# usando UTF-8 y funciona. Realmente sugiero usar UTF-8 siempre que sea posible.

Screenshot of generated PDF

+0

He intentado su comando, pero simplemente no funciona: (Es como los parámetros agregados fueron ignorados ... incluso si cambio, por ejemplo, el valor marginal superior, no tiene efecto. –

+0

Hmm, acabo de probar nuevamente y cambié mi margen de 10 mm a 20 mm y funcionó. ¿Podría publicar los contenidos de '$ commandString' y su fuente HTML en alguna parte para que yo pueda probar usando exactamente sus materiales? Una cosa para intentar sería usar wkhtmltopdf directamente y no desde php. Si puede dar la fuente y el comando exacto, intentaré replicar el problema aquí. – Nenotlep

+0

Ahora traté de ejecutarlo directamente y las banderas están funcionando, incluso la codificación funciona ... ¿Alguna idea de cómo podría forzarla a ejecutar desde PHP? No puedo ejecutarla directamente porque necesito que todos los usuarios puedan o generar PDF con un clic y no descargar wkhtml ... –

42

Para futuras consultas:

tuve el mismo problema con diéresis alemanas.

Tan pronto como añade

<meta charset="UTF-8" /> 

a la página HTML se solucionó el problema.

Eso, por supuesto, presupone que su página se sirve como utf-8.

+1

Tan feliz que esto es lo primero que leo mientras resuelvo mi problema: D – joevallender

Cuestiones relacionadas