2011-02-08 5 views
2

Я пытаюсь преобразовать HTMLl-файл в PDF. Для этого я использую iText. Если HTML имеет какое-то изображение в своем теле, iText не может поместить это изображение в PDF-файл, и это вызывает следующее исключение.Преобразование HTML в PDF с использованием iText

ExceptionConverter: java.io.FileNotFoundException: D:\cid:[email protected] (The system cannot find the file specified).

Если HTML имеет некоторый образ в его теле, можно прочитать, что изображение и сделать его в качестве приложения к этому PDF файл? Вот мой исходный код (Truncate.java):

import java.io.BufferedReader; 
import java.io.DataInputStream; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 

import com.lowagie.text.Document; 
import com.lowagie.text.DocumentException; 
import com.lowagie.text.Element; 
import com.lowagie.text.Paragraph; 
import com.lowagie.text.html.simpleparser.HTMLWorker; 
import com.lowagie.text.pdf.PdfWriter; 

public class Truncate { 
    public static void main(String[] args) throws DocumentException { 
     // TODO Auto-generated method stub 
     FileReader fr = null; 
     Document document = new Document(); 
     document.open(); 
     PdfWriter writer = null; 
     try { 
      String file_name = "C:\\Documentum\\Viewed\\911.htm"; 
      fr = new FileReader(file_name); 
      PdfWriter.getInstance(document, System.out); 
      writer = PdfWriter.getInstance(document, new FileOutputStream(
        "C:\\Documentum\\Viewed\\RH\\RH.pdf")); 
      document.add(new Paragraph("RH Mail")); 
      ArrayList htmlContentList = HTMLWorker.parseToList(fr, null); 

      //fetch the html content line by line 
      for (int htmlDataCntr = 0; htmlDataCntr < htmlContentList.size(); htmlDataCntr++) { 
       Element htmlDataElement = (Element) htmlContentList 
         .get(htmlDataCntr); 
       document.add(htmlDataElement); 
      } 
      fr.close(); 
      document.close(); 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 
     catch(Exception e){ 
      System.out.println(e); 
     } 
    } 
} 

ответ

1

От имени привязанности, похоже, ваш HTML экспортируется из электронной почты. Убедитесь, что вы должны разобрать электронную почту по-разному и получить изображения отдельно от других вещей.

EDIT: Как я уже сказал, я думаю, что проблемы лежат вверх по течению. Обозначение cid соответствует встроенному изображению в почте (см., Например, here). Итак, если парсер upsteam mail не дает вам файл изображения в качестве вложения, вы ничего не можете с этим поделать.

+0

Да. Вы абсолютно правы. Мы предоставили поставщику API (Documentum), который преобразует электронное письмо в документ HTML. Затем мы анализируем/конвертируем этот HTML-документ в PDF-документ с помощью iText. Хотя мы пытаемся проанализировать этот HTML-документ, мы получаем исключение. – balaji

+0

Как я уже сказал, проблема ложится вверх по течению. В моем ответе я объясню еще несколько объяснений. –