Sto generando PDF utilizzando il plug-in di esportazione di Grails (fondamentalmente, Flying Saucer). La mia pagina GSP è una pagina UTF-8 (o almeno le proprietà mostrano che è UTF-8, anche all'inizio della pagina GSP c'è una direttiva <?xml version="1.0" encoding="UTF-8"?>
). Inizialmente il PDF generato conteneva correttamente i caratteri di umlaut "äöüõ", ma i caratteri cirillici mancavano dal PDF (non erano stati resi affatto). Poi ho cambiato il mio file css come descritto nella documentazione con l'aggiunta seguente:Tipo di carattere Flying Saucer per caratteri 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 è anche distribuito al server. Ma ora sto ottenendo sia caratteri di umlaut che caratteri cirillici resi come scatole. Se sto cambiando il valore della proprietà codifica -fs-pdf in Identity-H, i caratteri di umlaut sono resi correttamente, ma i caratteri cirillici sono resi come punti interrogativi.
Qualche idea su quale tipo di carattere può essere utilizzato per il rendering corretto di umlaut e caratteri cirillici? O forse il mio CSS è in qualche modo sbagliato? Qualsiasi suggerimento sarebbe molto apprezzato.
Upd 1: Ho anche provato seguente CSS (che è stato generato da 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';
}
Ho aggiunto <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
Sono stato anche cercando di eseguire graal con -Dfile.encoding = UTF-8, come menzionato qui: http://grails.1312388.n4.nabble.com/PDF-plugin-Having-problems-with-instalation-td2297840.html, ma nulla aiuta. I caratteri cirillici non sono mostrati affatto. Qualche altra idea quale potrebbe essere il problema?
* BTW: * Sto Packaging mia PDF come zip e l'invio di nuovo al browser nella risposta del genere:
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()
ho bisogno di prendere in considerazione in qualche modo la codifica mentre lampo ????, che faccio così:
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();
}
Se il tipo di contenuto definito come UTF-8 come bene? –
Intendi il tipo di contenuto HTML? –