java.lang.ClassCastException:com.itextpdf.text.pdf.PdfArray不



java.lang.ClassCastException:com.itextpdf.text.pdf.PdfArray不能强制转换为com.itextpdf.text.pdf.PRIIndirectReference

我在我编写的将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();
    }
 }

以上是引发错误的代码。显示错误的行是双星号或粗体。请帮忙!

您正试图将PdfArray类强制转换为PRIndirectReference类。

如果您提供了执行此操作的代码,将会有更多的帮助,但查看当前的错误消息,您正试图将一个类强制转换为另一个无法从中实例化的类。

我从代码中看到的是,您试图将page.get(PdfName.CONTENTS);的返回值分配给PRIndirectReference,这将引发ClassCastException。这推断出page.get(..)没有返回PRIndirectReference类型或其任何子类类型的对象。

您可能需要在这里添加一种合适的包装器,它返回可以强制转换为PRIndirectReference的适当类型的类或子类。浏览"itextpdf"文档时,我认为您正要使用PDFIndirectReference类,但最终使用了错误的类。

最新更新