我在C#获胜form申请中使用iTextSharp。 我想在人民抵抗力量的档案中找到一个段落。 这在ITextSharp是否可行?
What is the use of default keyword in C#? Is it introduced in C# 3.0 ?
我在C#获胜form申请中使用iTextSharp。 我想在人民抵抗力量的档案中找到一个段落。 这在ITextSharp是否可行?
是的,不是。
第一段。 PDF格式没有文字结构的概念,如段落、判决甚至字句,它只是行文。 两种案文几乎相互接近,以便我们认为其结构是人为的。 当你看到国防军中三个字段时,实际上,产生国防军的方案实际上把案文分为三个不相关的文字线,然后将每一条线打到具体的Xy坐标。 更糟糕的是,视设计者所欲为,每一行案文可能由较小的行文组成,这些行文可以是说话,甚至是公正的。 因此,可在10、10、10、10、10、10、14、10、8、18、10、18、10、18、10、0、0、10、0、0、0、0、0、0、0、0、0、0、1、3、4、5、4、5、5、5、5、5、5、6、5、5、5、6、7、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5 这实际上与Adobe InDesign等精心设计的方案的国防军相当常见。
现在是。 其实,它可能是大的。 如果你愿意做些什么工作,你就能够做你所期待的工作。 有一个称为<代码>PdfTexttractor的类别,其方法称为GetTextFromPage
,所有原始文本都将从一个网页上获取。 这种方法的最后参数是实施<代码>技术推广战略>接口的物体。 如果你创建自己的班子来实施这一接口,你就可以处理每一行文,并履行自己的逻辑。
在这一接口中,采用了一种称为<代码>RenderText的方法,每个版本都需要使用。 页: 1 您从中获取原始案文的物体,以及像目前座标开始的原体、现线等其它东西。 由于案文的直观线可以由多管构成,因此,你可以采用这种方法将运行的基线(起点×协调)与以往的操作进行比较,以确定其是否属于同一视线。
以下是实施这一接口的一个实例:
public class TextAsParagraphsExtractionStrategy : iTextSharp.text.pdf.parser.ITextExtractionStrategy {
//Text buffer
private StringBuilder result = new StringBuilder();
//Store last used properties
private Vector lastBaseLine;
//Buffer of lines of text and their Y coordinates. NOTE, these should be exposed as properties instead of fields but are left as is for simplicity s sake
public List<string> strings = new List<String>();
public List<float> baselines = new List<float>();
//This is called whenever a run of text is encountered
public void RenderText(iTextSharp.text.pdf.parser.TextRenderInfo renderInfo) {
//This code assumes that if the baseline changes then we re on a newline
Vector curBaseline = renderInfo.GetBaseline().GetStartPoint();
//See if the baseline has changed
if ((this.lastBaseLine != null) && (curBaseline[Vector.I2] != lastBaseLine[Vector.I2])) {
//See if we have text and not just whitespace
if ((!String.IsNullOrWhiteSpace(this.result.ToString()))) {
//Mark the previous line as done by adding it to our buffers
this.baselines.Add(this.lastBaseLine[Vector.I2]);
this.strings.Add(this.result.ToString());
}
//Reset our "line" buffer
this.result.Clear();
}
//Append the current text to our line buffer
this.result.Append(renderInfo.GetText());
//Reset the last used line
this.lastBaseLine = curBaseline;
}
public string GetResultantText() {
//One last time, see if there s anything left in the buffer
if ((!String.IsNullOrWhiteSpace(this.result.ToString()))) {
this.baselines.Add(this.lastBaseLine[Vector.I2]);
this.strings.Add(this.result.ToString());
}
//We re not going to use this method to return a string, instead after callers should inspect this class s strings and baselines fields.
return null;
}
//Not needed, part of interface contract
public void BeginTextBlock() { }
public void EndTextBlock() { }
public void RenderImage(ImageRenderInfo renderInfo) { }
}
我们:
PdfReader reader = new PdfReader(workingFile);
TextAsParagraphsExtractionStrategy S = new TextAsParagraphsExtractionStrategy();
iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(reader, 1, S);
for (int i = 0; i < S.strings.Count; i++) {
Console.WriteLine("Line {0,-5}: {1}", S.baselines[i], S.strings[i]);
}
我们实际上从<代码>GetTextFromPage中删除了价值,而是对工人的<代码>底线<>/代码>和<编码>进行了检测。 下一步是比较基线,并设法确定如何将线段合并成段落。
我应该指出,并非所有段落的间隔都不同于个别案文。 例如,如果你通过上述法典管理以下的PDF,那么你就会发现,每一行的案文都彼此相距18点,不论该行文是否构成新的段落。 如果你们打开人民抵抗力量,它就在缩略语中产生,并涵盖除每一行的第一封信外的一切,你就会看到,你的眼睛甚至可以说明一条线的中断和一段的中断之间的区别。
using (FileStream fs = new FileStream(workingFile, FileMode.Create, FileAccess.Write, FileShare.None)) {
using (Document doc = new Document(PageSize.LETTER)) {
using (PdfWriter writer = PdfWriter.GetInstance(doc, fs)) {
doc.Open();
doc.Add(new Paragraph("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas porttitor congue massa. Fusce posuere, magna sed pulvinar ultricies, purus lectus malesuada libero, sit amet commodo magna eros quis urna."));
doc.Add(new Paragraph("This"));
doc.Add(new Paragraph("Is"));
doc.Add(new Paragraph("A"));
doc.Add(new Paragraph("Test"));
doc.Close();
}
}
}
What is the use of default keyword in C#? Is it introduced in C# 3.0 ?
I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...
I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...
I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...
I have two EF entities. One has a property called HouseNumber. The other has two properties, one called StartHouseNumber and one called EndHouseNumber. I want to create a many to many association ...
How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...
Since I cannot order my dictionary, what is the best way of going about taking key value pairs and also maintaing an index?
Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...