【问题标题】:iText7 C# SvgConverter unicode character is not displayingiText7 C# SvgConverter unicode 字符未显示
【发布时间】:2021-03-26 11:03:45
【问题描述】:

我正在尝试使用 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,0,0,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));
}


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

【问题讨论】:

  • 如果您只是尝试显示普通文本会发生什么?我在互联网上找到了一个示例,其中“x”后面有一个空格。不确定这是否会有所不同。
  • 普通文本一切正常。已尝试将文本转换为曲线,但 iText 无法正确显示。 x 后的空格会破坏 svg。
  • 那么可能是字体问题。您使用的字体不支持这些字符。请参阅:en.wikipedia.org/wiki/Unicode_fontadobe.com/products/type/opentype.html

标签: c# svg itext7


【解决方案1】:

找到解决方案。

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 中设置了编码。

【讨论】:

    猜你喜欢
    • 2012-08-08
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多