Раньше я публиковал
PDF из карты GeoServer с русским текстом, как сделать русский текст в PDF через
print.pdf. А теперь потребовалось сделать тоже самое через
create.json. Причём HTTP POST запрос формируется на сервере приложения, и всё описанное уже не работает! Теперь нужно всё делать заново. У нас разрабатывается приложение, которое на стороне клиента создаёт бин
printBean. Выглядит это так:
Все данные поступают на сервер. Там формируется
POST запрос к геосерверу через
create.json. Все строки передаются в
UTF-8. Но модуль печати по-умолчанию применяет
ANSI с кодировкой
Cp1252! В предыдущем
посте описано, что мы используем на геосервере
TTF с кириллицей. Так что можно обмануть плагин, чтобы не лезть в его исходники и ничего не менять.
Перед передачей json на геосервер я применил для параметров, содержащих русский текст, следующую функцию
private static String encodeToAnsi(String source) {
return new String(source.getBytes(Charset.forName("cp1251")), Charset.forName("cp1252"));
}
Всё просто. При формировании json вызывается эта функция в нужных местах:
JSONObject spec = new JSONObject();
spec.put("header", encodeToAnsi(printBean.getHeader()));
spec.put("footer", encodeToAnsi(printBean.getFooter()));
И вот вам результат:
Текст отображается кириллицей! Несмотря на то, что послан был в кодировке
Cp1252:
{"footer": "Íèæíèé",
"layout": "A4 portrait",
"pages": [{"bbox": [3815,6450,7278,8756]}],
"layers": [{
"layers": ["egko","troad_direction"],
"opacity": 1,
"baseURL": "http://localhost:8080/geoserver/wms",
"styles": ["",""],
"singleTile": true,
"format": "image/png",
"type": "WMS"
}],
"srs": "EPSG:60000",
"dpi": 100,
"header": "Âåðõíèé",
"units": "m"
}
Комментариев нет:
Отправить комментарий