2012-07-13 3 views
0

나는 각각 150 ~ 200,000 페이지를 포함하는 매우 큰 PDF 파일을 분할해야하는 프로젝트가 있습니다. 현재 iTextSharp DLL을 사용하여 Adobe Reader에서 만들 수있는 "표준"책갈피가있는 일부 PDF를 분할합니다. 또한 PDFsharp를 사용하여 이러한 "표준"책갈피가없는 PDF에서 텍스트를 추출하면 데이터베이스에서 키워드를 파싱하고 더 작은 PDF로 분할합니다. 그러나 첫 번째 방법과는 반대로 은 매우입니다.iTextSharp 및 PDFsharp를 사용하여 PDF의 내부에서 값의 사전을 가져 오기


"표준"책갈피가없는 PDF에는 색인/책갈피가 있습니다. 문제는 SOLindexer (Link to product page)에 의해 생성된다는 것입니다. 내부 COS 트리에서 이러한 색인/책갈피를 찾을 수있었습니다. PDF의 내부 구조 내에서 내가 원하는 곳으로가는 경로는 "trailer/Info/SSEDictionary/Document_MemberStatements"입니다. 이 전화 번호부 안에 (나는 전화 할 수있는 경우에) 나는 - DATA-를 클릭 할 수 있고 필요한 계좌 번호, 이름, 모든 것을 포함하는 메모장 파일을 열 수있다. (물론 형식은 이상하지만 읽을 수있다.) 나는 이것이 내가 사전에 넣을 수있는 가치라고 믿는다. 나는에서 SSEDictionary 내용을 얻기 위해 아무것도 할 수 있기

당신은, 예를 들어, 수행하여 var stuff = reader.Info.Values 혹은 var stuff = reader.Info.Keys을 정보 섹션에 액세스 할 수있어 iTextSharp 및 PDFsharp에서

하지만, 사람들은 막 다른 골목 될 듯 그곳에. iTextSharp는 예고편을 볼 수있게 해 주었고 거기에서 열쇠를 얻을 수 있었지만 과거에는 가장 낮은 수준까지 드릴 다운하지 못했습니다.

PdfSharp.Pdf.PdfDocument inputDocument = PdfSharp.Pdf.IO.PdfReader.Open(MapPath("PDFs/Member Statements/06-2012.pdf"), PdfDocumentOpenMode.ReadOnly); 
PdfSharp.Pdf.PdfDictionary dictionary = (PdfSharp.Pdf.PdfDictionary)inputDocument.Internals.Catalog.Elements.GetObject("/Outlines"); 
그러나

, 내 현재의 상황과 경로를이 적응하는 방법을 알아낼 수있게되지 않은 : 나는 내부에서 일을과 같이 PDFsharp 사용하여 얻을 수있는 방법이 있다는 것을 알고있다 또한, 나는 iTextSharp (두 라이브러리 중 가장 좋아하는 것)에서 이것을 정확하게 수행하는 방법을 확실히 알지 못합니다. 따라서, 내 질문은 : 어떻게 정확히 당신이 사전에 코드를 (내가 열어 본 텍스트 파일에있는 모든 것들을 믿는) 얻을 것이라고? 또한, 그 코드는 어떻게 생겼을까요? 필자는 PDF의 내부 구조를 제대로 이해하고 있지만 필자는 거기에 도달하는 방법을 잘 모르고 있습니다. 감사!

+1

짧고 간결한 프로그래밍 관련 질문으로이 벽을 바꾸시겠습니까? –

+0

나는 그 일을하는 동안 그것에 대해 생각했지만 더 이상 내 상황을 더 자세히 설명 할 수는 없다고 생각합니다. –

+0

별개의 단락으로 나누는 비트는 이미 다소 도움이 될 것입니다 ... –

답변

0

PDFVole은 PDF 파일의 내부 구조를 탐색 할 수있는 iText를 기반으로하는 오픈 소스 도구입니다. 소스 코드를보고 아이디어를 얻을 수 있을까요? 내가 너라면이 책부터 시작해 보겠다. PDFTreeParser.java

+0

이것은 좋은 일이지만, 나를 거기에 데려다주지는 않습니다. 제가 정말로 관심을 갖는 부분은 트리의 하단에있는 데이터를 사전에 넣을 수 있는지 아닌지에 있습니다. PDFvole은/Info 또는/Size와 같은 트리 노드의 이름 만 잡는 것처럼 보이지만 여전히 바닥에 도달 할 수는 없습니다. 그래도 고마워. –

+0

프로그램을 실제로 사용 했습니까? 당신의 가정은 당신이하지 않았다고 제안합니다 ... – yms

+0

저는 실제로 그것을 사용했고, 제가 필요로하는 매개 변수를 볼 수 있습니다. 그들은/ACCT_NUMBER 및/CUSTOMER_NAME이라고 불리며/SOLIINDEXDICT 아래에 있습니다. 실제로 사용할 수있는 사전에이 값을 실제로 읽는 방법을 알려주지 않습니다. –

관련 문제