2015-12-10 50 views
3

我想添加一個自定義字體到我的pdf輸出使用nuget包MVCRazorToPdf,但我有問題如何做到這一點,因爲iTextSharp的文檔不是很好,似乎都已過時。MVCRazorToPdf(iTextSharp)使用自定義字體

當前的代碼我有創建PDF是:

return new PdfActionResult(
    "test.cshtml", 
    new TestModel(), 
    (writer, document) => 
    { 
     FontFactory.Register(HostingEnvironment.MapPath("~/content/fonts/vegur-regular-webfont.ttf"), "VegurRegular"); 
    }); 

writerPdfWriterdocument是使用FontFactory顯示的,你需要使用一個Document

所有的例子XmlWorker但我沒有訪問權限,所以我想知道是否有任何方法使用writerdocument更改文檔字體?

我看到有document.HtmlStyleClass屬性,但無法找到任何有關如何在任何地方使用此任何東西。

任何幫助,這將不勝感激

+0

時,上述問題中註冊的工廠將工作大多數itextpdf示例都是針對Java版本的,但開發人員在將Java移植到C#時不應該有任何問題。 Java和C#中的itext特定的內容是相同的。 –

+0

Xmlworker也可作爲NuGet包使用https://www.nuget.org/packages/itextsharp.xmlworker/ –

+0

我已經安裝了它 - 它被下載爲MvcRazorToPdf包的一部分 – Pete

回答

3

MVCRazorToPdf是圍繞iTextSharp的的XMLWorker一個非常非常簡單的包裝,並使用更簡單XMLWorkerHelper與所有默認值來完成工作。如果你看一下source你會看到這一點:

   document.Open(); 


       using (var reader = new StringReader(RenderRazorView(context, viewName))) 
       { 
        XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, reader); 

        document.Close(); 
        output = workStream.ToArray(); 
       } 

如果你在使用的NuGet版本,那麼你堅持這個實現死心塌地,你就不會是能夠註冊自定義字體。

但是,有一個open issue關於這個,includes a fix所以如果你願意compile from source你可以應用這個變化,你應該全部設置。

如果您想更進一步,我建議您閱讀this great post,其中顯示瞭如何使用iTextSharp解析HTML以及如何使用Bruno's post here來顯示如何註冊字體。

編輯

按後在包括固定鏈接(以防萬一將來鏈路斷開),改變上述using聲明:

 using (var reader = new MemoryStream(Encoding.UTF8.GetBytes(RenderRazorView(context, viewName)))) 
     { 
      XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, reader, null, FontFactory.FontImp as IFontProvider); 

      document.Close(); 
      output = workStream.ToArray(); 
     } 

然後字體在使用style="font-family:VegurRegular;"

+0

輝煌,這正是我所需要的 - 我必須編輯源代碼,因爲我需要將它與現有的PDF合併,我只是無法弄清楚如何將該xmlworkerhelper更改爲使用新的fontfactory – Pete

+1

感謝您的編輯@皮特! –