C# 将数据更改为xml

C# 将数据更改为xml,c#,xml,xml-serialization,pdf-generation,C#,Xml,Xml Serialization,Pdf Generation,我的任务是为客户完成一个演示,因为我们的主要开发人员目前不可用。我所有的编程经验都是,5年前我曾与C#发生过短暂的冲突,但此后就再也没有使用过它 如果有意义的话,我需要帮助将导出的数据转换为XML。目前,我们有一个构建,它采用PDF格式提取所需的数据,并通过命令提示符显示这些数据。我需要能够将这些数据转换成XML,以便可以查询到数据库。该程序的思想是从PDF中获取所需的数据,将其转换为XML,并查询到存储数据的数据库中。我们将C语言与iTextsharp库结合使用。我会发布代码,但不允许发布 所

我的任务是为客户完成一个演示,因为我们的主要开发人员目前不可用。我所有的编程经验都是,5年前我曾与C#发生过短暂的冲突,但此后就再也没有使用过它

如果有意义的话,我需要帮助将导出的数据转换为XML。目前,我们有一个构建,它采用PDF格式提取所需的数据,并通过命令提示符显示这些数据。我需要能够将这些数据转换成XML,以便可以查询到数据库。该程序的思想是从PDF中获取所需的数据,将其转换为XML,并查询到存储数据的数据库中。我们将C语言与iTextsharp库结合使用。我会发布代码,但不允许发布


所以我在问有人能帮我吗?也许可以给我举一个例子,说明如何做到这一点,或者尽可能简单地解释我将如何做到这一点?我通常不会向别人寻求帮助,但因为我已经多年没有编写代码了,这让我感到害怕。

这可能对你有用。。。取自

使用iTextSharp.text.pdf;
使用iTextSharp.text;
私有void openPDF()
{
字符串str=“”;
string newFile=“c:\\New Document.pdf”;
单据单据=新单据();
PdfReader reader=新的PdfReader(“c:\\new Document.pdf”);

对于(int i=1;i),一个选项是创建模拟数据的类(即字段/属性),为PDF数据中的每个“实体”创建对象,并将对象序列化为XML。StackOverflow和MSDN上的XML序列化有大量示例。主要思想是创建缓冲区(类对象)你可以在那里组织你从PDF接收的数据。如果你的客户想要的最终产品是数据库中的数据,为什么你要先将其放入XML?我真的无法告诉你为什么,因为这是一个更大的图景的一部分,这样做可以让我们将代码用于其他更重要的事情。数据总是表格化吗?Just a p.s.我会确保pdf解析符合要求,例如,解析pdf时,粗体文本有时会出现两次。最后一点……您应该说您打算在哪个数据库中存储XML,是希望存储XML文件本身还是仅存储数据?
using iTextSharp.text.pdf;
using iTextSharp.text;

private void openPDF()
{
    string str = "";
    string newFile = "c:\\New Document.pdf";
    Document doc = new Document();

    PdfReader reader = new PdfReader("c:\\New Document.pdf");
    for (int i = 1; i <= reader.NumberOfPages; i++)
    {
        byte[] bt = reader.GetPageContent(i);
        str += ExtractTextFromPDFBytes(bt);
    }
}

private string ExtractTextFromPDFBytes(byte[] input)
{
    if (input == null || input.Length == 0) return "";

    try
    {
        string resultString = "";

        // Flag showing if we are we currently inside a text object
        bool inTextObject = false;


        // Flag showing if the next character is literal
        // e.g. '\\' to get a '\' character or '\(' to get '('
        bool nextLiteral = false;


        // () Bracket nesting level. Text appears inside ()
        int bracketDepth = 0;


        // Keep previous chars to get extract numbers etc.:
        char[] previousCharacters = new char[_numberOfCharsToKeep];
        for (int j = 0; j < _numberOfCharsToKeep; j++) previousCharacters[j] = ' ';

        for (int i = 0; i < input.Length; i++)
        {
            char c = (char)input[i];

            if (inTextObject)
            {
                // Position the text
                if (bracketDepth == 0)
                {
                    if (CheckToken(new string[] { "TD", "Td" }, previousCharacters))
                    {
                        resultString += "\n\r";
                    }
                    else
                    {
                        if (CheckToken(new string[] { "'", "T*", "\"" }, previousCharacters))        {
                            resultString += "\n";
                        }
                        else
                        {
                            if (CheckToken(new string[] { "Tj" }, previousCharacters))
                            {
                                resultString += " ";
                            }
                        }
                    }
                }

                // End of a text object, also go to a new line.
                if (bracketDepth == 0 && CheckToken(new string[] { "ET" }, previousCharacters))
                {
                    inTextObject = false;
                    resultString += " ";
                }
                else
                {
                    // Start outputting text
                    if ((c == '(') && (bracketDepth == 0) && (!nextLiteral))
                    {
                        bracketDepth = 1;
                    }
                    else
                    {
                        // Stop outputting text
                        if ((c == ')') && (bracketDepth == 1) && (!nextLiteral))
                        {
                            bracketDepth = 0;
                        }
                        else
                        {
                            // Just a normal text character:
                            if (bracketDepth == 1)
                            {
                                // Only print out next character no matter what.
                                // Do not interpret.
                                if (c == '\\' && !nextLiteral)
                                {
                                    nextLiteral = true;
                                }
                                else
                                {
                                    if (((c >= ' ') && (c <= '~')) || ((c >= 128) && (c < 255)))
                                    {
                                        resultString += c.ToString();
                                    }


                                    nextLiteral = false;
                                }
                            }
                        }
                    }
                }
            }


            // Store the recent characters for
            // when we have to go back for a checking
            for (int j = 0; j < _numberOfCharsToKeep - 1; j++)
            {
                previousCharacters[j] = previousCharacters[j + 1];
            }

            previousCharacters[_numberOfCharsToKeep - 1] = c;

            // Start of a text object
            if (!inTextObject && CheckToken(new string[] { "BT" }, previousCharacters))
            {
                inTextObject = true;
            }
        }

        return resultString;
    }
    catch
    {
        return string.Empty;
    }
}


private bool CheckToken(string[] tokens, char[] recent)
{
   foreach (string token in tokens)
   {
      if ((recent[_numberOfCharsToKeep - 3] == token[0]) &&
       (recent[_numberOfCharsToKeep - 2] == token[1]) &&
       ((recent[_numberOfCharsToKeep - 1] == ' ') ||
       (recent[_numberOfCharsToKeep - 1] == 0x0d) ||
       (recent[_numberOfCharsToKeep - 1] == 0x0a)) &&
       ((recent[_numberOfCharsToKeep - 4] == ' ') ||
       (recent[_numberOfCharsToKeep - 4] == 0x0d) ||
       (recent[_numberOfCharsToKeep - 4] == 0x0a)))
       {
                return true;
       }
    }

    return false;
 }