У меня есть SVGDocument
, который я программно получил как byte[]
из соединения с базой данных. Элемент <svg>
содержит правильный атрибут viewBox
, который покрывает часть SVGDocument
, которую существующий процесс должен отобразить как PDF.
Используя следующий (простой) код, я смог проверить правильность установки свойств viewBox
:
Element rootElement = svgDocument.getRootElement();
String viewBox = rootElement.getAttribute("viewBox");
log.debug("viewBox={}", viewBox);
// viewBox=-612 0 1224 792
Моя цель - использовать метод Batik getEnclosureList()
для получения NodeList
и построения нового (обрезанного) SVGDocument
, который я могу отправить в устаревший процесс, который будет отображать PDF.
Код, который я пытался использовать, указан ниже:
SVGRect rectangle = svgDocument.getRootElement().createSVGRect();
rectangle.setX(minX); // -612
rectangle.setY(minY); // 0
rectangle.setWidth(startingX); // 1224
rectangle.setHeight(startingY); // 792
NodeList croppedNodes = svgDocument.getRootElement().getEnclosureList(rectangle, null);
Моя проблема в том, что SVGSVGContext
является нулевым, когда я использую этот подход.
Мои попытки найти способ установки SVGSVGContext
не увенчались успехом, поэтому я решил опубликовать свою проблему здесь.
Я не продаюсь при использовании Apache Batik для этого решения, но похоже, что метод getEnclosureList()
может вернуть именно то, что мне нужно для завершения моей задачи.