PdfReaderContentParser.ProcessContent returns 空白表示明文
PdfReaderContentParser.ProcessContent returns whitespace for clear text
我想为包含二进制和明文数据的文本解析 pdf。当我尝试使用 PdfReaderContentParser 时,GetResultantText 方法 returns 二进制内容的正确文本,但明文内容的空格。这是我使用的代码:
byte[] binaryPdf = File.ReadAllBytes(this.fileName);
reader = new PdfReader(binaryPdf);
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
for (int i = 1; i <= reader.NumberOfPages; i++)
{
SimpleTextExtractionStrategy simpleStragety = parser.ProcessContent(i, new SimpleTextExtractionStrategy());
string contentText = simpleStragety.GetResultantText();
// Do something with the contentText
// ...
}
知道如何获取所有内容吗?
概述
OP 在评论中澄清了他在提取的文本中遗漏了哪些文本:
Basically for all descriptions on the left-hand side (e.g. Lifting moment) I get whitespaces instead of the actual text.
原因很简单:在页面内容中,大部分左侧只有空格(如果有的话)。您实际看到的标签是只读表单域。
例如 "Lifting moment" 是表单字段的值 13B141032
。
如果您希望文本提取也包括这些字段,您应该考虑在第一步中展平文档(将字段外观移动到常规页面内容流中)并从此展平的文档中提取文本。
文件分析
看起来规范标签国际化的主要部分是使用表单字段完成的。
为了概览,我将原始文档分开了
进入其常规页面内容
和表单字段
表单域下的页面内容确实有几串空格
我会假设曾经有该文档的早期版本(或它的模板)包含这些标签(可能只有一种或两种语言)作为页面内容。
然后有一个更动态的国际化任务,所以有人用空格替换了页面内容中的现有标签,并添加了新的国际化标签作为只读表单字段,可能是因为表单字段更容易操作。
考虑到原始标签似乎已被相同数量的空格替换,但有人可能会推测甚至还有另一个程序在硬编码中操纵此文档和类似文档的页面流 offsets,并且为了在国际化过程中不破坏这个程序,实际的标签必须在页面内容之外创建。奇怪的事情发生了...
展平并提取
如上所述,如果您希望文本提取也包括这些字段,您应该考虑在第一步中将文档扁平化(将字段外观移动到常规页面内容流中)并从此扁平化文档中提取文本.可以这样做:
[Test]
public void ExtractFlattenedTextTestSeeb()
{
FileInfo file = new FileInfo(@"PATH_TO_FILE851208.pdf");
Console.Out.Write("41851208.pdf, flattened before extraction\n\n");
using (MemoryStream memStream = new MemoryStream())
{
using (PdfReader readerOrig = new PdfReader(file.FullName))
using (PdfStamper stamper = new PdfStamper(readerOrig, memStream))
{
stamper.Writer.CloseStream = false;
stamper.FormFlattening = true;
}
memStream.Position = 0;
using (PdfReader readerFlat = new PdfReader(memStream))
{
PdfReaderContentParser parser = new PdfReaderContentParser(readerFlat);
for (int i = 1; i <= readerFlat.NumberOfPages; i++)
{
SimpleTextExtractionStrategy simpleStragety = parser.ProcessContent(i, new SimpleTextExtractionStrategy());
string contentText = simpleStragety.GetResultantText();
Console.Write("Page {0}:\n\n{1}\n\n", i, contentText);
}
}
}
}
结果标准输出:
41851208.pdf, flattened before extraction
Page 1:
90–120 l/min
(23.8–31.7 US gal./min)
60 kg
(132 lbs)
115 kg
(254 lbs)
350 l
(92.5 US gal.)
100 kg 105 kg
(220 lbs) (231 kg)
100 kg
(220 lbs)
250 l 300 l
(66.0 US gal.) (79.3 US gal.)
90 kg
(198 lbs)
180 l
(47.6 US gal.)
5305kg
(11695 lbs)
5265kg
(11607 lbs)
5395kg
(11894 lbs)
5205kg
(11475 lbs)
5010kg
(11045 lbs)
4780kg
(10538 lbs)
4470kg
(9854 lbs)
4190kg
(9237 lbs)
3930kg
(8664 lbs)
5215kg
(11497 lbs)
5045kg
(11122 lbs)
4860kg
(10714 lbs)
4650kg
(10251 lbs)
4350kg
(9590 lbs)
4100kg
(9039 lbs)
3850kg
(8488 lbs)
25.2 m
(82’ 8")
23.2 m
(76’ 1")
21.0 m
(68’ 11")
18.7 m
(61’ 4")
16.4 m
(53’ 10")
14.1 m
(46’ 3")
11.8 m
(38’ 9")
9.7 m
(31’ 10")
7.7 m
(25’ 3")
36.5 MPa (365 bar)
(5293 psi)
endlos
endless
sans finite
25.2 m
31.2 m
(82’ 8")
(102’ 4")
21.0 m
(68’ 11")
14900kg
(32848 lbs)
403.2 kNm (41.1 mt)
(297270 ft.lbs)
49.1 kNm (5.0 mt)
PK 42002–SH A–G
(36210 ft.lbs)
37.3 kNm (3.8 mt)
PK 42002–SH A–C
(27510 ft.lbs)
1GETR 2GETR
PK 42002–SH A – C
KT250 KT300 KT350 KT180
2GETR STZY
+V1
+V2
+2/4
7(F) 8(G) 6(E) 5(D) 4(C) 3(B) 2(A)
+V1
+V2
(S410–SK–D)
DTS410SHC/03
0100
11/2010
PK 42002–SH
Type Model Modell
Page Page Seite
Chapitre Chapter Kapitel
Edition Edition Ausgabe
Öltank
Mehrgewicht:
Alle Gewichtsangaben ohne Aufbauzubehör,Zusatzgeräte und Öl.
Hydr. Ausschübe:
Max. Reichweite + Fly-Jib:
Max. Reichweite:
Fördermenge der Pumpe:
Betriebsdruck:
Schwenkmoment:
Schwenkbereich:
Max. Reichweite:
Max. hydraulische Reichweite:
Max. Hubkraft:
Max. Hubmoment:
Gewicht +V ohne 2/4
Krangewicht (R3X,STZS):
Technische Daten
Konstruktionsänderungen vorbehalten, fertigungstechn. Toleranzen müssen berücksichtigt werden.
Oil tank
Excess weight:
All weights given without assembly accessory,additional devices and oil.
Hydr. boom extensions:
Max. outreach + Fly-Jib:
Max. outreach:
Pump capacity:
Operating pressure:
Slewing torque:
Slewing angle:
Max. outreach:
Max. hydraulic outreach:
Max. lifting capacity:
Lifting moment:
Weight +V without 2/4
Crane weight (R3X,STZS):
Specifications
Subject to change, production tolerances have to be taken into account.
Réservoir
Excessif poids:
Tous les poids sans huile ni accessoire de montage ni appareils accessoires
Extensions hydrauliques:
Portee maximale + Fly-Jib:
Max. portee:
Debit de pompe:
Pression d' utilisation:
Couple de rotation:
Angle de rotation:
Max. portee:
Portee hydraulique maximale:
Capacite maxi de levage:
Couple de levage:
Poids +V sans 2/4
Poids grue (R3X,STZS):
Données Techniques
Sous reserve de modifications de conception. Les tolerances relatives a la technique de production doivent etre prises en consideration.
如您所见,"Lifting moment" 和所有其他丢失的标签现在都在那里。
我想为包含二进制和明文数据的文本解析 pdf。当我尝试使用 PdfReaderContentParser 时,GetResultantText 方法 returns 二进制内容的正确文本,但明文内容的空格。这是我使用的代码:
byte[] binaryPdf = File.ReadAllBytes(this.fileName);
reader = new PdfReader(binaryPdf);
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
for (int i = 1; i <= reader.NumberOfPages; i++)
{
SimpleTextExtractionStrategy simpleStragety = parser.ProcessContent(i, new SimpleTextExtractionStrategy());
string contentText = simpleStragety.GetResultantText();
// Do something with the contentText
// ...
}
知道如何获取所有内容吗?
概述
OP 在评论中澄清了他在提取的文本中遗漏了哪些文本:
Basically for all descriptions on the left-hand side (e.g. Lifting moment) I get whitespaces instead of the actual text.
原因很简单:在页面内容中,大部分左侧只有空格(如果有的话)。您实际看到的标签是只读表单域。
例如 "Lifting moment" 是表单字段的值 13B141032
。
如果您希望文本提取也包括这些字段,您应该考虑在第一步中展平文档(将字段外观移动到常规页面内容流中)并从此展平的文档中提取文本。
文件分析
看起来规范标签国际化的主要部分是使用表单字段完成的。
为了概览,我将原始文档分开了
进入其常规页面内容
和表单字段
表单域下的页面内容确实有几串空格
我会假设曾经有该文档的早期版本(或它的模板)包含这些标签(可能只有一种或两种语言)作为页面内容。
然后有一个更动态的国际化任务,所以有人用空格替换了页面内容中的现有标签,并添加了新的国际化标签作为只读表单字段,可能是因为表单字段更容易操作。
考虑到原始标签似乎已被相同数量的空格替换,但有人可能会推测甚至还有另一个程序在硬编码中操纵此文档和类似文档的页面流 offsets,并且为了在国际化过程中不破坏这个程序,实际的标签必须在页面内容之外创建。奇怪的事情发生了...
展平并提取
如上所述,如果您希望文本提取也包括这些字段,您应该考虑在第一步中将文档扁平化(将字段外观移动到常规页面内容流中)并从此扁平化文档中提取文本.可以这样做:
[Test]
public void ExtractFlattenedTextTestSeeb()
{
FileInfo file = new FileInfo(@"PATH_TO_FILE851208.pdf");
Console.Out.Write("41851208.pdf, flattened before extraction\n\n");
using (MemoryStream memStream = new MemoryStream())
{
using (PdfReader readerOrig = new PdfReader(file.FullName))
using (PdfStamper stamper = new PdfStamper(readerOrig, memStream))
{
stamper.Writer.CloseStream = false;
stamper.FormFlattening = true;
}
memStream.Position = 0;
using (PdfReader readerFlat = new PdfReader(memStream))
{
PdfReaderContentParser parser = new PdfReaderContentParser(readerFlat);
for (int i = 1; i <= readerFlat.NumberOfPages; i++)
{
SimpleTextExtractionStrategy simpleStragety = parser.ProcessContent(i, new SimpleTextExtractionStrategy());
string contentText = simpleStragety.GetResultantText();
Console.Write("Page {0}:\n\n{1}\n\n", i, contentText);
}
}
}
}
结果标准输出:
41851208.pdf, flattened before extraction
Page 1:
90–120 l/min
(23.8–31.7 US gal./min)
60 kg
(132 lbs)
115 kg
(254 lbs)
350 l
(92.5 US gal.)
100 kg 105 kg
(220 lbs) (231 kg)
100 kg
(220 lbs)
250 l 300 l
(66.0 US gal.) (79.3 US gal.)
90 kg
(198 lbs)
180 l
(47.6 US gal.)
5305kg
(11695 lbs)
5265kg
(11607 lbs)
5395kg
(11894 lbs)
5205kg
(11475 lbs)
5010kg
(11045 lbs)
4780kg
(10538 lbs)
4470kg
(9854 lbs)
4190kg
(9237 lbs)
3930kg
(8664 lbs)
5215kg
(11497 lbs)
5045kg
(11122 lbs)
4860kg
(10714 lbs)
4650kg
(10251 lbs)
4350kg
(9590 lbs)
4100kg
(9039 lbs)
3850kg
(8488 lbs)
25.2 m
(82’ 8")
23.2 m
(76’ 1")
21.0 m
(68’ 11")
18.7 m
(61’ 4")
16.4 m
(53’ 10")
14.1 m
(46’ 3")
11.8 m
(38’ 9")
9.7 m
(31’ 10")
7.7 m
(25’ 3")
36.5 MPa (365 bar)
(5293 psi)
endlos
endless
sans finite
25.2 m
31.2 m
(82’ 8")
(102’ 4")
21.0 m
(68’ 11")
14900kg
(32848 lbs)
403.2 kNm (41.1 mt)
(297270 ft.lbs)
49.1 kNm (5.0 mt)
PK 42002–SH A–G
(36210 ft.lbs)
37.3 kNm (3.8 mt)
PK 42002–SH A–C
(27510 ft.lbs)
1GETR 2GETR
PK 42002–SH A – C
KT250 KT300 KT350 KT180
2GETR STZY
+V1
+V2
+2/4
7(F) 8(G) 6(E) 5(D) 4(C) 3(B) 2(A)
+V1
+V2
(S410–SK–D)
DTS410SHC/03
0100
11/2010
PK 42002–SH
Type Model Modell
Page Page Seite
Chapitre Chapter Kapitel
Edition Edition Ausgabe
Öltank
Mehrgewicht:
Alle Gewichtsangaben ohne Aufbauzubehör,Zusatzgeräte und Öl.
Hydr. Ausschübe:
Max. Reichweite + Fly-Jib:
Max. Reichweite:
Fördermenge der Pumpe:
Betriebsdruck:
Schwenkmoment:
Schwenkbereich:
Max. Reichweite:
Max. hydraulische Reichweite:
Max. Hubkraft:
Max. Hubmoment:
Gewicht +V ohne 2/4
Krangewicht (R3X,STZS):
Technische Daten
Konstruktionsänderungen vorbehalten, fertigungstechn. Toleranzen müssen berücksichtigt werden.
Oil tank
Excess weight:
All weights given without assembly accessory,additional devices and oil.
Hydr. boom extensions:
Max. outreach + Fly-Jib:
Max. outreach:
Pump capacity:
Operating pressure:
Slewing torque:
Slewing angle:
Max. outreach:
Max. hydraulic outreach:
Max. lifting capacity:
Lifting moment:
Weight +V without 2/4
Crane weight (R3X,STZS):
Specifications
Subject to change, production tolerances have to be taken into account.
Réservoir
Excessif poids:
Tous les poids sans huile ni accessoire de montage ni appareils accessoires
Extensions hydrauliques:
Portee maximale + Fly-Jib:
Max. portee:
Debit de pompe:
Pression d' utilisation:
Couple de rotation:
Angle de rotation:
Max. portee:
Portee hydraulique maximale:
Capacite maxi de levage:
Couple de levage:
Poids +V sans 2/4
Poids grue (R3X,STZS):
Données Techniques
Sous reserve de modifications de conception. Les tolerances relatives a la technique de production doivent etre prises en consideration.
如您所见,"Lifting moment" 和所有其他丢失的标签现在都在那里。