问题描述
项目信息:.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);
我都试过了,但结果都一样。
问题:
感谢您的宝贵时间!
解决方法
当您调用 SvgConverter.ConvertToImage
或 SvgConverter.ConvertToXObject
时,您的 SVG 不会转换为光栅图像 - 它仍然是矢量图像。因此,您可以使用集成的 SVG 转换器工作流程,并且实际上是将它与 SvgConverter
一起使用。转换器需要将 SVG 文件格式处理成更多 PDF 特定的结构,因此它执行一些转换,因为 PDF 不直接支持 SVG。这不是矢量 -> 光栅转换。
关于线条粗细的问题,首先认为您应该尝试使用最新版本-据我所知,您正在尝试使用 7.1.11,而它的历史可以追溯到大约一年左右,而 7.1.15 已经过时已经。如果问题仍然存在,那么它是 iText 中 SVG 支持中的一个错误,您可以尝试最小化 SVG 文件以查看是否有解决方法来实现正确的转换,直到针对您的案例修复该错误和/或将问题报告给 iText (StackOverflow 不是报告错误的正确地方)。