PDF로 작업하고 iTexhSharp를 사용하고 있습니다. 지금까지 특정 영역에서 데이터를 가져올 수있었습니다. 하지만, 원하는 단어의 첫 번째 문자 (또는 숫자)의 코디네이터를 찾은 다음 해당 코디네이터에서 원하는 단어 주변을 자르기 위해 직사각형을 만들어보다 유연하게 만들고 싶습니다. 누구든지 저에게 짧은 모범을 줄 수 있다면 좋을 것입니다. 고맙습니다.iTextSharp를 사용하여 PDF의 특정 문자에서 코디네이터 (x, y)를 얻는 방법은 무엇입니까?
1
A
답변
1
기본 아이디어는 IEventListener를 사용하여 TextRenderInfo 이벤트를 알리는 것입니다. 그런 다음 이들을 CharacterRenderInfo로 분할 한 다음 각각의 경계 상자를 요청하십시오.
class CharacterRenderInfoGetter implements IEventListener {
private List<CharacterRenderInfo> characterRenderInfoList = new ArrayList<>();
@Override
public void eventOccurred(IEventData iEventData, EventType eventType) {
if(eventType == EventType.RENDER_TEXT)
{
TextRenderInfo tri = (TextRenderInfo) iEventData;
for(TextRenderInfo subTri : tri.getCharacterRenderInfos())
{
characterRenderInfoList.add(new CharacterRenderInfo(subTri));
}
}
}
public List<CharacterRenderInfo> getCharacterRenderInfoList()
{
java.util.Collections.sort(characterRenderInfoList);
return characterRenderInfoList;
}
@Override
public Set<EventType> getSupportedEvents() {
return null;
}
}
당신은 다음과 같이이 클래스를 사용할 수 있습니다
File inputFile = getInputFiles()[0]; // provide your own implementation of course
// create an iText PdfDocument out of the File
PdfDocument pdfDocument = new PdfDocument(new PdfReader(inputFile));
// construct the IEventListener that will measure character distances
CharacterRenderInfoGetter characterRenderInfoGetter = new CharacterRenderInfoGetter();
PdfCanvasProcessor processor = new PdfCanvasProcessor(characterRenderInfoGetter);
/* Here we explicitly tell the IEventListener to process page 1 (the first page of the document
* you can loop over all pages if you want to repeat this
*/
processor.processPageContent(pdfDocument.getPage(1));
이 코드는 자바로 작성된 것입니다 알고있다. 그러나. NET 동등한 매우 유사해야합니다. 적어도 의사 코드는 좋은 것입니다.
+0
감사 드리겠습니다. D – tumsd923
5.5.x 또는 7.0.x 중 어떤 iText 버전을 사용합니까? – mkl
@mkl 5.5.x를 사용 중입니다. – tumsd923
Ah. Joris의 대답은 iText 7을 사용합니다. – mkl