如何使用PdfSharp将.SVG转换为PDF

3

我正在使用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?


请在使用调试器时向我们展示目录值是多少,对于此值 inputSvg。同时,您的应用程序是否可以访问您的“特殊文件夹”,而不是手动导航到文件夹路径? - MethodMan
也可以查看这个链接 http://www.pdfsharp.net/wiki/PageSizes-sample.ashx?AspxAutoDetectCookieSupport=1 - MethodMan
尝试将文件写入不同的目录,例如 "c:\tempPdf\" - MethodMan
如果它适用于所有其他类型,那么这听起来像一个错误。也许你可以将.SVG类型转换为JPG或PNG格式,否则除非修复此错误,否则你就没有希望了。但是,只要不使用.SVG,你的代码可以正常工作。尝试一下ITextSharp怎么样?那是一个免费的DLL,不知道是否可以使用它来代替。 - MethodMan
你使用pdfsharp吗?看起来好像不是。 - MyDaftQuestions
显示剩余2条评论
2个回答

8

PDFsharp支持像PNG和JPEG这样的光栅图像。矢量图像,如SVG尚未得到支持。这不是一个错误,而是一种实现限制。来自PDF文件的页面可以像图像一样使用,并允许在PDFsharp中使用矢量图像。

XImage.FromFile将图像传递给GDI+或WPF(取决于您使用的版本),并期望返回光栅图像。我不知道GDI+或WPF对SVG图像返回什么。

如果您找到绘制SVG图像使用Graphics对象的源代码,则可以轻松采用PDFsharp的XGraphics对象。

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


-1
您可以按照以下步骤完成:
  • 第一步:在Inkscape中打开您的向量图像
  • 第二步:将图像在Inkscape中保存为pdf文件
  • 第三步:像这样导入您的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");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接