2017-05-05 66 views
0

是否有pdfHTML支持的CSS樣式列表?他們的網站說「它支持適用於PDF上下文的HTML 5和CSS 3規範的部分」,這是合理的(例如沒有理由支持CSS動畫)。pdfHTML不尊重CSS樣式

不過,我有什麼,我會覺得是一些簡單的造型,將適用於PDF文件的問題。

一個問題是下面的樣式不被應用於圖像:

img { max-width: 100%; } 

我在那裏它們的寬度,因此圖像被截斷比頁面高大的一些圖片。我無法更改源HTML,也無法縮小圖像文件。獲取圖像的最佳做法是什麼?

另一個問題與表樣式做。這些沒有被應用:

table { vertical-align: top; } 
tr:nth-child(even) { background: #eee; } 

像圖像問題,這些樣式在瀏覽器中看起來不錯。建議格式表的格式是什麼?

感謝

+0

'第n-child'將在下一版本中支持'pdfHTML'。它在當前的開發快照版本中已經得到支持。 –

+0

@AlexeySubach:很酷。任何關於圖像寬度的想法?這是現在的殺手。如果我可以將圖片放在頁面上,我認爲我們應該能夠使用itext繼續前進。 – Chuck

回答

1

max-width CSS屬性沒有在pdfHTML尚未支持。您可以嘗試使用您自己的自定義CSS應用程序來解決該問題,並在滿足某些條件時將寬度重置爲任何所需的值。

首先,創建CSS施放的圖像:

final ICssApplier customImageCssApplier = new BlockCssApplier() { 
    @Override 
    public void apply(ProcessorContext context, IStylesContainer stylesContainer, ITagWorker tagWorker) { 
     super.apply(context, stylesContainer, tagWorker); 
     if (tagWorker.getElementResult() instanceof Image) { 
      Image img = (Image) tagWorker.getElementResult(); 
      if (img.getImageWidth() > 500) { 
       img.setWidth(UnitValue.createPercentValue(100)); 
      } 
     } 
    } 
}; 

然後,確保該施放器在出廠檢索。要做到這一點,你將不得不覆蓋getCustomCssApplier

ICssApplierFactory cssApplierFactory = new DefaultCssApplierFactory() { 
    @Override 
    public ICssApplier getCustomCssApplier(IElementNode tag) { 
     if (TagConstants.IMG.equals(tag.name())) { 
      return customImageCssApplier; 
     } 
     return super.getCustomCssApplier(tag); 
    } 
}; 

最後,創建ConverterProperties並確保將它傳遞給HtmlConverter.convertToPdf

ConverterProperties properties = new ConverterProperties().setCssApplierFactory(cssApplierFactory); 
+0

這是一個骯髒的解決方法,但是,這可能無法在棘手的情況下工作。你可能會玩的物理圖像的大小,將觸發你的邏輯(在我的例子中'500')和你設置的圖像的大小它(你可能想試試百分比和點值)。如果您仍然無法解決問題,請務必將您的問題告知銷售團隊。 –

+0

我正在用C#編寫它。是你的兩個塊的頂部行類似於:public class CustomImageCssApplier:BlockCssApplier ...然後該方法將是:public override void Apply(blahblah)? – Chuck

+0

我認爲這對我們很有用,謝謝。我會在我的請求中提出,儘可能添加來自css的圖像格式。在那之前,我期待着表格格式,這將是蛋糕上的一些甜蜜的糖衣.. – Chuck