繁体   English   中英

PDFsharp:使用PDFsharp替换字符串

[英]PDFsharp: Replace a string using PDFsharp

这个问题已经存在,但没有提供使用PDFsharp但使用iTextPDF的答案。

现在回到问题,我知道一种读取和提取String的方法。 但是我在替换文字时遇到了麻烦。

我的代码:

        var content = ContentReader.ReadContent(page);      
        var text = content.ExtractText();
        text = text.Replace("Replace This", "With This");
        XFont font = new XFont("Times New Roman", 11, XFontStyle.BoldItalic);

        gfx.DrawString(text, font, XBrushes.Black, new XRect(0, 0, page.Width, page.Height), XStringFormats.Left);

        // Save the document...
        const string filename = "New Doc.pdf";
        document.Save(filename);
    }   

    public static IEnumerable<string> ExtractText(this CObject cObject)
    {   
        if (cObject is COperator)
        {
            var cOperator = cObject as COperator;
            if (cOperator.OpCode.Name== OpCodeName.Tj.ToString() ||
                cOperator.OpCode.Name == OpCodeName.TJ.ToString())
            {
                foreach (var cOperand in cOperator.Operands)
                    foreach (var txt in ExtractText(cOperand))
                        yield return txt;   
            }
        }
        else if (cObject is CSequence)
        {
            var cSequence = cObject as CSequence;
            foreach (var element in cSequence)
                foreach (var txt in ExtractText(element))
                    yield return txt;
        }
        else if (cObject is CString)
        {
            var cString = cObject as CString;
            yield return cString.Value;
        }
    }

这是示例代码,该代码将忽略图形和图像。 最终只在输出文件中写入文本。 有什么方法可以替换文本而无需触摸内容中的“图形和图像”?

该示例似乎是错误的方法:它仅返回文本,但是忽略图形,图像,甚至文本位置和文本属性。

您可以尝试在内容中找到文本说明(TJ,Tj),并用新的说明(也就是TJ或Tj)替换它们,而无需触摸流中的任何其他内容。 如果新文本的长度不同,则这种简单的方法将导致文本重叠或间隙较大。

PDFsharp并非旨在分析内容流。 您必须编写自己的代码以提取文本,您必须编写自己的代码以修改文本(或使用基于PDFsharp构建的第三方库)。

要回答您的问题:是的,有一种方法(如上所述),但是您将必须编写大量代码来实现此目的(或找到由第三方编写的合适代码)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM