【发布时间】:2015-10-21 11:23:10
【问题描述】:
我想使用 Apache PDFBox 在 PDF 上绘制矢量图像。
这是我用来绘制常规图像的代码
PDPage page = (PDPage) document.getDocumentCatalog().getAllPages().get(1);
PDPageContentStream contentStream = new PDPageContentStream(document, page, true, true);
BufferedImage _prevImage = ImageIO.read(new FileInputStream("path/to/image.png"));
PDPixelMap prevImage = new PDPixelMap(document, _prevImage);
contentStream.drawXObject(prevImage, prevX, prevY, imageWidth, imageHeight);
如果我使用 svg 或 wmf 图像而不是 png,生成的 PDF 文档会损坏。
我希望图像是矢量图像的主要原因是,使用 PNG 或 JPG 图像看起来很糟糕,我认为它会以某种方式被压缩,所以看起来很糟糕。对于矢量图像,这不应该发生(好吧,当我在 Inkscape 中将 svg 路径导出为 PDF 时,它不会发生,矢量路径会被保留)。
有没有办法使用 Apache PDFBox 将 svg 或 wmf(或其他矢量)绘制到 PDF?
如果这很重要,我目前正在使用 PDFBox 1.8。
【问题讨论】:
-
快速提示,位图(.png、.jpg 等)与矢量图像 (.svg) 完全不同,并且很可能在 PDFBox 库中实现完全不同。
-
@insidesin 感谢您的评论。我认为实现方式也不同,因为矢量图像不能作为位图读取......但我似乎无法找到成功加载矢量图像并将其绘制为 PDF 的人。我用 iText 成功地做到了,在 PDFBox 中也必须有办法做到这一点......
-
是的,我已经使用了很多
iText,鉴于我刚才快速浏览了 API,它比PDFBox更容易阅读......我认为iText很难. -
“加载矢量图像并绘制它们”的问题在于就像位图图像一样您需要解释数据(您并不完全了解这些数据——显然PDFBox 在必要时方便地将位图图像转换为正确的 PDF 语法)。因此,要添加 SVG 图像,您需要编写代码以将 所有 SVG 命令 转换为其 PDF 等效项(包括将过滤器、阴影和箭头等“元”内容扩展为基元)。对于 WMF,同样如此。对于EPS,同样如此。对于 AI ......对于 CorelDraw ......好吧,我想你明白了。
-
.. 也就是说,一些搜索建议使用 Batik 作为中间体来创建一个单独的 PDF,然后可以将该 PDF 插入到您的 PDF 中。
标签: java image pdf vector pdfbox