4

iText に問題があります。

このリンクをたどりました:htmlページをpdf形式にエクスポートする方法は?

私のスニペット:

    String str = "<html><head><body><div style=\"width:100%;height:100%;\"><h3 style=\"margin-left:5px;margin-top:40px\">First</h3><div style=\"margin-left:15px;margin-top:15px\"><title></title><p>sdasdasd shshshshdffgdfgd</p></div><h3 style=\"margin-left:5px;margin-top:40px\">The dream</h3><div style=\"margin-left:15px;margin-top:15px\"></div></div></body></head></html>";
    String fileNameWithPath = "/Users/cecco/Desktop/pdf2.pdf";


    com.itextpdf.text.Document document =
            new com.itextpdf.text.Document(com.itextpdf.text.PageSize.A4);
    FileOutputStream fos = new FileOutputStream(fileNameWithPath);
    com.itextpdf.text.pdf.PdfWriter pdfWriter =
            com.itextpdf.text.pdf.PdfWriter.getInstance(document, fos);

    document.open();

    document.addAuthor("Myself");
    document.addSubject("My Subject");
    document.addCreationDate();
    document.addTitle("My Title");

    com.itextpdf.text.html.simpleparser.HTMLWorker htmlWorker =
            new com.itextpdf.text.html.simpleparser.HTMLWorker(document);
    htmlWorker.parse(new StringReader(str.toString()));

    document.close();
    fos.close();

そしてうまく働く。

ただし、h3 と div へのタグ スタイルは考慮されません。

ここに画像の説明を入力

しかし、html をhttp://htmledit.squarefree.com/にコピーすると、すべてが正しくなります。

どうすればこの問題を解決できますか?

4

1 に答える 1

6

iTextは最高のHTMLパーサーではありませんが、これにはFlying-Saucerを使用できます。Flying-SaucerはiTextの上に構築されていますが、有能なXml /(X)Htmlパーサーを備えています。短い:HTML-> PDFが必要な場合は、フライングソーサーが最適です。

文字列からPDFを生成する方法は次のとおりです。

/*
 * Note: i filled something in the title-tag and fixed the head tag (the whole body-tag was in the head)
 */
String str = "<html><head></head><body><div style=\"width:100%;height:100%;\"><h3 style=\"margin-left:5px;margin-top:40px\">First</h3><div style=\"margin-left:15px;margin-top:15px\"><title>t</title><p>sdasdasd shshshshdffgdfgd</p></div><h3 style=\"margin-left:5px;margin-top:40px\">The dream</h3><div style=\"margin-left:15px;margin-top:15px\"></div></div></body></html>";

OutputStream os = new FileOutputStream(new File("example.pdf"));

ITextRenderer renderer = new ITextRenderer();
renderer.setDocumentFromString(str);
renderer.layout();
renderer.createPDF(os);

os.close();

ただし、 FSは有効なHtml / Xhtml / xmlのみをサポートしているので、それを確認してください。

于 2013-02-04T17:45:30.417 に答える