3

我有一个包含大量列的 html(您可以在此链接中找到示例)

现在,当我尝试使用飞碟将其转换为 PDF 时(重新编译jar 链接以使用 iText 2.1.X),生成的 PDF已截断列

有没有办法让飞碟根据html内容打破桌子或增加页面的宽度?

这是我正在使用的代码

String doc = file.toURI().toURL().toString();
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(doc);
String outputFile = "test.pdf";
OutputStream os = new FileOutputStream(outputFile);
renderer.layout();
renderer.createPDF(os);
os.flush();
os.close();

其中file是我要转换的 html。

4

2 回答 2

2

使用YAHP库。这是我迄今为止将 HTML 转换为 PDF 的最佳库。这是写在飞碟顶部的,与它的受欢迎程度相比,这是一个很大的失望。它甚至不会呈现简单的输入文本框。所以,我求助于YAHP非常适合你的情况的库。

在获得与此库相关的所有 jar 后尝试此代码。

import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.allcolor.yahp.converter.CYaHPConverter;
import org.allcolor.yahp.converter.IHtmlToPdfTransformer;
import org.htmlcleaner.CleanerProperties;
import org.htmlcleaner.HtmlCleaner;
import org.htmlcleaner.PrettyHtmlSerializer;
import org.htmlcleaner.TagNode;

public class YahpHtmlToPdf {

    @SuppressWarnings({ "unchecked", "rawtypes" })
    public static void main(String[] args) {
        try{
            CleanerProperties props = new CleanerProperties();
            props.setTranslateSpecialEntities(true);
            props.setTransResCharsToNCR(true);
            props.setOmitComments(true);
            TagNode tagNode = new HtmlCleaner(props).clean(new File("C:\\Users\\MyComputer\\Desktop\\aspose.html"));
            String newString=new PrettyHtmlSerializer(props).getAsString(tagNode, "ISO-8859-1");
            CYaHPConverter converter = new CYaHPConverter();
            File fout = new File("C:\\sample\\aspose.pdf");
            FileOutputStream out = new FileOutputStream(fout);
            Map properties = new HashMap();
            List headerFooterList = new ArrayList();
            properties.put(IHtmlToPdfTransformer.PDF_RENDERER_CLASS,IHtmlToPdfTransformer.FLYINGSAUCER_PDF_RENDERER);
            converter.convertToPdf(newString,IHtmlToPdfTransformer.A1P,headerFooterList, "file:///temp/",out,properties);
            out.flush();
            out.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }   

}

在此处输入图像描述这是使用您的 html 生成的 pdf 的屏幕截图。.您可以像这样指定页面大小IHtmlToPdfTransformer.A1P

于 2012-12-01T03:03:51.200 回答
1

如果您知道所需的大小,则可以更改页面大小。

为此使用@page规则:
请注意:在此示例中,我正在使用Jsoup处理 html (请参阅评论)。

/*
 * This part is optional - Jsoup is used for cleaning the html and inserting the style tag into the head.
 * You can use everything else for doing this.
 * 
 * If you will use Jsoup, make shure you set proper charset (2nd parameter).
 * 
 * Note: this is NOT a W3C Document but a Jsoup one.
 */
Document doc = Jsoup.parse(file, null);

/*
 * Here you specify the pagesize you need (size: with height).
 * Inserting this html is the key part!
 */
doc.head().append("<style type=\"text/css\"><!--@page { size:50.0cm 20.0cm; }--></style>");


ITextRenderer renderer = new ITextRenderer();

/*
 * This part ist jsoup related. 'doc.toString()' does nothing else than
 * returning the Html of 'doc' as a string.
 * 
 * You can set it like in your code too.
 */
renderer.setDocumentFromString(doc.toString());

final String outputFile = "test.pdf";
OutputStream os = new FileOutputStream(outputFile);
renderer.layout();
renderer.createPDF(os);
os.flush();
os.close();

使用此代码,您将获得一个 Pdf,其中整个表格位于横向页面上(也许您必须根据需要更改宽度/高度。

于 2012-11-27T19:46:18.847 回答