我注意到,当我使用 Apache Batik 将 SVG 文档转码为不透明度设置为小于 1 的 PDF 时,Batik 将创建 SVG 的光栅版本并将其放置在 pdf 中。在处理打印时,这是不可取的。蜡染这样做有什么理由吗?不管它们的不透明度如何,有没有办法避免这种 SVG 文档的扁平化?
我们创建转码器的代码:
PDFTranscoder pdfTranscoder = new PDFTranscoder();
pdfTranscoder.addTranscodingHint(PDFTranscoder.KEY_PIXEL_UNIT_TO_MILLIMETER, PIXEL_CONVERSION);
pdfTranscoder.addTranscodingHint(PDFTranscoder.KEY_AUTO_FONTS, false);
然后我们将返回element.getEncodedData()
的 SVG 作为 SVG 字符串。
TranscoderInput input = new TranscoderInput(new ByteArrayInputStream(element.getEncodedData().getBytes()));
TranscoderOutput output = new TranscoderOutput(byteStream);
pdfTranscoder.transcode(input, output);
对于不透明度,我们编辑 SVG 添加一个组。考虑以下 svg:请注意已删除许多标记标签以保持示例简洁:
<svg>
<rect x="100" y="100" width="100" height="100" />
</svg>
我们将编辑此 SVG 以显示为
<svg>
<g opacity="0.5">
<rect x="100" y="100" width="100" height="100" />
</g>
</svg>