0
我正在使用ITextSharp嘗試解析PDF我無法控制。它不使用AcroForm,但它使用複選框的圖像。我可以自己查找並提取兩個複選框圖像(已選中或未選中),但我無法弄清楚如何獲取這些圖像的引用。如何找出哪些圖像是PDF中的哪些圖像?
如何找出每張圖片被引用的次數以及引用的放置位置?
我正在使用ITextSharp嘗試解析PDF我無法控制。它不使用AcroForm,但它使用複選框的圖像。我可以自己查找並提取兩個複選框圖像(已選中或未選中),但我無法弄清楚如何獲取這些圖像的引用。如何找出哪些圖像是PDF中的哪些圖像?
如何找出每張圖片被引用的次數以及引用的放置位置?
我找到一種方式來獲得我需要的東西通過IRenderListener,開始與此評論:http://3d.5341.com/list/27/1036159.html
public static void Main()
{
string inputStream = "whatever.pdf";
PdfReader reader = new PdfReader(inputStream);
var parser = new PdfReaderContentParser(reader);
var imgScan = new FormListener();
for (int i=1; i<=reader.NumberOfPages; ++i)
parser.ProcessContent(1, imgScan);
reader.Close();
foreach (var r in imgScan.CheckBoxBoxes)
{
r.Dump();
}
}
public class CheckboxBox
{
public CheckboxBox()
{
this.CheckboxStates = new List<bool>();
}
public string Name { get;set; }
public List<bool> CheckboxStates {get;set;}
}
public class FormListener : IRenderListener
{
public List<CheckboxBox> CheckBoxBoxes { get;set;}
private CheckboxBox m_CurrentCheckboxBox { get;set;}
public FormListener()
{
this.CheckBoxBoxes = new List<CheckboxBox>();
this.BeginNewBox();
}
public void BeginTextBlock() {}
public void EndTextBlock() {}
private void BeginNewBox()
{
this.m_CurrentCheckboxBox = new CheckboxBox();
this.CheckBoxBoxes.Add(this.m_CurrentCheckboxBox);
}
private bool IsNewBoxStarting(TextRenderInfo renderInfo)
{
return Regex.IsMatch(renderInfo.GetText(), @"\d+\.");
}
public void RenderText(TextRenderInfo renderInfo) {
if (this.IsNewBoxStarting(renderInfo))
BeginNewBox();
this.m_CurrentCheckboxBox.Name += renderInfo.GetText() + " ";
}
private bool GetCheckboxState(ImageRenderInfo renderInfo)
{
var n = renderInfo.GetRef().Number;
return n == 21; // MagicNumberOfYesCheckboxImage;
}
public void RenderImage(ImageRenderInfo renderInfo)
{
this.m_CurrentCheckboxBox.CheckboxStates.Add(this.GetCheckboxState(renderInfo));
}
}