2015-03-16 6 views
0

Я создаю простой процесс с использованием TIBCO BusinessWork и пытаюсь преобразовать HTML-файл в файл PDF.Преобразование HTML в PDF с использованием проекта Apop FOP в TIBCO BW

Я скачал и добавил Apache FOP в качестве псевдонима библиотеки для моего проекта, и написал следующий код:

package ProcessDefinition; 
import java.util.*; 
import java.io.*; 
import org.apache.fop.apps.FopFactory; 
import org.apache.fop.apps.Fop; 
import org.apache.fop.apps.MimeConstants; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.stream.StreamSource; 
import javax.xml.transform.sax.SAXResult; 

public class ProcessDefinitionJavaCode{ 
/****** START SET/GET METHOD, DO NOT MODIFY *****/ 
    protected String htmlBinary = ""; 
    protected String outputPath = ""; 
    public String gethtmlBinary() { 
     return htmlBinary; 
    } 
    public void sethtmlBinary(String val) { 
     htmlBinary = val; 
    } 
    public String getoutputPath() { 
     return outputPath; 
    } 
    public void setoutputPath(String val) { 
     outputPath = val; 
    } 
/****** END SET/GET METHOD, DO NOT MODIFY *****/ 
    public ProcessDefinitionJavaCode() { 
    } 
    public void invoke() throws Exception { 
/* Available Variables: DO NOT MODIFY 
    In : String htmlBinary 
    In : String outputPath 
* Available Variables: DO NOT MODIFY *****/ 

FopFactory fopFactory = FopFactory.newInstance(); 

// Step 2: Set up output stream. 
// Note: Using BufferedOutputStream for performance reasons (helpful with FileOutputStreams). 
OutputStream out = new BufferedOutputStream(new FileOutputStream(new File(outputPath))); 

try { 
    // Step 3: Construct fop with desired output format 
    Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out); 

    // Step 4: Setup JAXP using identity transformer 
    TransformerFactory factory = TransformerFactory.newInstance(); 
    Transformer transformer = factory.newTransformer(); // identity transformer 

    // Step 5: Setup input and output for XSLT transformation 
    // Setup input stream 
    StreamSource src = new StreamSource(new File(htmlPath)); 

    // Resulting SAX events (the generated FO) must be piped through to FOP 
    SAXResult res = new SAXResult(fop.getDefaultHandler()); 

    // Step 6: Start XSLT transformation and FOP processing 
    transformer.transform(src, res); 

} finally { 
    //Clean-up 
    out.close(); 
}} 
} 

К сожалению, я получаю следующее исключение:

BW-JAVA-100001 Job-24000 Error in [Process Definition.process/Java Code] 
While executing [invoke] encountered [java.lang.ExceptionInInitializerError] : [null at org.apache.fop.events.DefaultEventBroadcaster.loadModel(DefaultEventBroadcaster.java:88)] 

Я убедился, что добавил все соответствующие псевдонимы, и я не могу понять, чего мне здесь не хватает.

Кроме того, цель PDF создается с помощью следующего содержания:

%PDF-1.4 
%клмн 

Я пытаюсь преобразовать следующий HTML:

<html> 
<body> 

<h1>My First Heading</h1> 

<p>My first paragraph.</p> 

</body> 
</html> 
+0

Вы имели в виду DefaultEventBroadcaster.java строку 88? –

+0

Просмотрев эту ссылку: http://grepcode.com/file/repo1.maven.org/maven2/org.apache.xmlgraphics/fop/1.1/org/apache/fop/events/DefaultEventBroadcaster.java I ' ve заметил, что строка: return EventModelParser.parse (новый StreamSource (in)); – ohadinho

+0

Я прикрепил простой html, который я пытаюсь преобразовать – ohadinho

ответ

0

несколько возможных решений:

  1. Версия для обновления ApacheFOP (например, один веб-сайт сказал, что v1.0.16 включил в себя модель события xml)

  2. Исправить вашу версию ApacheFOP: получить более раннюю версию, содержащую XML-файл. Узнайте, в каком каталоге он находится. Распакуйте свой ApacaheFOP JAR и поместите xml в правильный каталог, переупаковать

  3. Форум Hassle ApacheFOP для исправления сборки.

 Смежные вопросы

  • Нет связанных вопросов^_^