Java 如何使用飞碟将大型表格转换为PDF格式?

Java 如何使用飞碟将大型表格转换为PDF格式?,java,itext,flying-saucer,html-to-pdf,Java,Itext,Flying Saucer,Html To Pdf,我有一个包含大量列的html(你可以在这里找到示例) 现在,当我尝试使用(重新编译以使用iText 2.1.X)将其转换为PDF时,会截断列 有没有办法让飞碟打破表格,或者根据html内容增加页面宽度 这是我正在使用的代码 String doc = file.toURI().toURL().toString(); ITextRenderer renderer = new ITextRenderer(); renderer.setDocument(doc); String outputFile =

我有一个包含大量列的html(你可以在这里找到示例)

现在,当我尝试使用(重新编译以使用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();

其中文件是我试图转换的html。

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

使用
@page
规则执行此操作:
请注意:在这个例子中,我正在使用html(请参阅注释)

/*
*这部分是可选的-Jsoup用于清理html并将样式标记插入头部。
*你可以利用其他一切来做这件事。
* 
*如果要使用Jsoup,请让舒尔设置正确的字符集(第二个参数)。
* 
*注意:这不是W3C文档,而是Jsoup文档。
*/
Document doc=Jsoup.parse(文件,空);
/*
*在这里,您可以指定所需的页面大小(大小:带高度)。
*插入此html是关键部分!
*/
doc.head()追加(“”);
ITextRenderer=newitextrenderer();
/*
*这一部分与jsoup有关doc.toString()只执行以下操作
*以字符串形式返回“doc”的Html。
* 
*您也可以在代码中设置它。
*/
renderer.setDocumentFromString(doc.toString());
最终字符串outputFile=“test.pdf”;
OutputStream os=新文件OutputStream(outputFile);
layout();
createPDF(os);
os.flush();
os.close();
有了这段代码,您将得到一个Pdf,其中整个表都在一个横向页面上(也许你必须根据需要更改宽度/高度。

使用库。这是迄今为止我工作过的将HTML转换为PDF的最好的库。它写在飞碟的顶部,与它的流行程度相比,这是一个很大的失望。它甚至不会显示简单的输入文本框。因此,我转向了塞伦特为你的案子辩护

获取与此库相关的所有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

嘿,谢谢你的回答,但我不知道页面大小,因为内容html是动态生成的,所以它可以有2列或20列,这一切都取决于生成的报告类型和内容表格单元格内的nt可以增加列的宽度我看到了…您可以检查是否或是否可以在这里帮助您。但我猜FS不可能计算页面大小。如果所有内容都不好,您必须根据其内容计算表格的宽度(例如,汇总所有单元格的文本长度并设置适当的宽度)。表格的高度应该不会有问题,因为您可以使用
分页符
(请参阅第一个链接)这里。但我仍然需要设置页面宽度,我不知道。列数可以是2、3或20。html是在上面的API中创建的。您可以根据表格大小设置页面宽度和高度。我不知道表格大小,我需要解析html
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();
        }
    }   

}