转换提取的pdf文本的编码

问题描述 投票:0回答:1

我正在使用 pdfSharp 和我在网上找到的一些修改方法来从 pdf 返回文本。但是,根据 pdf 的创建方式而不是正确返回文本,这些方法将返回“\u0019”或“\u0013”等字符串,并将这些字符串在控制台窗口中呈现为各种形状和特殊字符。我假设这是因为 pdf 最初创建的方式,并且可能与文本编码有关。

我尝试了网上找到的一些数字编码转换,但没有成功。我不太熟悉 unicode ascii 等..关于如何正确返回文本有什么建议吗?下面是我用来从 pdf 中提取文本的方法。

using PdfSharp.Pdf.Content;
using PdfSharp.Pdf.Content.Objects;
using PdfSharp.Pdf.IO;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;

namespace Job_Ingestor
{
    public static class PdfSharpExtensions
    {
        public static string ExtractTextByRow(PdfDocument doc, int pageIndex = 0)
        {
            string rtnTxt = string.Empty;

            PdfPage page = doc.Pages[pageIndex];
            CObject content = ContentReader.ReadContent(page);
            var extractedText = PdfSharpExtensions.ExtractText(content);

            foreach (var t in extractedText)
            {
                rtnTxt = rtnTxt + t;
            }

            return rtnTxt;
        }

        public static IEnumerable<string> ExtractText(this PdfPage page)
        {
            var content = ContentReader.ReadContent(page);
            var text = content.ExtractText();
            return text;
        }

        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 (string 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;
            }
        }
c# pdf character-encoding pdfsharp
1个回答
0
投票
PDF 文件中的

Tj

 命令有时可与字形 ID 配合使用。可访问的 PDF 文件有一个将字形 ID 映射到 Unicode 字符的表。

© www.soinside.com 2019 - 2024. All rights reserved.