在.NET C#中以编程方式将SVG嵌入PDF [已关闭]

hjqgdpho  于 2023-08-08  发布在  .NET
关注(0)|答案(4)|浏览(104)

**已关闭。**此问题是在寻求有关书籍、工具、软件库等内容的建议。它不符合Stack Overflow guidelines。它目前不接受回答。

我们不允许提问以寻求书籍、工具、软件库等方面的建议。您可以编辑问题,以便使用事实和引文回答。
2天前关闭。
Improve this question
有人知道如何用C#创建一个PDF文件,并在这个PDF中添加SVG文档吗?
itextsharp做不到。
多亏了这个库(http://svg.codeplex.com/),我将SVG转换成图像,但我需要保持矢量图形,因为图像是像素化的。
有人知道图书馆可以做吗?
谢谢你,

3bygqnnd

3bygqnnd1#

PrinceXML在处理SVG方面做得很好,但是它并不是完全免费的,这意味着免费版本会在输出PDF上放置一个小徽标。您可以在这里了解更多信息:http://www.princexml.com/doc/7.0/svg/
PDFJet将允许您创建线,圆,多边形和其他基本绘图工具。您可以创建一个类来解析SVG,然后绘制适当的圆、弧、线等,然后使用PDFJet来制作PDF。PDFJet可以在这里下载:http://pdfjet.com/os/edition.html
除此之外,我不认为有很多其他的选择,你正在寻找做什么。

mcvgt66p

mcvgt66p2#

PDFKit.NET3可以将SVG文档插入PDF,同时保留矢量。

8wigbo56

8wigbo563#

webSupergoo ABCpdf也是一个很好的商业选择,价格稍微便宜一些(ABCpdf Std的价格是329美元,ABCpdf Pro的价格是479美元,如果你想要渲染或x64支持)。版本7在处理SVG文件时做得很糟糕(它只能加载一小部分,经常会有问题),但我理解(没有亲自测试)版本8(和现在的9)通过切换到Gecko engine极大地提高了它的SVG支持。

jbose2ul

jbose2ul4#

也许在过去这是不可能的,但现在,使用iText7它是。
请注意,您需要安装itext7.bouncy-castle-fips-adapteritext7.font-asian才能工作。
我还使用PDFSharp来合并pdf文件,因为我在每个页面上做了一些修改,但无论如何,你可以使用iText 7合并它们。
我的SVG在一个文件夹中,如果你需要修改任何东西,请继续!

using System;
using System.Text;
using System.Windows;
using PdfSharp.Pdf.IO;
using System.Reflection;
using System.IO;
using iText.Svg.Converter;
using iText.Layout.Font;
using iText.Svg.Processors.Impl;

Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);

string path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);

var document = new PdfSharp.Pdf.PdfDocument();

string tempPDF = "temp.pdf";

var list = Directory.GetFiles(path, "*.svg", SearchOption.AllDirectories);

for (int ev = 0; ev < list.Length; ev++)
{
    FontProvider provider = new FontProvider();

    SvgConverterProperties props = new SvgConverterProperties();
    props.SetCharset("Windows-1252");
    props.SetFontProvider(provider);

    FileStream svgPath = File.Open(list[ev], FileMode.Open);
    FileStream pdfPath = File.Create(tempPDF);
    SvgConverter.CreatePdf(svgPath, pdfPath, props);

    PdfSharp.Pdf.PdfDocument inputDocument = PdfSharp.Pdf.IO.PdfReader.Open(tempPDF, PdfDocumentOpenMode.Import);

    document.AddPage(inputDocument.Pages[0]);

}
File.Delete(tempPDF);

string fileName = path + "/output.pdf";

// Save and start View
document.Save(fileName);

字符串
有时输出不是100%正确,但结果是相当体面的,我试图通过,如果我找到一个更好的解决方案,我会让你知道!

相关问题