问题标签 [batik]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
786 浏览

xml - 为蜡染处理 SVG XML

我正在使用 Batik 来操作 SVG XML 并显示更改。然而,默认情况下,这涉及使用org.w3c.dom非常难以使用的东西。是否可以使用另一个 DOM 库来修改 XML,但它仍然可以与 Batik 一起使用?也许有一个包装器org.w3c.dom?我相信 DOM 表示中的对象实际上是 Batik 子类,所以我不能转换为另一个表示并返回,除非我想重新渲染整个 SVG。

0 投票
4 回答
3028 浏览

java - 蜡染: svg 到 linux 上的 pdf(无 X 服务器)

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

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

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

0 投票
1 回答
2289 浏览

java - DOM 更改后,如何使用 Batik 刷新/显示 SVG?

我在这里遵循了指导方针:http: //xmlgraphics.apache.org/batik/faq.html并通读了他们的邮件列表页面。我已经尝试了我能想到的一切。这是我要完成的一个非常简单的示例。布局管理器是:http: //java.sun.com/products/jfc/tsc/articles/tablelayout/或者您可以使用gridbag 或任何您喜欢的。XmlHelper 是内部库,您可以用自己的库替换。不包括在内以减少代码大小。

基本上在你点击“向上”按钮(更新的缩写)之后,它会修改 DOM 并添加一个新元素,但我没有看到 SVG 更新。

..

原始 SVG(用 AI 制作,我编辑了除文本元素外的所有内容):

上面的代码不包括写入文件 - 我已经排除了空间。按下 UP 按钮并写入文件(检查命名空间)后的 SVG。当按下“UP”按钮后写入文件时,这会产生 - 这对我来说看起来很完美。

谢谢您的帮助。哦,为了鼓励研究,以及人们花时间回答答案,我可能会等待大约 24 小时才能给出答案。因此,如果需要,请花点时间运行代码。

0 投票
0 回答
591 浏览

java - 如何使用蜡染在 SVG 图像中绘制简单的线条?

我有一个 SVG 图像,我想根据该图像上的一些坐标绘制一条简单的线。我想在 Java 中使用 Batik 来做到这一点,但不知道如何也找不到足够的文档。有人能帮我吗?

另外,如果您知道我可以使用任何其他 Java 库来实现这一点,请告诉我!

0 投票
1 回答
815 浏览

java - Batik - 计算三次样条的边界

我正在使用 Batik 处理 SVG 图像。具体来说,我有一个具有多种形状的场景,我需要能够将每个形状转换为单独的 BufferedImage。为此,我使用以下代码:

这是相当标准的。我启动 Batik 并让它解析 SVG 文件。这是将节点转换为图像功能:

这适用于矩形和直线形状,但不适用于样条曲线。对于样条线,边界大于渲染的样条线。我认为这是因为 getBounds 函数在边界计算中包含了控制点。我需要找到样条线的边界,即如果样条线被抚摸,我想找到该笔划的边界。我已经尝试了所有的 getBounds() 函数(getSensativeBounds、getGeometryBounds ...),它们都给了我相同的结果。所以我想知道我是否错过了什么?这是蜡染中的一个错误?或者如果有解决方法?

我想到的一种解决方法是获取形状的顶点列表并手动计算边界。但是,我一直无法找到如何获取轮廓顶点列表。

任何帮助将不胜感激。

0 投票
1 回答
517 浏览

svg - 沿 svg 路径以特定百分比放置对象?

目前我正在使用该<animateMotion>元素非常快速地将对象(由路径定义)设置为正确的结束位置。这在 Chrome 中显示正常,我没有努力让它与 Batik 一起使用。

但我很好奇:没有动画有没有更好的方法来做到这一点?只是沿着 a 的长度绘制它(比如 80%)<path>

0 投票
0 回答
291 浏览

java - 沿路径为 SVG 元素设置动画时出现蜡染错误

