2012-11-27 56 views
3

我有大量列的HTML(你會發現在這個link樣品)如何使用飛碟將大型表格轉換爲PDF格式?

現在,當我嘗試使用flying saucerjar link重新編譯的iText 2.1.x的工作)將其轉換爲PDF格式,在generated 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代碼。

回答

1

如果知道需要的大小,可以更改頁面大小。

使用這個@page規則:
請注意:在這個例子IM在HTML工作與Jsoup(見註釋)。

/* 
* 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\"><[email protected] { 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,其中整個表是一個橫向頁面(可能你必須改變寬度/高度滿足您的需求。

+0

嘿謝謝回答,但我不知道頁面的大小,因爲內容html是即時生成的,所以它可以有2列或20列,這一切都取決於生成的報告的類型,還表格單元格內的內容可以增加列的寬度 – Ankur

+0

我看到...您可以檢查[page-break settings]是否(http://flyingsaucerproject.github.com/flyingsaucer/r8/guide/users-guide- R8.html#xil_37)或[FS擴展程序](http://flyingsaucerproject.github.com/flyingsaucer/r8/guide/users-guide-R8.html#xil_44)可以幫助您在這裏。但我想FS不可能計算頁面大小。如果所有的錯誤你已經計算了它的內容的寬度(例如,總結所有單元格的文本長度並設置適當的寬度)。表的高度不應該是一個問題,因爲你可以在這裏使用'page-break'(見第一個鏈接)。 – ollo

2

使用YAHP library.This是我已經工作到目前爲止將HTML轉換爲PDF,這是寫在飛碟的頂部,這是一個很大的失望,相比它的普及,它甚至不會呈現簡單的輸入文本框。所以,我轉向YAHP圖書館,這是你的情況優秀

嘗試此代碼後,你全部與這個圖書館有關的罐子。

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(); 
     } 
    } 

} 

enter image description here這是使用您的html生成的pdf的屏幕截圖。您可以指定頁面大小,如IHtmlToPdfTransformer.A1P

+0

但我仍然需要設置我無法旋轉的頁面寬度。列的數量可以是2,3或者20。html是動態創建的 – Ankur

+0

在上面的API中,您可以根據表大小設置頁面的寬度和高度。 – SRy

+1

我不知道表大小,知道我將需要解析的HTML – Ankur

相關問題