Pdf替换一段中文,仅显示一个字

您好,使用aspose.pdf替换pdf指定内容,数字、符号、英文可以正常替换,但是替换中文字符仅显示一个字符。
image.png (21.4 KB)

TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber(oldText);
mDoc.Pages.Accept(textFragmentAbsorber);
TextFragmentCollection textFragmentCollection = textFragmentAbsorber.TextFragments;
foreach (TextFragment textFragment in textFragmentCollection)
{
    textFragment.Text = newText;
    textFragment.TextState.Font = GetSimHeiFont();
}


var newTextFragmentAbsorber = new TextFragmentAbsorber(newText);
mDoc.Pages.Accept(newTextFragmentAbsorber);
var newTextFragmentCollection = newTextFragmentAbsorber.TextFragments;
// 预期是大于1,但是并没有获取到替换的新字符
var xx = newTextFragmentCollection.Count;

替换中文运行效果如图:
image.png (100.6 KB)

使用版本:
Aspose.PDF 20.12.0
.Net Core 3.1

是版本的问题吗?还是那里没设置好?麻烦帮忙解答一下,谢谢

@loger

您能否尝试使用最新版本的 API,即 23.9,如果问题仍然存在,请与我们分享您的示例 PDF 文档。我们将在我们的环境中测试该场景并相应地解决它。

我这边使用使用最新版本测试后,还有出现一样的问题。不过这两份文件有一个替换指定字符后可以正常展示,有一个不能正常展示(原文档:ba99显示不全.pdf)。这两份文件能看出哪里有问题吗?或者源文件有什么差异而导致替换不全吗?
ba99显示不全.pdf (72.9 KB)
789正常显示.pdf (68.8 KB)

相关测试代码

        [Fact]
        public void Test_ReplaceChinese()
        {
            byte[] bytes = null;
            using (var fileStream = File.OpenRead("D:\\ba99显示不全.pdf"))
            {
                bytes = new byte[fileStream.Length];
                fileStream.Read(bytes, 0, bytes.Length);
                fileStream.Close();
            }

            using var stream = new MemoryStream(bytes);
            var pdfDoc = new Aspose.Pdf.Document(stream);

            Replace(pdfDoc, "$$SignName$$", "王老五");
            Replace(pdfDoc, "$$SignTime$$", "2021-10-08");

            pdfDoc.Save("D:\\123_output.pdf");
        }

        private void Replace(Aspose.Pdf.Document mDoc,string oldText,string newText)
        {
            TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber(oldText);

            // Accept the absorber for all the pages
            mDoc.Pages.Accept(textFragmentAbsorber);

            // Get the extracted text fragments
            TextFragmentCollection textFragmentCollection = textFragmentAbsorber.TextFragments;

            // Loop through the fragments
            foreach (TextFragment textFragment in textFragmentCollection)
            {
                // Update text and other properties
                textFragment.Text = newText;
                //textFragment.TextState.Font = FontRepository.FindFont("Verdana"); // 中文无法展示
                textFragment.TextState.Font = GetSimHeiFont();
                textFragment.TextState.ForegroundColor = Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Black);
            }
        }

@loger

您能否检查一下我们使用您的代码 sinppet 在我们的环境中生成的附件 PDF 文档?我们没有注意到其中有任何问题。请您澄清一下我们的方向是否正确?123_output.pdf (429.1 KB)

嗯,好像是字体的原因,有些字无法显示。如下
Replace(pdfDoc, "$$SignName$$", "韩颖画、刘鹏、陆小花、王老五");
image.png (11.1 KB)
目前我测试了window系统自带的三种字体(SIMHEI.TTF、SIMKAI.TTF、SIMYOU.TTF)都出现同样的问题,这个有办法处理吗?

    private Font _simheiFont;
    public Font GetSimHeiFont()
    {
        if (_simheiFont != null) return _simheiFont;
        var fontFilePath = AppDomain.CurrentDomain.BaseDirectory + "Fonts\\SIMHEI.TTF";
        if (File.Exists(fontFilePath))
        {
            _simheiFont = FontRepository.OpenFont(fontFilePath);
            return _simheiFont;
        }
        else
        {
            return FontRepository.FindFont("Verdana"); // 中文无法展示
        }
    }

ba99显示不全.pdf
image.png (11.1 KB)
789正常显示.pdf
image.png (13.7 KB)
同样的程序,显示不同的效果

@loger

是的,问题似乎与字体有关。请注意,您需要使用支持所有汉字的字体。您尝试过 SimSun 字体吗?您能否分享替换文本后显示问题的完整 PDF 文档,而不是共享屏幕截图?它将帮助我们相应地识别和调查问题。

相同字体,ba99显示不全,另一个文件却可以正常显示。
ba99显示不全.pdf 源文档与输出文档
ba99显示不全.pdf (72.9 KB)
ba99显示不全_output.pdf (287.3 KB)
789正常显示.pdf 源文档与输出文档
789正常显示.pdf (68.8 KB)
789正常显示_output.pdf (288.3 KB)

TestAspose.zip (5.0 MB)
以上代码在window 10环境中测试后正常显示,不过在window Server 2016 DataCenter(window 8)环境中,pdf替换字符后出现缺少字符的情况。

好像是Aspose.Word将word文档转换成pdf出的问题,从而导致pdf替换字符显示不全。

在window server 2016 环境中将word转pdf会出现很多空白的地方,如下。而在window10则不会出现这种情况
image.png (88.1 KB)
789.pdf (32.1 KB)

@loger

对于与输出 PDF 中缺少字符相关的问题,我们已在内部问题跟踪系统中打开以下新票证,并将根据 Free Support Policies 中提到的条款提供修复。

问题 ID:PDFNET-55667

如果您需要优先支持,以及直接联系我们的付费支持管理团队,您可以获取 Paid Support Services

此外,与Aspose.Words相关的问题应发布在相应的论坛类别中。我们请求您在 Aspose.Wrods 论坛中为此创建一个帖子,以便您能够得到相应的帮助。

我们对不便表示抱歉。

已解决。可能是电脑缺失原文档的某个字体,导致word转pdf出问题,从而导致pdf替换文字出现漏字的情况。
在电脑上安装该字体即可。如文档用的是字体A,则电脑上也要安装上字体A。
image.png (17.2 KB)

或者把字体(C:\Windows\Fonts)全部拷贝到有问题的电脑也行
image.png (140.8 KB)

@loger

是的你是对的。我们认为之前已经在此线程中讨论过,系统中应该存在所需和使用的字体。尽管如此,很高兴知道您的问题已得到解决。您能否确认它是否也解决了您在使用 Aspose.PDF 进行 PDF 文本替换时遇到的问题?