我得到一个 NullPointerException (被 Batik 捕获并吐出为“错误:n 尝试沿路径为元素设置动画。我已将其追踪到未创建的 Point2D,因为它位于 -0.3 * 路径长度。那是由于负时间步长而发生。

我想知道这是否在我的控制范围内?有人可以看看 XML 看看我是否搞砸了?

我简化了一些路径,但我试图沿路径动画到一定百分比,然后让它冻结:

0 投票
1 回答
1748 浏览

java - 使 JSVGScrollPane 中的 JSVGCanvas 与 SVGDocument 大小匹配

我在图表应用程序中显示我的 SVG 绘图时遇到问题。画布采用其父组件的大小,而不是它包含的文档。大于此大小的文档不会完全呈现。

案子

例如,我有一张 621x621 像素的绘图。

它没有 viewBox,因为它是动态创建的。当我创建文档时,我没有大小。

我有一个JSVGCanvas内部 a JSVGScrollPane,滚动窗格的父级比文档小,可以说它的 500x500 像素。

预期行为

当您启动应用程序时,可以看到适合 500x500 的绘图部分。底层文档更大,所以有滚动条允许我向左和向下滚动 121px。

当您增加框架的大小时,越来越多的绘图变得可见。当您将其增加到大于 620x620px 时,滚动条会完全消失。

如果再次使面板比文档小,滚动条会重新出现。

遇到的行为

当您启动应用程序时,可以看到适合 500x500 的绘图部分。没有可见的滚动条。

当您使面板变大时,画布会增加(其背景颜色),但绘图不会扩展到初始 500x500px 之外的部分。

当您将面板缩小时,假设为 400x400,滚动条会出现,但只允许我滚动 100 像素。所以画布仍然是最初的 500x500 而不是所需的 621x621。

例子

ScrollExample可以使用Batik 存储库和我在上面添加的 SVG 文件来重现遇到的行为。该示例使用 500x500px 的固定大小。

如果您将背景颜色添加到画布和滚动窗格,则整个框架都是蓝色的。因此,虽然画布确实增加了大小,但它不会绘制超出其初始大小的任何内容。

重新调整面板大小后,我可以重置文档。这使得它重新绘制绘图的可见部分,但滚动仍然无法按预期工作,因为画布仍然只是可见部分的大小而不是文档的大小。您可以通过将此侦听器添加到框架(或我想的任何其他面板)来测试这一点。

我已经读过我应该有一个 viewBox,但是我的文档经常重新创建(基于 modelchange 事件),当我创建文档时,我不知道如何获取 viewBox。SVGDocument.getRootElement().getBBox();通常给我null。当没有给出 viewBox 时,蜡染代码中应该有后备,所以我希望这是可选的。此外,当我在某处平移时,如果我更改文档,它应该保持这种平移。

我希望我能把我的问题说清楚。当我期望 JSVG 类提供开箱即用的所需行为时,我是否期望它们太多,或者我在这里遗漏了什么?有人可以指导我找到解决方案吗?

0 投票
1 回答
293 浏览

java - Batik 1.7 给出无头模式异常:NoClassDefFoundError: gnu/java/awt/peer/headless/HeadlessToolkit

我正在用 transcoder 实现 Batik-1.7。所以它给出的错误是:

错误:java.lang.NoClassDefFoundError:gnu/java/awt/peer/headless/HeadlessToolkit

谁能建议我如何在无头模式下使用转码器...

谢谢,

0 投票
1 回答
344 浏览

ant - Saxon 在安装 batik-rasterizer 后停止工作

有人可以帮我解决以下问题吗?

昨天我试图向我的 ANT 脚本(Windows XP,ANT 版本 1.8.2,主要是 XSLT 2.0,Saxon 9 简单地添加到我的 ant/lib)中添加一个进程,从而使用 Batik 的 rasterizertask 将 SVG 目录转换为 PDF。最初我在让 ANT 识别 rasterizertask 时遇到了很多麻烦,但是在从源代码重新安装 Batik 并在以下链接的帮助下,我能够让它工作。

https://mail-archives.apache.org/mod_mbox/xmlgraphics-batik-users/200605.mbox/%3C445B43B9.4010403@harcotechnology.com%3E

尽管这些说明没有说明这样做,但我发现我需要重新编译/重建 rasterizertask.jar。

附带说明一下,我还按照 Batik 官方网站上的建议,将 batik-rasterizer.jar 和 rasterizertask 类的路径添加到了我的 CLASSPATH 中。

瞧,我的光栅化任务正在工作。唉,我的 ANT 脚本中 rasterizertask 之后的所有 XSLT 2.0 任务都停止了工作。据我所知,我所做的某件事导致默认的 XSLT 处理器更改为 Xalan-j。Xalan 不支持我的大部分 XSLT。

例如,这是我从 Xalan 得到的错误(我知道为什么会收到这个错误,这就是我使用 Saxon 的原因):

我发现并试图强制 ANT 使用 Saxon 的所有方法(即,将 Saxon 添加到 CLASSPATH、xslt/factory)似乎导致调用 Saxon 而不是 Xalan,但现在我收到以下错误:

因此,如果我让 Xalan 进行处理,光栅化任务仍然有效,但我以前工作的 XSLT 不能,如果我使用 Saxon,则没有任何效果。我尝试安装 ANT 1.8.4,但得到了相同的结果。

我已经用尽了我找到的所有资源,包括该站点上的类似帖子,但所有解决方案似乎都指向我已经尝试过的事情。

希望这是足够的信息,有人可以给我一些建议或帮助。

谢谢,基思