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

iText7 C# SvgConverter unicode 字符未显示

如何解决iText7 C# SvgConverter unicode 字符未显示

我正在尝试使用 iText7 将 svg 图像插入 pdf。我的图像在 unicode Ą 中包含语言特定的字符,如 Ą 但它不显示在 pdf 文件中。如果我使用浏览器或任何编辑器打开 svg 文件,一切正常。 我的 svg 是:

<svg width="450" height="100" xmlns="http://www.w3.org/2000/svg">
 <Metadata id="Metadata5">image/svg+xml</Metadata>
 <g>
  <title>Layer 1</title>
  <g stroke="null" id="layer1">
   <text stroke="null" transform="matrix(2.650662232016657,2.670811106880592,-0.5802407909153997,-0.5590199871829791) " xml:space="preserve" x="3.50000" y="31.68476" id="text3" stroke-width="0.26458" fill="#000000" font-family="Times New Roman" font-size="8px" font-weight="normal" font-style="normal">
    <tspan stroke="null" id="tspan3" x="3.09517" y="31.68476" stroke-width="0.26458" font-size="8px">&#x0104;</tspan>
   </text>
  </g>
 </g>
</svg>

我的代码是:

string svg = File.ReadAllText(@"c:\tmp\svg.svg");
string pdf = @"c:\tmp\test.pdf";
PdfReader reader = new PdfReader(pdf);
using(MemoryStream ms = new MemoryStream())
{
PdfSigner stamper = new PdfSigner(reader,ms,new StampingProperties());
PdfSignatureAppearance appearance = stamper.GetSignatureAppearance();
appearance.SetPageRect(new Rectangle(10,600,200,100));
var xx = SvgConverter.ConvertToXObject(svg_logo,stamper.GetDocument());
new PdfCanvas(appearance.GetLayer0(),stamper.GetDocument()).AddXObjectFittedIntoRectangle(xx,new Rectangle(200,100));
}


我错过了什么? 尝试了不同的字体,但没有运气。

解决方法

找到解决方案。

string svg = File.ReadAllText(@"c:\tmp\svg.svg");
string pdf = @"c:\tmp\test.pdf";
PdfReader reader = new PdfReader(pdf);
using(MemoryStream ms = new MemoryStream())
{
    PdfSigner stamper = new PdfSigner(reader,ms,new StampingProperties());
    PdfSignatureAppearance appearance = stamper.GetSignatureAppearance();
    appearance.SetPageRect(new Rectangle(10,600,200,100));
    SvgConverterProperties svgConverterProperties = new SvgConverterProperties() ;
    FontProgram fontProgram = FontProgramFactory.CreateFont() ;
    FontProvider fontProvider = new FontProvider();
    fontProvider.AddFont(fontProgram,"windows-1257");
    svgConverterProperties.SetFontProvider(fontProvider);
    var xx = SvgConverter.ConvertToXObject(svg_logo,stamper.GetDocument(),svgConverterProperties);
    new PdfCanvas(appearance.GetLayer0(),stamper.GetDocument()).AddXObjectFittedIntoRectangle(xx,new Rectangle(200,100));
}

我在 SvgConverterProperties 中设置了编码。

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