微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

IText7 - IText7 不能正确绘制 SVG 文档

如何解决IText7 - IText7 不能正确绘制 SVG 文档

项目信息:.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 格式上传,但这并不重要,因为我只想显示线条粗细):

Input

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

Output

步骤:

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

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

问题:

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

感谢您的宝贵时间!

解决方法

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。