【发布时间】:2021-03-14 10:26:35
【问题描述】:
我正在为 PDF 页面添加 SVG 图像。
首先,我尝试了 SvgConverter.createPDF 来检查 iText 是否适用于 SVG。
有些 svg 很好。 不幸的是,以下 SVG(使用百分比位置)在 PDF 中未正确显示/定位。
我的转换代码
String svgImage = resourceFile("svg/circle-sRGB-rgb.svg");
String destination = targetFile("svg-itext_SVG2PDF.pdf");
try(InputStream svgStream = new FileInputStream(new File(svgImage))) {
try(OutputStream pdfStream = new FileOutputStream(new File(destination))) {
SvgConverter.createPdf(svgStream, pdfStream);
}
}
SVG 文件
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 80 60">
<circle cx="50%" cy="50%" r="30" fill="rgb(10, 200, 200)"/>
</svg>
SVG 预览
生成的 PDF 预览
如果我将 SVG 中的位置 (cx, cy) 更改为绝对值,输出似乎很好。
我也尝试将 SVG 转换为 xObject,但也没有帮助。
private void addSvgImageToPdfPage(PdfPage page, String svgContent, float x, float y, float w, float h) {
// convert svg to xObject
PdfFormXObject xObject = SvgConverter.convertToXObject(svgContent, page.getDocument());
// create page canvas
PdfCanvas pdfCanvas = new PdfCanvas(page);
// create AT
AffineTransform at = AffineTransform.getTranslateInstance(x, y);
at.concatenate(AffineTransform.getScaleInstance(w / xObject.getWidth(), h / xObject.getHeight()));
float[] matrix = new float[6];
at.getMatrix(matrix);
// add svg xObject to canvas
pdfCanvas.addXObjectWithTransformationMatrix(xObject, matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
pdfCanvas.release();
}
【问题讨论】: