【问题标题】:How to write a .SVG to pdf with PdfSharp如何使用 PdfSharp 将 .SVG 写入 pdf
【发布时间】:2017-11-21 19:29:09
【问题描述】:

我正在使用 PdfSharp 并保存 .png 文件。它工作正常。现在我需要保存 SVG 图像,但出现错误

System.OutOfMemoryException: Out of memory.

代码是

var path = @"D:\Projects\ProjectName\Content\Images\Instruments";
path += Path.GetFileName(instrument.Src); //instrument.src is a valid name and the path is a valid path on the local machine, which is where I'm testing

if (!File.Exists(path))
    return;  //never hit as the path is correct

var img = XImage.FromFile(path); //out of memory
//more code

如果我将上述内容从 .svg 更改为 .png,它可以正常工作(因为我同时拥有一个 .png 和 .svg 文件同名)

如何使用 PDF Sharp 将 SVG 图像保存为 PDF?

【问题讨论】:

  • 更改您的代码并将所有必要的对象包装在 using(){ } 构造周围。您还返回outputPdf 是字符串还是实际的pdf?在退出该方法之前,您还需要处理其他新创建的对象。你在什么时候得到错误..?第一次运行..?还是运行多次..?
  • 向我们展示当您使用调试器时目录的值是什么,请获取此值inputSvg 也您的应用程序可以访问您的特殊文件夹与您手动导航到文件夹路径..?
  • 也查看此链接pdfsharp.net/wiki/…
  • 尝试写入其他目录,例如"c:\tempPdf\"
  • 您提供的链接没有提供解决方案,因此如果您复制并粘贴代码..您粘贴的代码损坏..您帖子中的链接上没有任何可接受的答案..但是上一篇文章确实将其作为一个选项进行了讨论phantomjs.org

标签: c# svg pdfsharp


【解决方案1】:

PDFsharp 支持光栅图像,例如 PNG 和 JPEG。尚不支持 SVG 等矢量图像。这不是错误,这是实施限制。 PDF 文件中的页面可以像图像一样使用,并允许在 PDFsharp 中使用矢量图像。

XImage.FromFile 将图像传递给 GDI+ 或 WPF(取决于您使用的构建),并期望得到一个光栅图像作为回报。我不知道 SVG 图像的 GDI+ 或 WPF 返回什么。

如果您找到使用 Graphics 对象绘制 SVG 图像的源代码,那么您可以轻松地将其用于 PDFsharp 的 XGraphics 对象。

或者尝试找到将 SVG 转换为光栅图像或 PDF 文件的库。

【讨论】:

    【解决方案2】:

    你可以这样做:

    • 第 1 步:在 Inkscape 中打开您的矢量图像
    • 第 2 步:将 Inkscape 中的图像保存为 pdf 文件
    • 第 3 步:在您的 pdf 文档中导入这个新的 pdf 文件,如下所示:
    using (var doc = new PdfSharp.Pdf.PdfDocument())
    {
        var page = doc.AddPage();
        using (var gr = PdfSharp.Drawing.XGraphics.FromPdfPage(page, PdfSharp.Drawing.XGraphicsPdfPageOptions.Append))
        {
            using (var imgForm = PdfSharp.Drawing.XPdfForm.FromFile("fileWithVectorImage.pdf"))
            {
                gr.DrawImage(imgForm, new PdfSharp.Drawing.XPoint(10, 10));
            }
    
            //other pdf stuff with gr.DrawString etc.
        }
        doc.Save("resultPdfFile.pdf");
    }
    

    【讨论】:

      猜你喜欢
      • 2017-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 2011-08-20
      • 1970-01-01
      • 2010-11-16
      相关资源
      最近更新 更多