java.lang.ClassCastException: com.itextpdf.text.pdf.PdfArray не может быть приведен к com.itextpdf.text.pdf.PRIndirectReference - PullRequest
0 голосов
/ 09 февраля 2012

java.lang.ClassCastException: com.itextpdf.text.pdf.PdfArray не может быть приведен к com.itextpdf.text.pdf.PRIndirectReference

Я получаю эту ошибку вПрограмма, которую я написал, чтобы преобразовать файл PDF в файл XML.Как это может быть вызвано и как я могу решить это?

`package pkgfinal.year;

 import java.io.*;
 import org.xml.sax.*;
 import javax.xml.parsers.*;
 import javax.xml.transform.*;
 import org.xml.sax.helpers.*;
 import javax.xml.transform.sax.*;
 import javax.xml.transform.stream.*;
 import com.itextpdf.text.*;
 import com.itextpdf.text.pdf.*;
 import com.lowagie.text.pdf.PRTokeniser;



 public class FinalYear {
    static StreamResult streamResult;
    static TransformerHandler handler;
    static AttributesImpl atts;

    public static void main(String[] args) throws IOException {

            try {
                    Document document = new Document();
                    document.open();
                   FileInputStream fis = new FileInputStream("TestFiles/test.pdf"); 
                    PdfReader reader = new PdfReader(fis);
                    PdfDictionary page = reader.getPageN(1);
                    PRIndirectReference objectReference = (PRIndirectReference)         page.get(PdfName.CONTENTS);
                    PRStream stream = (PRStream) PdfReader
                                    .getPdfObject(objectReference);
                    byte[] streamBytes = PdfReader.getStreamBytes(stream);
                    PRTokeniser tokenizer = new PRTokeniser(streamBytes);

                    StringBuilder strbufe = new StringBuilder();
                    while (tokenizer.nextToken()) {
                            if (tokenizer.getTokenType() == PRTokeniser.TK_STRING) {
                                    strbufe.append(tokenizer.getStringValue());
                            }
                    }
                    String test = strbufe.toString();
                    streamResult = new StreamResult("TestFiles/output1.xml");
                    initXML();
                    process(test);
                    closeXML();
                    document.add(new Paragraph(".."));
                    document.close();
            } catch (Exception e) {
                System.out.print(e);
            }
    }

    public static void initXML() throws ParserConfigurationException,
                    TransformerConfigurationException, SAXException {
            SAXTransformerFactory tf = (SAXTransformerFactory) SAXTransformerFactory
                            .newInstance();

            handler = tf.newTransformerHandler();
            Transformer serializer = handler.getTransformer();
            serializer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
            serializer.setOutputProperty(
                            "{http://xml.apache.org/xslt}indent-amount", "4");
            serializer.setOutputProperty(OutputKeys.INDENT, "yes");
            handler.setResult(streamResult);
            handler.startDocument();
            atts = new AttributesImpl();
            handler.startElement("", "", "Title", atts);
    }

    public static void process(String s) throws SAXException {
            String[] elements = s.split("\\|");
            atts.clear();
            handler.startElement("", "", "Message", atts);
            handler.characters(elements[0].toCharArray(), 0, elements[0].length());
            handler.endElement("", "", "Message");
    }

    public static void closeXML() throws SAXException {
            handler.endElement("", "", "Title");
            handler.endDocument();
    }
 }

выше приведен код, который выдает ошибку.Строка, которая показывает ошибку, отмечена двойной звездочкой или выделена жирным шрифтом.Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 01 апреля 2012

Из кода видно, что вы пытаетесь присвоить возвращаемое значение page.get(PdfName.CONTENTS); PRIndirectReference, которое вызывает исключение ClassCastException.Это означает, что page.get(..) не возвращает объект типа PRIndirectReference или любого его типа подклассов.

Вам, вероятно, нужно добавить подходящий тип оболочки, который возвращает правильный тип класса или подкласса, которыйможно привести к PRIndirectReference.Просматривая документацию 'itextpdf', я думаю, вы собирались использовать класс PDFIndirectReference и в итоге использовали неправильный класс.

0 голосов
/ 09 февраля 2012

Вы пытаетесь привести класс PdfArray к классу PRIndirectReference.

Если бы вы предоставили код, который делает это, будет оказана дополнительная помощь, но, глядя на сообщение об ошибке в его нынешнем виде, вы пытаетесь привести один класс к другому, для которого невозможно создать экземпляр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...