Excel에서 PDF 만들기 → iText로 태그 정보 가져오기

11677 단어 iTextExcel자바PDF
보통은 Excel 형식으로 저장하고 POI로 읽는 경우가 많지만, 번역되어 PDF 형식으로 저장한 경우에도 테이블 형식의 태그 정보가 저장되므로 여기에서 값을 얻을 수 있다.

Java 소스



라이브러리는 iText를 사용.
태그 구조의 로드는 TaggedPdfReaderTool 클래스에서 실시한다.
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.xml.sax.SAXException;

import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.TaggedPdfReaderTool;

public class ReadPdf {
    public static void main(String[] args) {
        PdfReader reader = null;
        try {
            // PDFの読み込み
            reader = new PdfReader("Book1.pdf");

            // 構造化タグの取得
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            TaggedPdfReaderTool taggedReader = new TaggedPdfReaderTool();
            taggedReader.convertToXml(reader, out, "UTF-8");

            // DOMの生成
            DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            Document doc = builder.parse(new ByteArrayInputStream(out.toByteArray()));

            // ファイルに書き込む
            Transformer tf = TransformerFactory.newInstance().newTransformer();
            tf.setOutputProperty(OutputKeys.INDENT, "yes");
            tf.setOutputProperty(OutputKeys.METHOD, "xml");
            tf.setOutputProperty("{http://xml.apache.org/xalan}indent-amount", "4");
            tf.transform(new DOMSource(doc), new StreamResult(new File("Book1.xml")));
        } catch (IOException | ParserConfigurationException | SAXException | TransformerException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                reader.close();
            }
        }
    }
}

Excel 파일





다른 이름으로 저장> PDF 마하타 XPS> 옵션> "액세서빌러티 용 문서 구조 태그"를 확인하고 저장.


PDF에서 얻은 태그 구조



HTML 테이블과 같은 태그 구조입니다.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Workbook>
    <Worksheet>
        <Table>
            <TR>
                <TD>
                    <P>ABC Report</P>
                </TD>
            </TR>
            <TR>
                <TD>
                    <P>2014/3/24</P>
                </TD>
            </TR>
            <TR>
                <TD>
                    <P>Goup1</P>
                </TD>
            </TR>
            <TR>
                <TD>
                    <P>Item1-1</P>
                </TD>
                <TD>
                    <P>Value1-1</P>
                </TD>
            </TR>
            <TR>
                <TD>
                    <P>Item1-2</P>
                </TD>
                <TD>
                    <P>Value1-2</P>
                </TD>
            </TR>
            <TR>
                <TD>
                    <P>Group2</P>
                </TD>
            </TR>
            <TR>
                <TD>
                    <P>Item2-1</P>
                </TD>
                <TD>
                    <P>Value2-1</P>
                </TD>
            </TR>
            <TR>
                <TD>
                    <P>Item2-2</P>
                </TD>
                <TD>
                    <P>Value2-2</P>
                </TD>
            </TR>
        </Table>
    </Worksheet>
</Workbook>

표로하면 이런 느낌
※ 공백 셀은 출력되지 않으므로 열이 어긋나 있음에 주의


열 1
열 2


ABC Report

2014/3/24

Goup1

Item1-1
Value1-1

Item1-2
Value1-2

Goup2

Item2-1
Value2-1

Item2-2
Value2-2

좋은 웹페이지 즐겨찾기