FO.NET將XSL-FO轉成PDF,如果在簡單的範例檔案中輸入中文字,然後測試,會發現中文字會變成「#」。
要如何解決呢?
FO.NET將XSL-FO轉成PDF,如果在簡單的範例檔案中輸入中文字,然後測試,會發現中文字會變成「#」。
以下使用官方網站的範例來測試,如下,
XSL-FO File (test.fo):
<?xml version="1.0" encoding="utf-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="simple"
page-height="29.7cm"
page-width="21cm"
margin-top="1cm"
margin-bottom="2cm"
margin-left="2.5cm"
margin-right="2.5cm">
<fo:region-body margin-top="3cm"/>
<fo:region-before extent="3cm"/>
<fo:region-after extent="1.5cm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="simple">
<fo:flow flow-name="xsl-region-body">
<fo:block font-size="18pt" color="black" text-align="center">
Hello, World!中文堃!
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
C#的程式(要加入fonet.dll參考)
//using Fonet;
FonetDriver driver = FonetDriver.Make();
driver.Render("hello.fo", "hello.pdf");
產生出來的PDF如下,
後來有找到「FO.NET does not yet support Unicode characters」這篇討論,
於是將字型改成「Arial Unicode MS」,並將FontType 設定成 Subset ,中文就可以正常顯示出來了哦! 如下,
XSL-FO File (test.fo) (請注意,我多加入font-family="Arial Unicode MS" ) :
<?xml version="1.0" encoding="utf-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="simple"
page-height="29.7cm"
page-width="21cm"
margin-top="1cm"
margin-bottom="2cm"
margin-left="2.5cm"
margin-right="2.5cm">
<fo:region-body margin-top="3cm"/>
<fo:region-before extent="3cm"/>
<fo:region-after extent="1.5cm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="simple">
<fo:flow flow-name="xsl-region-body">
<fo:block font-size="18pt" color="black" text-align="center" font-family="Arial Unicode MS">
Hello, World!中文堃!
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
C#的程式(要加入fonet.dll參考)(請注意,多設定Options):
FonetDriver driver = FonetDriver.Make();
driver.Options = new Fonet.Render.Pdf.PdfRendererOptions();
driver.Options.FontType = Fonet.Render.Pdf.FontType.Subset;
driver.Render(@"h:\test.fo", @"h:\test2.pdf");
產生出來的PDF如下(中文可順利的呈現),
另外,安裝FO.NET之後會有Fonet.exe及Fonet.dll,所以也可以透過命令視窗來產生pdf哦! 如下,
fonet –fonttype Subset –fo h:\test.fo –pdf h:\test1.pdf
參考資料
FO.NET does not yet support Unicode characters
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^