Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 试着理解它_C#_Pdf_Itext - Fatal编程技术网

C# 试着理解它

C# 试着理解它,c#,pdf,itext,C#,Pdf,Itext,我尝试构建一个应用程序,该应用程序可以使用C#将PDF转换为excel。 我已经搜索了一些库来帮助我解决这个问题,但大多数都是商业许可的,所以我最终访问了iTextSharp.dll 免费很好,但我很少找到任何好的开源文档。 以下是我读过的一些链接: 还有更多。但是,大多数人并没有真正解释代码的用途。 这是IText中最常见的代码,使用C#: StringBuilder text=new StringBuilder();//我的新文件将包含pdf内容? PdfReader PdfReade

我尝试构建一个应用程序,该应用程序可以使用C#将PDF转换为excel。 我已经搜索了一些库来帮助我解决这个问题,但大多数都是商业许可的,所以我最终访问了iTextSharp.dll

免费很好,但我很少找到任何好的开源文档。 以下是我读过的一些链接:

  • 还有更多。但是,大多数人并没有真正解释代码的用途。 这是IText中最常见的代码,使用C#:

    StringBuilder text=new StringBuilder();//我的新文件将包含pdf内容?
    PdfReader PdfReader=新PdfReader(myPath);//这也许是我阅读pdf的方式?
    
    对于(int page=1;page让我先解释一下PDF。
    PDF不是“所见即所得”格式

    在内部,PDF更像是一个包含渲染软件说明的文件。除非您使用的是带标签的PDF文件,否则PDF文档自然不会有“段落”或“表格”的概念

    例如,如果您在记事本中打开PDF,您可能会看到如下内容

    7 0 obj
    <</BaseFont/Helvetica-Oblique/Encoding/WinAnsiEncoding/Subtype/Type1/Type/Font>>
    endobj
    
    70对象
    endobj
    
    文档中的说明被收集到“对象”中,对象被编号,并且可以相互引用

    正如布鲁诺在评论中指出的那样,这意味着找出一个表是什么,或者一个表的内容是什么,可能真的很难

    PDF文档本身只能告诉您以下信息:

    • 对象8是从[50100]到[150100]的直线
    • 对象125是一段文本,字体为Helvetica,位置为[50110]
    使用iText核心库,您可以

    • 获取所有这些对象(iText调用PathRenderInfo、TextRenderInfo和ImageRenderInfo对象)
    • 获取渲染对象时的图形状态(哪种字体、字号、颜色等)
    这可以让您编写自己的解析逻辑。 例如:

    • 收集所有PathRenderInfo对象
    • 删除所有不是完美水平线或垂直线的内容
    • 将以90度角相交的所有物体组成簇
    • 如果一个簇包含超过给定的行阈值,则将其视为表
    幸运的是,
    pdf2Data
    解决方案(一个iText附加组件)已经为您完成了这类工作


    有关更多信息,请转到

    让我先解释一下PDF。
    PDF不是“所见即所得”格式

    在内部,PDF更像是一个包含渲染软件说明的文件。除非您使用的是带标签的PDF文件,否则PDF文档自然不会有“段落”或“表格”的概念

    例如,如果您在记事本中打开PDF,您可能会看到如下内容

    7 0 obj
    <</BaseFont/Helvetica-Oblique/Encoding/WinAnsiEncoding/Subtype/Type1/Type/Font>>
    endobj
    
    70对象
    endobj
    
    文档中的说明被收集到“对象”中,对象被编号,并且可以相互引用

    正如布鲁诺在评论中指出的那样,这意味着找出一个表是什么,或者一个表的内容是什么,可能真的很难

    PDF文档本身只能告诉您以下信息:

    • 对象8是从[50100]到[150100]的直线
    • 对象125是一段文本,字体为Helvetica,位置为[50110]
    使用iText核心库,您可以

    • 获取所有这些对象(iText调用PathRenderInfo、TextRenderInfo和ImageRenderInfo对象)
    • 获取渲染对象时的图形状态(哪种字体、字号、颜色等)
    这可以让您编写自己的解析逻辑。 例如:

    • 收集所有PathRenderInfo对象
    • 删除所有不是完美水平线或垂直线的内容
    • 将以90度角相交的所有物体组成簇
    • 如果一个簇包含超过给定的行阈值,则将其视为表
    幸运的是,
    pdf2Data
    解决方案(一个iText附加组件)已经为您完成了这类工作


    有关更多信息,请转到

    谷歌上有很多示例。其中之一是:因此……您想使用iText,但(1)您想从不再受支持的旧版本开始(即iText 5而不是iText 7),(2)您不想去,而是阅读过时的第三方教程,以及(3)iText是AGPL软件,这意味着如果你遵守AGPL的规则,你可以免费使用if。你确定你知道这些规则吗?另外:你说你想将PDF文件转换为Excel文件,但你不问问自己这是否可能(一般而言)。你的PDF是带标签的PDF吗?如果是,里面是否有表格标签?如果不是,你认为PDF如何知道什么是列,什么是行?如果PDF中没有标签,你可以用人眼看到表格,但机器只看到文本和行,没有表格。对你的问题“尝试理解ITextSharp”唯一有效的答案是“首先尝试理解PDF!"你试图在走路之前跑。顺便说一句,关于你评论的那行//也许IText是如何将数据转换成文本的?-不,这行是一种不做任何事情的复杂方式,特别是在第三方教程中,以及在这里关于堆栈溢出的一些答案中,都可以找到。每当有人要求各自的作者解释时,让我们来看看单独提供一个例子,这一行是必要的,通常没有解释,并且在少数情况下没有解释的证据。我明白了,这是我的错误。我没有很好地阅读什么是itext库。我尝试了www.sautinsoft.com,它很容易用于转换,这真的让我迷路了。因此,我再次阅读了关于文本和程序工作。它读取pdf格式的所有数据(仅第1页)。我现在需要的是将其写入excel。Thx all,我很快会提出新问题,并可以自由地再次回答:D.谷歌上有很多示例。其中之一:那么……你想使用吗