Flying Saucer шрифт для символов юникода
Я генерирую PDF с помощью плагина экспорта Grails (в основном, Flying Saucer). Моя страница GSP - это страница UTF-8 (или, по крайней мере, свойства показывают, что это UTF-8, также в начале страницы GSP есть<?xml version="1.0" encoding="UTF-8"?>
Директива). Сначала созданный PDF-файл правильно содержал символы умлаута «& # xE4; & # xF6; & # xFC; & # xF5;», но кириллические символы отсутствовали в PDF (не отображались вообще). Затем я изменил свой CSS-файл, как описано в документации, добавив следующее:
@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 также развернут на сервере. Но теперь я получаю и символы умлаута, и символы кириллицы, которые отображаются в виде блоков. Если я изменяю значение свойства -fs-pdf-encoding на Identity-H, то символы умлаута отображаются правильно, а кириллические символы - в виде вопросительных знаков.
Какие-нибудь идеи о том, какой шрифт можно использовать для правильного отображения символов умляута и кириллицы? Или может быть мой CSS как-то не так? Любые советы будут высоко оценены.
Upd 1: Я также попытался после CSS (который был сгенерирован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';
}
Я добавил<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
Я также пытался запустить Grails с -Dfile.encoding = UTF-8, как было упомянуто здесь:http://grails.1312388.n4.nabble.com/PDF-plugin-Having-problems-with-instalation-td2297840.html, но ничего не помогает. Кириллические символы не отображаются вообще. Любые другие идеи, в чем может быть проблема?
*BTW:* Я упаковываю свой PDF как zip и отправляю его обратно в браузер в ответ на это:
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()
Нужно ли мне каким-то образом учитывать кодирование при архивировании ????, что я делаю так:
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();
}