Estoy generando PDF utilizando el complemento de exportación Grails (básicamente, Flying Saucer). Mi página GSP es una página UTF-8 (o al menos las propiedades muestran que es UTF-8, también en el comienzo de la página GSP hay una directiva <?xml version="1.0" encoding="UTF-8"?>
). Al principio, el PDF generado contenía correctamente caracteres umlaut "äöüõ", pero los caracteres cirílicos faltaban en PDF (no se representaba en absoluto). A continuación, he cambiado mi archivo css como se describe en la documentación mediante la adición siguiente:Fuente Flying Saucer para caracteres Unicode
@font-face {
src: url(ARIALUNI.TTF);
-fs-pdf-font-embed: embed;
-fs-pdf-font-encoding: UTF-8;
}
body {
font-family: "Arial Unicode MS", Arial, sans-serif;
}
ARIALUNI.TTF también se implementa en el servidor. Pero ahora estoy obteniendo ambos personajes umlaut y caracteres cirílicos representados como cuadros. Si cambio el valor de la propiedad de codificación -fs-pdf a Identity-H, los caracteres umlaut se representan correctamente, pero los caracteres cirílicos se representan como signos de interrogación.
¿Alguna idea de qué tipo de letra se puede utilizar para representar correctamente los caracteres umlaut y cirílico? O puede ser que mi CSS sea de alguna manera incorrecta? Cualquier sugerencia sería muy apreciada.
UPD 1: también he intentado siguiente CSS (que fue generado por http://fontface.codeandmore.com/):
@font-face {
font-family: 'ArialUnicodeMS';
src: url('arialuni.ttf');
src: url('arialuni.eot?#iefix') format('embedded-opentype'),
url('arialuni.woff') format('woff'),
url('arialuni.ttf') format('truetype'),
url('arialuni.svg#arialuni') format('svg');
font-weight: normal;
font-style: normal;
-fs-pdf-font-embed: embed;
-fs-pdf-font-encoding: UTF-8;
}
body {
font-family:'ArialUnicodeMS';
}
He añadido <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
También estaba tratando de ejecutar griales con -Dfile.encoding = UTF-8, como se mencionó aquí: http://grails.1312388.n4.nabble.com/PDF-plugin-Having-problems-with-instalation-td2297840.html, pero nada ayuda. Los caracteres cirílicos no se muestran en absoluto. Cualquier otra idea, ¿cuál podría ser el problema?
* Por cierto: * Estoy envasado mi PDF como postal y enviarla de vuelta al navegador en la respuesta de esa manera:
response.setHeader "Content-disposition", "attachment; filename=test.zip"
response.setHeader "Content-Encoding", "UTF-8"
response.contentType = 'application/zip'
response.outputStream << zip
response.outputStream.flush()
response.outputStream.close()
¿Es necesario considerar alguna forma de codificación, mientras que comprimir ????, lo que me gusta que:
public static byte[] zipBytes(Map<String, ByteArrayOutputStream> fileNameToByteContentMap) throws IOException {
ByteArrayOutputStream zipBaos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(zipBaos);
fileNameToByteContentMap.eachWithIndex {String fileName, ByteArrayOutputStream baos, i ->
byte[] content = baos.buf
ZipEntry entry = new ZipEntry(fileName)
entry.setSize(content.length)
zos.putNextEntry(entry)
zos.write(content)
zos.closeEntry()
}
zos.close()
return zipBaos.toByteArray();
}
Si el tipo de contenido define como UTF-8, así? –
¿Te refieres al tipo de contenido HTML? –