【问题标题】:batik: svg to pdf on linux (no X server)batik: svg to pdf on linux (no X server)
【发布时间】:2012-03-07 22:39:39
【问题描述】:

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

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

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

【问题讨论】:

  • 奇数。两台机器上的所有字体都可用吗?您尝试使用标准 PDF 字体(Times New Roman,...)还是使用自定义 TrueType 字体?
  • @AaronDigulla 我不控制字体,因为它们来自随机排序的 pptx 文件。循环为:pptx->svg_files->pdf_files->one_pdf_file。但字体可用性是我首先关心的问题。我可以以某种方式从 win->linux 框中复制字体吗?
  • 来自(@Rok Kralj 建议的)imagemagick 的 'identify -list format' cmd 我可以看到 TrueType 字体集合完全从我的 linux 机器中丢失了。这似乎是蜡染的问题
  • 我认为 AWT 不会将文本原语发送到 Batik 而是发送路径,这就是您找不到文本的原因。这样做的一个原因可能是确保所有系统上的外观相同,而字体(商业化)无法保证这一点。也许这种行为有一个 AWT 开关。
  • 这将有助于在 Linux 服务器和 java 应用程序中提供缺少的 TTF 字体:stackoverflow.com/questions/17993130/…

标签: java linux pdf svg batik


【解决方案1】:

按照这里的方法解决:

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 目录复制到类路径中

【讨论】:

    【解决方案2】:

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

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

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

    2. 打开jre/lib目录下的font.properties文件,取消注释并设置为合适的字体目录:

      appendedfontpath=/usr/share/fonts/truetype
      

    【讨论】:

    • 这真的很有帮助,非常感谢。我现在正在复制字体并将它们也包括在内,因为 linux 下的一些转换在字母之间有额外的空格
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      安装 imagemagick。然后调用convert:

      convert doc.svg doc.pdf
      

      这将转换为 PDF。

      【讨论】:

      • hm,转换产生不合格的绘图图元定义'Dialog'''@draw.c/DrawImage/3140。
      猜你喜欢
      • 2023-03-03
      • 2018-05-10
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 2020-02-06
      • 2014-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多