Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.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#_Parsing_Pdf_Itext_Text Parsing - Fatal编程技术网

C# 订单

C# 订单,c#,parsing,pdf,itext,text-parsing,C#,Parsing,Pdf,Itext,Text Parsing,如你所见,顺序与我们阅读页面的顺序大致相同 另一方面,“Huttig-2017 Therma Tru Catalog.pdf”第7页上的文本位按以下顺序绘制 Glass & Caming Options Door Only Pricing Classic-Craft® LE - Low - E A-Brass For Prehung Units see: FXG-Fixed Grille C-Brushed Nickel Frame Adder and Options Pages RG-

如你所见,顺序与我们阅读页面的顺序大致相同

另一方面,“Huttig-2017 Therma Tru Catalog.pdf”第7页上的文本位按以下顺序绘制

Glass & Caming Options Door Only Pricing Classic-Craft®
LE - Low - E A-Brass For Prehung Units see:
FXG-Fixed Grille C-Brushed Nickel Frame Adder and Options Pages
RG-Removable Grille D-Black Nickel Pricing Valid only when Prehung
SDL-Simulated Divide Lite
GBGF-Flat(W,B,A) Grille In Glass
GBGC-Cntr(W,B,A) Grille In Glass
W-Wrought Iron For Additional Options See Adder Page
?=Stock s=Rapid Ship
American Collection™
~~CCA210 ~~CCA210XC ~~CCA210XJ ~~CCA210XN ~~CCA210XR ~~CCA211
1 CCA210-LE CCA210XC CCA210XJ CCA210XN CCA210XR CCA211
Low-E Chord Chinchilla Granite Rainglass Homeward C D
2'8" x 6'8"
2'10" x 6'8"
3'0" x 6'8" $582.67 ? $865.22 ? $898.90 $898.90 $898.90 $923.30 ??
3'6" x 6'8"
Slab CANF3026L1L CANF3026DXC CANF3026DXJ CANF3026DXN CANF3026DXR CANF3026D1HW1C
Insert
Grille
~~CCA212 ~~CCA220 ~~CCA220XC ~~CCA220XJ ~~CCA220XN ~~CCA220XR
1 CCA212 CCA220-SDLLE CCA220XC-SDL CCA220XJ-SDL CCA220XN-SDL CCA220XR-SDL
Villager C D SDL Low-E SDL Chord SDL Chinchilla SDL Granite SDL Rainglass
2'8" x 6'8"
2'10" x 6'8"
3'0" x 6'8" $1,176.57 $641.72 ? $924.27 ? $957.94 $957.94 $957.94
3'6" x 6'8"
Slab CANF3026D1VG1C CANF3026L1L CANF3026DXC CANF3026DXJ CANF3026DXN CANF3026DXR
Insert
Grille CCALD2618V24 CCALD2618V24 CCALD2618V24 CCALD2618V24 CCALD2618V24
~~CCA221 ~~CCA222 ~~CCA230 ~~CCA230XC ~~CCA230XJ ~~CCA230XN
1 CCA221-SDL CCA222-SDL CCA230-SDLLE CCA230XC-SDL CCA230XJ-SDL CCA230XN-SDL
SDL Homeward C D SDL Villager C D SDL Low-E SDL Chord SDL Chinchilla SDL Granite
2'8" x 6'8"
2'10" x 6'8"
3'0" x 6'8" $1,042.37 ? $1,258.06 $701.26 ? $983.81 ? $1,017.48 $1,017.48
3'6" x 6'8"
Slab CANF3026D2HW1C CANF3026D2VG1C CANF3026L1L CANF3026DXC CANF3026DXJ CANF3026DXN
Insert
Grille CCALD2618V24 CCALD2618V24 CCALD2618V24 CCALD2618V24 CCALD2618V24 CCALD2618V24
March 2016 Confidential | Huttig Building Products | Prices Subject to Change Without Notice Page 7 of 814
Confidential | Prices Subject to Change Without Notice | Terms & Conditions: www.huttig.com/salesterms January 28,2017 Page 7 of 820
Glass & Caming Options Classic-Craft® Standard Single Unit Includes:

  LE - LOW - E
  FXG - Fixed Grille
  RG - Removable Grille
  SDL - Simulated Divide Lite
  GBGF - Flat(W,B,A) Grille In Glass
  GBGC - Cntr(W,B,A) Grille In Glass
  W - Wrought Iron
  SDLF1 - 1-1/8" SDL
  SDLF2 - 3-1/2" SDL
A - Brass
C - Brushed Nickel
D - Black Nickel
XC - Chord
XJ - Chinchilla
XN - Granite
XR - Rainglass
XE - Satin Etch
For Prehung Units See:
Frame Adders and Options Pages
Pricing Valid only when Prehung
For Additional Options See Adder Page
= Rapid = Stock
American Collection™
Slab
Grille

