利用iTextSharp获取文本格式信息
iTextSharp提供了一个简单的文本提取系统,可以处理一些基本的标记。虽然它不处理颜色信息,但您可以自己实现此功能。以下是一个修改后的代码片段,它结合了各种问题和答案,将文本作为HTML提取,同时捕获字体信息,包括大小和粗体:
<code class="language-csharp">using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using iTextSharp.text.pdf.parser; using iTextSharp.text.pdf; namespace WindowsFormsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { PdfReader reader = new PdfReader("Document.pdf"); TextWithFontExtractionStategy S = new TextWithFontExtractionStategy(); string F = iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(reader, 1, S); Console.WriteLine(F); this.Close(); } public class TextWithFontExtractionStategy : iTextSharp.text.pdf.parser.ITextExtractionStrategy { //HTML缓冲区 private StringBuilder result = new StringBuilder(); //存储最后使用的属性 private Vector lastBaseLine; private string lastFont; private float lastFontSize; //http://api.itextpdf.com/itext/com/itextpdf/text/pdf/parser/TextRenderInfo.html private enum TextRenderMode { FillText = 0, StrokeText = 1, FillThenStrokeText = 2, Invisible = 3, FillTextAndAddToPathForClipping = 4, StrokeTextAndAddToPathForClipping = 5, FillThenStrokeTextAndAddToPathForClipping = 6, AddTextToPaddForClipping = 7 } public void RenderText(iTextSharp.text.pdf.parser.TextRenderInfo renderInfo) { string curFont = renderInfo.GetFont().PostscriptFontName; //检查是否使用了伪粗体 if ((renderInfo.GetTextRenderMode() == (int)TextRenderMode.FillThenStrokeText)) { curFont += "-Bold"; } //此代码假设如果基线发生变化,则表示换行 Vector curBaseline = renderInfo.GetBaseline().GetStartPoint(); Vector topRight = renderInfo.GetAscentLine().GetEndPoint(); iTextSharp.text.Rectangle rect = new iTextSharp.text.Rectangle(curBaseline[Vector.I1], curBaseline[Vector.I2], topRight[Vector.I1], topRight[Vector.I2]); Single curFontSize = rect.Height; //查看是否有任何更改,例如基线、字体或字体大小 if ((this.lastBaseLine == null) || (curBaseline[Vector.I2] != lastBaseLine[Vector.I2]) || (curFontSize != lastFontSize) || (curFont != lastFont)) { //如果我们已经放置了一个span标签,则关闭它 if ((this.lastBaseLine != null)) { this.result.AppendLine(""); } //如果基线已更改,则插入换行符 if ((this.lastBaseLine != null) & curBaseline[Vector.I2] != lastBaseLine[Vector.I2]) { this.result.AppendLine("<br />"); } //创建具有适当样式的HTML标签 this.result.AppendFormat("</code>
使用此代码,您可以从PDF文档中提取文本,同时还可以捕获字体属性,例如字体系列、大小和粗体。 代码片段不完整,需要补充<span>
标签的创建和闭合以及文本内容的添加才能完整运行。
以上是如何使用 iTextSharp 从 PDF 中提取文本格式信息?的详细内容。更多信息请关注PHP中文网其他相关文章!