[Crystal Report]如何解決 PDF 檔案匯出時候字體縮小異常的問題

使用 C# 呼叫 Crystal Report 匯出報表檔案時候,部份字型會縮小,利用調整機碼來解決匯出字型縮小的異常

在前一篇描述有關於在 Crystal Report 安裝字型的問題之後,接下來在使用的過程中,就有人反映當匯出 PDF 的時候,字型會有異常縮小的情況發生。為了釐清這樣的問題,我們做了一個簡單的範例。

首先我先在 Crystal Report 上面製作一個簡單的報表,在這個報表上我採用四種會用在中文環境下的字型來做測試,如下圖所做的畫面,在同一張報表上分別採用「新細明體」、「微軟正黑體」、「標楷體」、「Arial Unicode MS」來做比較

首先我們先在Crystal Report 下面,用列印的方式產生 PDF

基本上用這樣的方式,就不牽涉產品內的匯出 PDF 的技術,會更為接近印出來的狀況,因此我先將這個檔案命名為 A001_Print.PDF。下圖是我用 Adobe Reader 來開啟,用 100% 的模式下去檢視,然後再做截圖。從圖片上看起來,跟我們排版上看起來字的大小幾乎是沒有差異。

而接下來我在 Crystal Report 下面用匯出的方式來產生 PDF,一樣用 Adobe Reader 來顯示。從畫面的圖片看起來,當在 Crystal Report 下直接匯出 PDF 檔案,跟我們用列印產生 PDF 的字來相互比較,這兩個雖然用不同的方式,但是字型大小也都是相同的

接下來就是我們用程式,我用以下的指令來產生一個匯出的報表

using (ReportDocument rd = new ReportDocument())
{
    Response.Buffer = false;
    Response.ClearContent();
    Response.ClearHeaders();
    rd.Load(Server.MapPath("./init.rpt"));
    rd.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, false, "init.pdf");
    Response.End();
}

當我們開啟這樣的匯出檔案的時候,從下圖上看起來,會發現「微軟正黑體」、「Arial Unicode MS」 這兩個字體似乎跟其他 24 號字的大小有點不同。

因為這兩個是分開看,可能比較不容易來比較,因此我把這三種放在一起來做比較,我稍微加入三條比較線,應該就會比較清楚一點,有些字型似乎在匯出的時候,會有一定比例的縮小。

遇到這樣匯出 PDF 字型縮小,實在是非常的令人感到沮喪,因為當我們要用程式來搭配 Crystal Report 使用,會變成設計和實際執行的不同,因此花了一點時間在網路上爬文,在SAP 的 KB 上找到一篇「1220516 - Font size decreases when exporting a report to PDF format from Crystal Reports or SAP BI LaunchPad」,似乎跟我們所遇到的問題是相同的,但是實際按照那個機碼去設定,卻是沒有任何的幫助。

只是因為這個問題要是不修正,我們就只能設法把特定的幾種字體在列印前將報表格式檔的字放大1到2號字,才有辦法讓實際印出來的跟預期的比較相似,技術上看起來雖然難度不高,但就是會非常麻煩,因為還要一個一個去測試,到底哪些字型是正常,而那些字型又不正常。

因此我花了一點時間,去調整相關的機碼和測試,總算被我找到問題了。其實還是如同前面所說明 SAP 的那一篇 KB 的描述,只是他部份說明和所記載的機碼是錯誤的,才導致設定是無用的

第一個算是說明不清楚的地方,這個指的是當我們使用 C# or VB.net 的程式,搭配 Crystal Report Runtime 去執行相關 Crystal Report 的時候,是需要調整這些機碼。因此向我們用 C# 去執行的時候,就要去做這些調整。

第二個是修改的機碼,這個是最大的問題點,我參考 Crystal Report 自己本身的設定,再來看這一個的設定,發現他少了一段。正確的機碼值應該是下面這段這樣才對,官方文件在中間少了 Crystal Reports,另外因為是採用 64 位元的 Runtime,因此不用加入 WOW6432,所以之前怎麼測試都是失敗。

HKEY_LOCAL_MACHINE\SOFTWARE\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Crystal Reports\Export\Pdf

 

因此知道問題的修改方式之後,我們只要把機碼設定完畢之後,再重新測試一下,這個時候匯出的檔案就會如下圖。

從圖片中看起來,就跟我們一開始不使用程式而是直接在 Crystal Report 下匯出的結果相同。如果您也被這樣的問題給困擾,那麼您只有複製以下的設定,將內容存成一個 .reg 的登錄項目檔案,然後匯入這一組機碼就可以了。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Crystal Reports\Export\Pdf]
"ForceLargerFonts"=dword:00000001

希望這樣的說明,可以幫助一樣在使用 Crystal Report 的朋友,不要再被這種低級問題給浪費時間了