标签: batik

如何将多个矩形合并为一个多边形

我在工作中正在努力完成这部分任务。我故意不详细说明工作任务的背景,以尽量将注意力集中在问题上。我必须将矩形合并为单个多边形,如附图所示,但我需要点列表,以便我可以将它们写入 Swing 画布的多边形形状(DOM 对象),然后导出 SVG。

在此输入图像描述

我知道每个矩形的原点,即左上角的x和y坐标(float x,float y)以及每个矩形的宽度(float)和高度(float),因此我可以计算出所有四个矩形的坐标每个矩形的角,即顶部、右侧、底部、左侧,即顶部 = 原点 = x, y,右侧 = x + 宽度,底部 = x + 宽度,y + 高度,左侧 = x, y + 高度。

我有一个List<Rectangle> rectangles并且想要一个算法,它将将此列表转换为单个多边形(List<Points>其中一个点代表每个点的坐标(x,y),如标记为红色“x”的图中所示。

然后,我将使用这个点列表在 DOM 中写出一个元素,以便最终在 SVG 中打印网页。所以,我的最终结果必须是一个点列表(即用于在 SVG 中构造多边形形状的 x,y 坐标)。

我确实看到了这个答案,它做了类似的事情,但我不确定是否可以将其应用到我的情况 - 而且它是用Python而不是Java编写的:Merging multiple相邻矩形到一个多边形

java algorithm geometry svg batik

6
推荐指数
1
解决办法
3098
查看次数

FOP 蜡染 NoClassDefFoundError: org/apache/batik/bridge/UserAgent

我不使用maven、pom 或任何东西。我只有简单的测试类进行测试,我只是尝试将 XSL-FO 转换为 PDF,但出现此错误。代码很简单:

package testing;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream; 

import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.sax.SAXResult; 

import javax.xml.transform.Result; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.stream.StreamSource; 

import org.apache.fop.apps.Fop; 
import org.apache.fop.apps.FopFactory; 

import org.apache.xmlgraphics.util.MimeConstants;


    public class test {

    public static void main(String[] args) {
        String pth="C:/Temp/";
        FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());
        TransformerFactory factory = TransformerFactory.newInstance();
        OutputStream out;
        try
        {   
        out = new BufferedOutputStream(new FileOutputStream(new File(pth+"myfile.pdf")));

        InputStream in = new FileInputStream(pth+"everything.fo");

        Source source = null;
        Transformer transformer = …
Run Code Online (Sandbox Code Playgroud)

xsl-fo batik apache-fop

6
推荐指数
1
解决办法
1万
查看次数

学习使用Java Batik Library的资源和教程

我正在使用Batik库,这对于在Java中显示SVG图形非常有用.对于显示和呈现SVG文档的基本用例,使用起来非常简单.但是,我想做一些其他高级图形处理,我正在努力,因为我找不到任何可以让我执行以下类型任务的好资源:

  • 检测鼠标下的组件
  • 通过id获取组件并更改用于渲染的颜色
  • 操纵组件
  • 添加新组件
  • 检测鼠标对组件的点击

有没有什么好的资源或技巧可以使用你知道的这个库?

java batik

5
推荐指数
2
解决办法
7897
查看次数

使用带有元素的另一个svg图像创建一个嵌入了base64字符串的SVG图像

我有一个SVG文件,其中包含几个元素(如路径,圆形,矩形等).

我想将该SVG文件转换为具有嵌入式base64数据而非多个元素的SVG.可以用Batik做到吗?

我正在处理的项目要求我只使用Java库.

java svg batik

5
推荐指数
1
解决办法
7024
查看次数

如何在Java中有效地绘制SVG图像?

参考: 旋转BufferedImage时如何产生清晰的绘画效果?

在引用的问题中,我询问了关于光栅化图像变换的质量.有人建议我应该使用SVG图像,因为转换的质量会更高,更灵活.(这是对的,是吗?)

所以我花了很多时间试图弄清楚如何使用Batik库,阅读他们的API和谷歌搜索,看看其他人是否有同样的问题.

到目前为止,我没有遇到任何重大问题,所以我希望有人可以帮助我.这实际上是我想做的事情:

与使用BufferedImages的AffineTransform和Graphics2D的drawImage(...)类似,
是否可以(以及如何)转换然后将SVG图像/对象绘制到JPanel上?

在我想要绘制它之前我在思考,我可以先根据AffineTransform对象以某种方式对其进行栅格化,然后使用Graphics2D绘制它,但如果我每次都要在绘制图像之前进行栅格化...肯定会有更好的效果做法.

所以经过深思熟虑,我想知道SVG是否真的是这样的方式.那么我应该采取的最佳方法是什么?
光栅化与矢量图像.

注意:创建SVG文件根本不是问题.

谢谢.

java svg batik

5
推荐指数
1
解决办法
3647
查看次数

使用Batik的文本元素的边界框的错误值

我正在尝试使用getBBox()在文本元素周围绘制一个矩形,代码非常简单,创建文档,添加文本元素,启动文档和添加矩形.问题是getBBox返回一些奇怪的值,我错过了什么?

DOMImplementation impl;
String svgNS;
SVGDocument doc;
Element svgRoot;

UserAgent userAgent;
DocumentLoader loader;
BridgeContext ctx;
GVTBuilder builder;
GraphicsNode rootGN;

...

// get a DOM and create a document
impl = SVGDOMImplementation.getDOMImplementation();
svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
doc = (SVGDocument)impl.createDocument(svgNS, "svg", null);

// Get (the 'svg' element).
svgRoot = doc.getDocumentElement();

// Set the width and height attributes on the root 'svg' element.
svgRoot.setAttributeNS(svgNS, "width", "400");
svgRoot.setAttributeNS(svgNS, "height", "450");

// Add a text element
Element txtElem = doc.createElementNS(svgNS, "text");
txtElem.setAttributeNS(svgNS, "x", "30");
txtElem.setAttributeNS(svgNS, "y", …
Run Code Online (Sandbox Code Playgroud)

java svg batik

5
推荐指数
1
解决办法
2395
查看次数

如何找到包org.w3c.dom.svg?

我似乎找不到它,Netbeans 说该包不存在?我必须获得哪个 jar 才能获得包 org.w3c.dom.svg?我正在使用蜡染 SVG

batik

5
推荐指数
1
解决办法
9734
查看次数

使用Batik从SVG中使用XPath获取特定元素

我正在尝试通过Batik从SVG文档中找到一些元素。

这是我正在使用的示例SVG文档:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<svg
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   version="1.0"     
   width="400"
   height="300"
   viewBox="0 -100 400 300"
   preserveAspectRatio="none"
   id="svg2">

  <g id="blubb">
   <line x1="0" y1="0" x2="40" y2="120" stroke="red" stroke-width="3"/>
   <text class="hurz" x="50" y="150">HURZ!</text>
  </g>
</svg>
Run Code Online (Sandbox Code Playgroud)

我试图找到所有text带有class属性的元素hurz

这是一个示例代码:

import java.awt.*;
import java.io.*;
import javax.swing.*;
import org.apache.batik.swing.*;
import org.apache.batik.swing.gvt.*;
import org.w3c.dom.*;
import org.w3c.dom.svg.*;
import org.w3c.dom.xpath.*;

public class XPathTest extends JFrame {
  private final JSVGCanvas c= new JSVGCanvas();


  public XPathTest(){
    this.setLayout(new GridLayout());
    this.add(c);

    c.setURI(new File("/tmp/bla.svg").toURI().toString());

    c.addGVTTreeRendererListener(new GVTTreeRendererAdapter() {
      @Override
      public void …
Run Code Online (Sandbox Code Playgroud)

java xpath svg batik

5
推荐指数
1
解决办法
2306
查看次数

如何将SVG图像添加到使用HTML和Flying Saucer库(和Batik)构建的PDF中?

我正在使用飞碟库(旧但开源)使用XHTML生成PDF。我可以正常工作,但我也想添加SVG图像。Ive开始着手整合蜡染以尝试使其正常工作,但我遇到了问题。未绘制SVG图像。XHTML仍会渲染,但似乎没有显示SVG。我已经将SVG渲染为单独的PDF,但从未与飞碟的结果一起使用。我添加了通常的ReplacedElementFactory(它也可用于常规图像,但尚未包含该代码)。唯一相关的方法(确实会调用所有方法)如下:

@Override
public ReplacedElement createReplacedElement(LayoutContext layoutContext, BlockBox blockBox, UserAgentCallback userAgentCallback, int cssWidth, int cssHeight) {
    Element element = blockBox.getElement();
    if (element == null) {
        return null;
    }
    String nodeName = element.getNodeName();
    if ("img".equals(nodeName)) {
        SAXSVGDocumentFactory factory = new SAXSVGDocumentFactory(XMLResourceDescriptor.getXMLParserClassName());

        SVGDocument svgImage = null;
        try {
            svgImage = factory.createSVGDocument(new File("logo.svg").toURL()
                    .toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
        Element svgElement = svgImage.getDocumentElement();
        Document htmlDoc = element.getOwnerDocument();
        Node importedNode = htmlDoc.importNode(svgElement, true);
        element.appendChild(importedNode);
        return new SVGReplacedElement(svgImage, cssWidth, cssHeight);
    }
    return this.superFactory.createReplacedElement(layoutContext, blockBox, …
Run Code Online (Sandbox Code Playgroud)

java svg pdf-generation batik flying-saucer

5
推荐指数
1
解决办法
3106
查看次数

使用 Batik 的 SVGGraphics2D 时,如何设置字体系列而不是字体?

我目前使用 Batik 的 SVGGraphics2D 有以下代码:

...
final SVGGraphics2D svgGraphics2D = new SVGGraphics2D(svgGeneratorContext, false);
svgGraphics2D.setSVGCanvasSize(new Dimension(width, height));
svgGraphics2D.setFont(font);
...
Run Code Online (Sandbox Code Playgroud)

因此,如果在执行代码的系统上font可用Font,则将正确的属性添加到生成的 SVG 文件中。

但是,如果缺少字体(例如 Linux 机器上的“Verdana”),则会使用(font-family:'Dialog'添加)默认字体。

因此,我想传递一个字体系列而不是指定字体,以便font-family="DejaVu Sans,Verdana,Geneva,sans-serif"在生成的 SVG 中使用。知道如果我没有错,API 只接受Font参数,我怎么能做到这一点?

我希望有比使用 xslt 转换 xml 输出更简单的方法。

先感谢您。

java batik

5
推荐指数
1
解决办法
1042
查看次数