Батик: SVG в PDF на Linux (без X-сервера)
Подобно подходу в Convert SVG to PDF, преобразование svg2pdf успешно выполняется под окнами, и текстовые элементы доступны для поиска в полученном PDF. Он также создает pdfs (с -Djava.awt.headless=true, чтобы избежать исключений из-за отсутствия оконного сервера X11) в Linux (Ubuntu), но текстовые элементы не доступны для поиска, а иногда даже кодируются как изображения.
Возможно ли сохранить текст в pdf под linux, я пропускаю некоторые параметры времени выполнения?
UPD: Могу ли я заставить батик (SVGGraphics2D или SVGConverter) использовать шрифт по умолчанию, если определенный шрифт не был найден?
4 ответа
Решено, следуя рецепту здесь:
http://batik.2283329.n4.nabble.com/Placing-SVG-Text-into-PDF-td3778127.html
основные шаги:
- скомпилировать фоп с муравьем все
- скопируйте fop-transcoder-allinone.jar под именем pdf-transcoder.jar в путь к классам
- скопируйте xmlgraphics-commons-1.4.jar из каталога lib fop в путь к классам
Если вы хотите скопировать шрифт из Windows в Linux, вам нужно только скопировать .ttf
файл в нужное место (примечание: некоторые шрифты защищены авторским правом, и вам нужно разрешение для их установки). Нет необходимости вносить их в какой-то реестр.
Чтобы сделать их доступными в Java, у вас есть два варианта:
Вы можете установить переменную среды
JAVA_FONTS
перед запуском батикоткрыто
font.properties
файл вjre/lib
каталог, uncommnent и установите соответствующий каталог шрифтов:appendedfontpath=/usr/share/fonts/truetype
Попробуйте добавить определения (с URL) для тех шрифтов, которые вы хотите использовать:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="745" height="300" xml:space="preserve" xmlns:xml="http://www.w3.org/XML/1998/namespace">
<desc>TEST</desc>
<defs>
<style type="text/css">
@font-face {
font-family: "font";
src: url('COMPLETE URL TO TTF FILE eg. http://example.com/font.ttf') format('truetype');
}
</style>
</defs>
<g transform="translate(174.5 53)">
<text font-family="font" font-size="40" font-weight="normal" style="stroke: none; stroke-width: 1; stroke-dasharray: ; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: #333; opacity: 1;" transform="translate(-98.5 39)">
<tspan x="0" y="-26" fill="#333">TEXT THAT YOU WANT TO DISPLAY</tspan>
</text>
</g>
</svg>
У меня такая же проблема. Одна вещь, которую я забыл в svg, была type = "text / css".
Установить imagemagick. Затем вызовите convert:
convert doc.svg doc.pdf
который будет конвертировать в PDF.