使用iText进行HTML到PDF的转换

时间:2011-02-08 07:49:03

标签: java itext

我正在尝试将HTMLl文件转换为PDF。为此,我正在使用iText。如果HTML的主体中有一些图像,则iText无法将该图像放入PDF中,并引发以下异常。

  

ExceptionConverter: java.io.FileNotFoundException: D:\cid:870001313@01022011-2B8B (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 个答案:

答案 0 :(得分:1)

从附件的名称来看,您的html似乎是从电子邮件中导出的。确保您应该以不同方式解析电子邮件,并将图像与其他内容区分开来。

编辑:正如我所说,我认为问题在于上游。 cid表示法对应于邮件中的嵌入图像(例如,请参阅here)。因此,如果upteam邮件解析器没有将图像文件作为附件提供给你,你就无法做任何事情。