【问题标题】:IText7 - IText7 is Not Properly Drawing SVG DocumentsIText7 - IText7 未正确绘制 SVG 文档
【发布时间】:2021-08-18 19:42:00
【问题描述】:

项目信息: .NETCore v3.1 - IText7 v7.1.11

我们有一个由 IText7 nuget 包创建的 PDF 文档构建器库,我们可以在其中为我们的客户动态构建大型 PDF 文件。

通常我们使用.jpg 格式,但我们的在线端添加了一项新功能,即我们已经开始使用交互式SVG 文件,其中热点集成到我们的UI。

因此,当我们的应用程序构建 PDF 文档时,它还需要导入那些 SVG 文件,我们可以通过以下方式使用它:

var image = SvgConverter.ConvertToImage(
                    new FileStream(imagePath, FileMode.Open, FileAccess.Read), pdfDocument);

原始文件(我无法上传 SVG,所以我上传为 jpg 但这并不重要,因为我只想显示线条粗细):

输出如下所示,正如您在左侧看到的那样,线条变得很粗,部分未按预期显示。

步骤:

  • SvgConverter.DrawOnCanvas(svgStream, pdfCanvas);
  • SvgConverter.DrawOnDocument(svgStream, pdfDocument);
  • SvgConverter.DrawOnPage(svgStream, pdfPage);
  • SvgConverter.ConvertToXObject(svgStream, pdfDocument);
  • SvgConverter.ConvertToImage(svgStream, pdfDocument);

我都试过了,但结果都是一样的。

问题:

  • PDF 和 SVG 文件是矢量,所以我们不能通过 IText 将它们作为集成使用,为什么需要将其转换为 Raster?为什么我们需要转换器?
  • 有没有办法减少厚度或不损失图像质量?

感谢您的宝贵时间!

【问题讨论】:

    标签: c# svg .net-core itext itext7


    【解决方案1】:

    当您调用 SvgConverter.ConvertToImageSvgConverter.ConvertToXObject 时,您的 SVG 不会转换为光栅图像 - 它仍然是矢量图像。因此,您可以使用集成的 SVG 转换器工作流程,实际上您正在将它与 SvgConverter 一起使用。转换器需要将 SVG 文件格式处理为更多特定于 PDF 的结构,因此它执行一些转换,因为 PDF 不直接支持 SVG。这不是矢量 -> 光栅转换。

    关于线条粗细的问题,首先认为您应该尝试使用最新版本-据我所知,您正在尝试使用 7.1.11,而它的历史可以追溯到大约一年,而 7.1.15 已经发布已经。如果问题仍然存在,那么它是 iText 中 SVG 支持中的错误,您可以尝试最小化 SVG 文件以查看是否有解决方法来实现正确的转换,直到针对您的情况修复错误和/或将问题报告给 iText (StackOverflow 不是报告错误的正确地方)。

    【讨论】:

    • 您好,亲爱的 Alexey,感谢您抽出宝贵时间,我将首先尝试将版本升级到 7.1.15 并再次尝试此方法。 7.1.15 是否与 .Net Core 3.1 完全兼容?
    • @Burak 是的,是的
    • 您好@Alexey,我们确实尝试使用 IText v7.1.15 重现此问题,但问题仍然存在。所以我们想报告一个关于 IText 的问题,你能指导我吗?
    猜你喜欢
    • 2021-07-08
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 2020-12-09
    • 1970-01-01
    相关资源
    最近更新 更多