2

与将 SVG 转换为 PDF中的方法类似, svg2pdf 转换在 Windows 下成功运行,并且可以在生成的 pdf 中搜索文本项。它也在 linux (Ubuntu) 下生成 pdf(使用 -Djava.awt.headless=true 以避免由于缺少 X11 窗口服务器而导致的异常),但文本项不可搜索,有时甚至被编码为图像。

是否也可以在 linux 下保存 pdf 中的文本,我是否缺少一些运行时选项?

UPD:如果找不到某些字体,我可以以某种方式强制蜡染(SVGGraphics2D 或 SVGConverter)回退到默认字体吗?

4

4 回答 4

2

按照这里的食谱解决:

http://batik.2283329.n4.nabble.com/Placing-SVG-Text-into-PDF-td3778127.html

主要步骤:

  1. 用 ant all 编译 fop
  2. 将名为 pdf-transcoder.jar 的 fop-transcoder-allinone.jar 复制到类路径中
  3. 将 xmlgraphics-commons-1.4.jar 从 fop 的 lib 目录复制到类路径中
于 2012-02-17T11:14:41.520 回答
1

如果你想将一种字体从 Windows 复制到 Linux,你只需要将.ttf文件复制到正确的位置(注意:有些字体是受版权保护的,你需要获得安装它们的权限)。无需将它们放入某种注册表中。

要使它们在 Java 中可用,您有两种选择:

  1. JAVA_FONTS您可以在运行蜡染之前设置环境变量

  2. font.properties在目录中打开文件jre/lib,取消注释并设置为相应的字体目录:

    appendedfontpath=/usr/share/fonts/truetype
    
于 2012-02-20T13:35:14.683 回答
0

尝试为您要使用的字体添加定义(带有 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"

于 2014-04-25T11:43:07.507 回答
-1

安装 imagemagick。然后调用转换:

convert doc.svg doc.pdf

它将转换为PDF。

于 2012-02-16T14:20:00.557 回答