Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2017, 08:53   #1
ZLoY_valinok
Новичок
Джуниор
 
Регистрация: 27.04.2017
Сообщений: 2
По умолчанию [#document: null] Нужна помощь!

Доброго времени суток! Я пытаюсь конвертировать PDF-файл из HTML-файла. Наткнулся на следующую проблему:
На шаге преобразования XHTML в XSL-FO после выполнения:
Код:
Document xslDoc = dBuilder.parse(styleSheet);
выдает что xslDoc = [#document: null], вследствие чего создается пустой PDF-файл. Не могу понять почему так происходит, и как это исправить. Буду благодарен за помощь!
Код данного метода:
Код:
private static Transformer getTransformer(String styleSheet) {
        try {
            TransformerFactory tFactory = TransformerFactory.newInstance();
            DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
 
            dFactory.setNamespaceAware(true);
 
            DocumentBuilder dBuilder = dFactory.newDocumentBuilder();
            Document xslDoc = dBuilder.parse(styleSheet);
            DOMSource xslDomSource = new DOMSource(xslDoc);
 
            return tFactory.newTransformer(xslDomSource);
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
            return null;
        } catch (SAXException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
            return null;
        }
    }
Код всего класса:
Код:
import org.apache.avalon.framework.logger.ConsoleLogger;
import org.apache.avalon.framework.logger.Logger;
import org.apache.fop.apps.Driver;
import org.apache.fop.tools.DocumentInputSource;
import org.w3c.dom.Document;
import org.w3c.tidy.Tidy;
import org.xml.sax.SAXException;
 
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;
import java.io.*;
 
public class Converter {
 
public static void main(String[] args) {
 
        FileInputStream input = null;
        String htmlFileName = "R:\\Projects\\JavaConventer\\hello.html";
        try {
            input = new FileInputStream(htmlFileName);
        } catch (FileNotFoundException e) {
            System.out.println("File not found " + htmlFileName);
        }
 
        Tidy tidy = new Tidy();
        Document xmlDoc = tidy.parseDOM(input, null);
        Document foDoc = xml2FO(xmlDoc, "./Templates/xhtml2fo.xsl");
 
        if (foDoc == null) {
            System.out.println("Document is null");
        }
 
        String pdfFileName = htmlFileName.substring(0, htmlFileName.indexOf(".")) + ".pdf";
        try {
            OutputStream pdf = new FileOutputStream(new File(pdfFileName));
            pdf.write(fo2PDF(foDoc));
        } catch (FileNotFoundException e) {
            System.out.println("Error creating PDF: " + pdfFileName);
        } catch (IOException e) {
            System.out.println("Error writing PDF: " + pdfFileName);
        }
    }
 
    private static Document xml2FO(Document xml, String styleSheet) {
        DOMSource xmlDomSource = new DOMSource(xml);
        DOMResult domResult = new DOMResult();
 
        Transformer transformer = getTransformer(styleSheet);
 
        if (transformer == null) {
            System.out.println("Error creating transformer for " + styleSheet);
            System.exit(1);
        }
        try {
            transformer.transform(xmlDomSource, domResult);
        } catch (TransformerException e) {
            return null;
        }
        return (Document) domResult.getNode();
 
    }
 
    private static byte[] fo2PDF(Document foDocument) {
        DocumentInputSource fopInputSource = new DocumentInputSource(foDocument);
 
        try {
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            Logger logger = new ConsoleLogger(ConsoleLogger.LEVEL_DEBUG);
 
            Driver driver = new Driver(fopInputSource, out);
            driver.setLogger(logger);
            driver.setRenderer(Driver.RENDER_PDF);
            driver.run();
 
            return out.toByteArray();
        } catch (Exception ex) {
            return null;
        }
    }
    //
    private static Transformer getTransformer(String styleSheet) {
        try {
            TransformerFactory tFactory = TransformerFactory.newInstance();
            DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
 
            dFactory.setNamespaceAware(true);
 
            DocumentBuilder dBuilder = dFactory.newDocumentBuilder();
            Document xslDoc = dBuilder.parse(styleSheet);
            DOMSource xslDomSource = new DOMSource(xslDoc);
 
            return tFactory.newTransformer(xslDomSource);
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
            return null;
        } catch (SAXException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
            return null;
        }
    }
}
ZLoY_valinok вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
разница между this(null) и this.text = null Lama Under Cover Общие вопросы по Java, Java SE, Kotlin 1 11.12.2016 15:35
Сервер отправляет объект не null, а клиент принимает null (C# WCF) NewLamer&Programer Общие вопросы .NET 3 22.04.2016 18:55
Очень нужна помощь c матрицами, макросами в Excel. Заранее благодарен(поверьте, очень-очень нужна помощь) Farridjan Помощь студентам 1 03.07.2009 12:24
Очень нужна помощь с написанием программы... срочно(буду благодарен за помощь) 5Paladin5 Помощь студентам 3 02.07.2009 09:12
Нужна помощь. Extez1 Помощь студентам 12 03.05.2009 18:07