利用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中文網其他相關文章!