Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java iText 7 SVG作为背景_Java_Svg_Itext7 - Fatal编程技术网

Java iText 7 SVG作为背景

Java iText 7 SVG作为背景,java,svg,itext7,Java,Svg,Itext7,我正在尝试使用可缩放矢量图形(.svg)在PDF中添加背景。最初,推荐的方法是将SVG转换为图像对象,然后使用scaleToFit将其调整到正确的大小,然后将其添加到文档中。这在一定程度上起作用,因为它将小型可伸缩SVG转换为位图。接下来,我制作了一个PdfFormXObject,通过在每页上绘制它来恢复缩放。但是,现在它根本不显示任何内容 ByteArrayInputStream inputStream = new ByteArrayInputStream(backgroundBytes);

我正在尝试使用可缩放矢量图形(.svg)在PDF中添加背景。最初,推荐的方法是将SVG转换为图像对象,然后使用scaleToFit将其调整到正确的大小,然后将其添加到文档中。这在一定程度上起作用,因为它将小型可伸缩SVG转换为位图。接下来,我制作了一个PdfFormXObject,通过在每页上绘制它来恢复缩放。但是,现在它根本不显示任何内容

ByteArrayInputStream inputStream = new ByteArrayInputStream(backgroundBytes);
PdfFormXObject svg = SvgConverter.convertToXObject(inputStream, pdf);
PdfCanvas canvas = new PdfCanvas(pdf.getFirstPage());
Rectangle rect = new Rectangle(PageSize.A4.getWidth(), PageSize.A4.getHeight());
canvas.addXObject(svg, rect);
如何将SVG背景添加到iText 7 PDF?这件事一开始能做好吗?我没有找到好的代码示例

更新:

下面是将SVG转换为适当缩放图像的代码。这样做的问题是,它可以用于添加图像,但它将图像添加为一个元素,因此它会向下推其他所有内容

ByteArrayInputStream inputStream = new ByteArrayInputStream(svgAsBytes);
Image image = SvgConverter.convertToImage(inputStream, pdf);
image.scaleAbsolute(PageSize.A4.getWidth(), PageSize.A4.getHeight());
int totalPages = pdf.getNumberOfPages()+1;
for(int pageNumber = 1; pageNumber < totalPages; pageNumber++ ) {
    document.add(image);
}
ByteArrayInputStream inputStream=newbytearrayinputstream(svgAsBytes);
Image Image=SvgConverter.convertToImage(inputStream,pdf);
scaleAbsolute(PageSize.A4.getWidth(),PageSize.A4.getHeight());
int totalPages=pdf.getNumberOfPages()+1;
对于(int pageNumber=1;pageNumber
嗨,我也有类似的问题。我试图添加一个SVG图像作为表格单元格背景。问题是我无法缩放图像。这是我的密码:

InputStream triangleSteam = this.getClass().getResourceAsStream("/AH-AddressTriangle.svg");
Image triangle = SvgConverter.convertToImage(triangleSteam, pdfDocument);
//triangle.setHeight(UnitValue.createPointValue(127.83f));
//triangle.setWidth(UnitValue.createPointValue(78.63f));
triangle.scaleAbsolute(78.63f, 127.83f);

Cell headerCell_12 = new Cell();
headerCell_12.setBorder(Border.NO_BORDER);
headerCell_12.setPadding(0f);
headerCell_12.setHeight(UnitValue.createPointValue(127.83f));
headerCell_12.setWidth(UnitValue.createPointValue(78.63f));
headerCell_12.setNextRenderer(new ImageBackgroundCellRenderer(headerCell_12, triangle));
headerTable.addCell(headerCell_12);
下面是我使用的背景:

protected class ImageBackgroundCellRenderer extends CellRenderer {
    Image img;

    public ImageBackgroundCellRenderer(Cell modelElement, Image img) {
        super(modelElement);
        this.img = img;
    }

    @Override
    public IRenderer getNextRenderer() {
        return new ImageBackgroundCellRenderer((Cell) modelElement, img);
    }

    @Override
    public void draw(DrawContext drawContext) {
        try {
            img.scaleToFit(getOccupiedAreaBBox().getWidth(), getOccupiedAreaBBox().getHeight());
            drawContext.getCanvas().addXObject(img.getXObject(), getOccupiedAreaBBox());
            super.draw(drawContext);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}
添加了背景,但图像没有缩放(见图)

SVG变得比实际更大


谢谢大家!

嗨,在不同的用例中,添加图像作为背景实际上意味着不同的事情。如果图像小于画布的空间,是否要平铺背景,是否要拉伸图像,还是完全不做任何事情,只将图像放置在画布上?请附上所需行为和您描述为“破坏缩放”的行为的屏幕截图。否则很难理解您真正想要实现的是什么我有一个SVG,它覆盖一个A4大小的页面,我想在每个页面上重复它作为背景。转换时,我最初使用了PageSize.A4的宽度和高度,但这不起作用。然后我使用scaleToFit使它成为一个图像,但将它添加到页面会向下推所有其他元素。最好我不会将其转换为图像,而将其保留为SVG。您是自己生成整个文档,还是修改现有文档并在其中添加背景图像?在代码示例中,您有
document
实例,但重要的是要知道如何创建它,以及基础
PdfDocument
是仅使用reader and writer还是writer创建的。示例仅使用了new PdfDocument()。在此之前,我尝试了带有html模板的iText 7 pdfHtml模块,但根本不起作用,因为90%的css被忽略,所以我尝试了iText 7。似乎它需要对PDF标准和iText 7本身有广泛的了解,才能完成简单的工作,因此它不可维护,因此不幸的是,我的公司不能选择它。如果将来有人能找到一个合理的答案,我会把这个问题留待讨论。