Chinchilla
$940.38 $906.22
CANF3026DXC
$940.38
CANF3026DXN
$940.38
CANF3026DXR
$967.22
CANF3026D1HW1D
CCA212 CCA220-SDLLE CCA220XJ-SDL CCA220XC-SDL CCA220XN-SDL CCA220XR-SDL
Villager SDL Low-E SDL Chinchilla SDL Chord SDL Granite SDL Rainglass
$1,231.71 $672.46
CCALD2618V24
$1,002.35
CCALD2618V24
$968.19
CCALD2618V24
$1,002.35
CCALD2618V24
$1,002.35
CCALD2618V24
CCA221-SDL CCA222-SDL CCA230-SDLLE CCA230XJ-SDL CCA230XC-SDL CCA230XN-SDL
SDL Homeward SDL Villager SDL Low-E SDL Chinchilla SDL Chord
$1,090.68
CANF3026D2HW1D
$1,316.62 $734.44 $1,064.82 $1,030.66 $1,064.82
SDL Granite
CANF3026DXJ
CCA210-LE
Low-E
CCA210XJ CCA210XC CCA210XN CCA210XR CCA211
Chord Rainglass Homeward
CCALD2618V24 CCALD2618V24 CCALD2618V24 CCALD2618V24 CCALD2618V24 CCALD2618V24
CANF3026D2VG1D CANF3026L1L CANF3026DXJ CANF3026DXC CANF3026DXN
CANF3026DXR CANF3026DXN CANF3026DXC CANF3026DXJ CANF3026L1L CANF3026D1VG1D
C  D
C  D C  D
Granite
CANF3026L1L
$610.00 3' 0" x 6'8"
3' 0" x 6'8"
3' 0" x 6'8"
Slab
Insert
Grille
Slab
Grille
Insert
     
Insert
 
C  D
 
Available
Available
Available
正如您所看到的,第一个表中的价格(除了最左边的610美元)很早就绘制出来了,然后是其他表中的内容,然后是第一个表的顶部CCA和底部CANF标识符,然后是所有表的CD列标题,然后是一些其他条目,然后是第一个表中缺少的610美元价格,然后是所有表的行标题,最后是三个出现在页面上但不可见的“可用”

你知道那个档案怎么了吗

我可以推测。根据PDF的生产者属性,2016年目录似乎直接从MS Excel 2010导出,而2017年目录则由Ghostscript创建。此外,目录看起来相似,但差异足以假设2017年的目录不是从同一个源Excel文件创建的,而是使用一个完全不同的工具链,其任务是生成与前一个目录相似的内容,不是看起来完全相同的东西,更不用说内部构造与它完全相同的东西了

如何应对 如何正确修复/读取第二个PDF

首先,没有什么需要修正的:对于通用PDF,不需要按照任何特定顺序绘制文本。因此,第二个PDF没有损坏(至少在这方面没有),因此无法修复

要正确阅读和分析它,您必须按照@Max的回答进行操作

您必须读出文本的边界框,并使用一些启发式方法来确定哪些内容属于一起

不幸的是,您没有发布文本提取策略的(关键部分)。要获得更详细的帮助,请发布它

但是,考虑到您能够在C#中构建一个解析过程,该过程逐行解析第一个PDF文件,而不是第二个文件,因为第二个PDF中的行顺序完全被打破,并且与视觉结构不同,我假设您的自定义文本提取策略基于
simpletextractionstrategy
,因为它假设文本位以逐行顺序出现。最重要的是,它可能使用文本位坐标(至少是x坐标)来确定文本位出现的列


逐行假设并不总是成立的,尤其是在2017年目录的情况下。因此,您应该根据
LocationTextExtractionStartegy
代码重新实施策略,即首先从页面收集所有文本位,包括其相关坐标(边界框、基线等),然后对这些位进行排序(从上到下、从左到右),然后执行附加逻辑来标识列。

这正是我对第一个PDF文件所做的。我已经创建了一个自定义iTextSharp的文本提取策略,使用块之间的距离将页面读取为块(门图像+图像下方的行+右边缘的尺寸)。然而,第二个PDF只是由单个单词组成的一堆行,以随机顺序阅读。看看我问题中的图片,你多久会看到PDF中的文本选择是这样的?只需谷歌搜索PDF,打开它并尝试从中选择一些文本,它可能会允许您以正确的顺序逐字选择文本行。您(手动)是否使用了Alt Drag(我认为在Windows上是这样;在Mac上是Option Drag)?当然,如果你必须按语法来做,那没有多大帮助。你可以使用鼠标、Alt+鼠标拖动、Shift+PgDown等,这并不重要。我想说的是,iTextSharp和Acrobat Reader DC都在以相同(无序)的方式阅读第二个PDF。Quote:
奇怪的是,不仅iTextSharp这样解释第二个文件,甚至Acrobat Reader DC的文本选择工具也无法以正确的行顺序选择信息
@Salaros您说您创建了自定义文本提取策略,但没有显示它。因此,我们无法分析它为什么会这样做。不过,Adobe Reader在一定程度上考虑了文本提取(复制和粘贴)过程中在页面上绘制字符串的顺序(这可能与您在文档中看到的顺序完全不同)。通常,PDF创建程序会按照人类理解的顺序添加绘图指令,但有时(尤其是在编辑PDF之后)会在复制和粘贴时以有趣的结果扰乱这些绘图指令。这正是我对第一个PDF文件所做的。我已经创建了一个自定义iTextSharp的文本提取策略,使用块之间的距离将页面读取为块(门图像+图像下方的行+右边缘的尺寸)。然而,第二个PDF只是由单个单词组成的一堆行,以随机顺序阅读。看看我问题中的图片,你多久会看到PDF中的文本选择是这样的?只需谷歌搜索PDF,打开它并尝试从中选择一些文本,它可能会允许您以正确的顺序逐字选择文本行。您(手动)是否使用了Alt Drag(我认为在Windows上是这样;在Mac上是Option Drag)?当然,如果你必须按语法来做,那没有多大帮助。你可以使用鼠标、Alt+鼠标拖动、Shift+PgDown等,这并不重要。我想说的是,iTextSharp和Acrobat Reader DC都在以相同(无序)的方式阅读第二个PDF。Quote:
奇怪的是,不仅iTextSharp这样解释第二个文件,甚至Acrobat Reader DC的文本选择工具也无法以正确的行顺序选择信息
@Salaros您说您创建了自定义文本提取策略,但您没有