Батик: 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

основные шаги:

  1. скомпилировать фоп с муравьем все
  2. скопируйте fop-transcoder-allinone.jar под именем pdf-transcoder.jar в путь к классам
  3. скопируйте xmlgraphics-commons-1.4.jar из каталога lib fop в путь к классам

Если вы хотите скопировать шрифт из Windows в Linux, вам нужно только скопировать .ttf файл в нужное место (примечание: некоторые шрифты защищены авторским правом, и вам нужно разрешение для их установки). Нет необходимости вносить их в какой-то реестр.

Чтобы сделать их доступными в Java, у вас есть два варианта:

  1. Вы можете установить переменную среды JAVA_FONTS перед запуском батик

  2. открыто 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.

Другие вопросы по тегам