6i 报表输出成PDF,中文正确的显示方法

[发贴:armok][3738.1448]哈哈,我找到了 6i 报表输出成PDF,中文正确的显示方法啦 (无可奈何的办法)

 

[内容]

--------------------------------------------

今天下午,开始研究 PDF 的生成。我从网上找到了破解版本的 Acrobat 5.0 (注意 ,不是Acrobat reader 5.0).(总共96M)。

 

经过观察与比较,发现 PDF文件,在处理文字时,分成双字节及单字节。

 

reports 输出(以下的讨论,不经WEB发布)PDF的正规方法是:

<img src=../bbs_upload/files_1/armok0110446.jpg>

 

这种方法生成的 PDF中文是乱码。

 

<img src=../bbs_upload/files_1/armok0110448.jpg>

 

安装 Acrobat 5.0 后,按打印,会有一个打印机叫:Acrobat Distiller. 选中它,

 

<img src=../bbs_upload/files_1/armok0110449.jpg>

 

 

输入文件名,就可以打印出正常中文的PDF 了!

 

<img src=../bbs_upload/files_1/armok0110447.jpg>

 

--------------------------------------------

回复人:armok

--------------------------------------------

以上这种方法,是抛开Oracle生成PDF的内部方法,直接使用较新的Adobe Acrobat的算法。

 

 

--------------------------------------------

回复人:yfzhu

--------------------------------------------

希望早日解決 WEB 發布的 PDF報表的亂碼問題

 

 

--------------------------------------------

回复人 <http://images.5d6d.net/dz7/smilies/default/shocked.gif> racle001

--------------------------------------------

TO Armok

 

事實上您也可以將REPORT直接打印至Acrobat Distiller再save成PDF檔亦可.

 

但是這種方式,只能用在C/S模式,WEB好像行不通

--------------------------------------------

回复人:armok

--------------------------------------------

web 发布时,输出成htmlcss方式,然后再打印成PDF,中文也是正常的。

 

不知这种方法,yfzhu能否接受?

--------------------------------------------

回复人:wolfman

--------------------------------------------

但这是不是在所有机器上都有效?还是你的机器安装过acrobat的原因?我的机器上就没找到你说的打印机:(

--------------------------------------------

回复人:armok

--------------------------------------------

以上是要安装Acrobat  5.0  (注意  ,不是Acrobat  reader  5.0).(总共96M)

 

这只是一个无可奈何的解决办法。

 

在PDF里,文字是分成两字节及单字节的,Oracle缺省的生成PDF根本不理这一点,生成的当然是乱码了。

--------------------------------------------

回复人 <http://images.5d6d.net/dz7/smilies/default/shocked.gif> racle001

--------------------------------------------

安裝Adobe Acrobat後,電腦打印機中就會多出一台 Acrobat  Distiller 打印機了

 

若您無法取得Adobe Acrobat,可考慮安裝pdffactory亦可(http://www.fineprint.com)

 

--------------------------------------------

回复人:armok

--------------------------------------------

另外,据说:6i 里面用的PDF engine 版本低,中文的PDF 文件只能在Acrobat 3.X 下面显示

 

--------------------------------------------

回复人:yfzhu

--------------------------------------------

PDF  engine  是什麼? 可以升級麼?

--------------------------------------------

回复人:armok

--------------------------------------------

指生成PDF的内部算法。

 

如果可以升级,问题就彻底解决了。

 

--------------------------------------------

回复人:rebecca_xt

--------------------------------------------

只要你安装3.0版本的ACROBAT即可解决此问题

 

--------------------------------------------

回复人:yuan3041

--------------------------------------------

armok:

 

我想了个办法

 

1。安装acrobat 

 

2.新建一个虚拟目录 d:/pdf 映射为pdf目录

 

3.在程序的打印键中输入如下代码

 

        host('RWRUN60.EXE report=aa.rep userid=us/pa@cs destype=打印机(此处为acrobat的虚拟打印机)PARAMFORM=no');

 

(将打印机的生成目录设为d:/pdf)

 

Web.Show_Document('http://server/pdf/aa.pdf','_self');

 

此方法我试验了一半,你如果有环境可以试试

 

--------------------------------------------

回复人:armok

--------------------------------------------

host('RWRUN60.EXE  report=aa.rep  userid=us/pa@cs  destype=打印机(此处为acrobat的虚拟打印机)PARAMFORM=no'); 

 

可以将forms内的参数传递给报表吗?

 

另外,这个方法其实只是我的方法的自动版本,也是能是一个折衷的办法。应用上还是有许多缺陷的。

 

--------------------------------------------

回复人:yuan3041

--------------------------------------------

可以传递参数, 哎!没办法凑合用吧!

 

--------------------------------------------

回复人:armok

--------------------------------------------

那再举一个可以传递参数的例子吧。让大家在无可奈何之际,也有个可用的方法,呵呵。

 

--------------------------------------------

回复人:yuan3041

--------------------------------------------

host('RWRUN60.EXE    report=aa.rep    userid=us/pa@cs    destype=打印机(此处为acrobat的虚拟打印机)PARAMFORM=no   日期=20030101');

 

此处“日期”是报表中的参数   

 

或者

 

declare

 

a varchar2(100);

 

begin

 

a:='RWRUN60.EXE    report=aa.rep    userid=us/pa@cs    destype=打印机(此处为acrobat的虚拟打印机)PARAMFORM=no   日期=';

 

host(a||:b1.rq);

 

end;

 

其中b1.rq是一个文本项

 

--------------------------------------------

回复人:armok

--------------------------------------------

簡單說明一下我用Report Builder 產生 PDF File 的做法 

 

一、在該台機器上安裝 Acrobat 5.0 ,啟動 Distiller ,並設定下列內容: 

 

1. 在 Setting / Watched Folder 內設定一目錄 ( Distiller 會在該目錄內新增 in 及 out 二個子目錄 ) ,例如: C:/PDFout 

 

2. 在 File / Preference 選項內,勾選「Ask for PDF Destination」 

 

註:這是 Optional ,有沒有勾選在 Local 執行是還好,但如果把 Distiller 裝在 Report Server 上就有差別了,有Report Server 的人可以試試 

 

二、安裝 Support PostScript 的印表機 ( e.g. HP LaserJet 4050 Series PCL ) 並設定為 Default Printer 

 

三、撰寫 Report 程式,設定下列參數值: 

 

1. DESTYPE --> 'File' 

 

2. DESNAME --> 'C:/PDFout/in/xxxx.ps' 

 

(註)這二個系統變數值可手動設定或於 Before Parameter Form Trigger 內寫程式設定之 ( 例如:ESNAME := 'c:/PDFout/in/XXX_'||to_char( SYSDATE , 'YYYYMMDD' )||'.ps' ; 

 

四、執行報表,當 PostScript File 產生至 C:/PDFout/in 時,Distiller 便會自動接手將 File 轉換成 PDF 並置於 C:/PDFout/out 目錄內 

 

用 PostScript 是我和我公司的DBA 在一年多前在沒有其他可以解決D2K Report PDF 中文亂碼的情況下所想出來的辦法,那時我們針對這個問題有四項前提要求:1. PDF 中文正常顯示 2, 可程式化 3. 自動化 4. Thin-Client 存取。試了很久不得其要,後來同事建議繞個彎改走 PostScript Format,我們想了一遍過程覺得可行後,把它應用在 Report Server 上,透過 R11 Form ( 我公司是用 ERP R11 ,但前端是否為 FORM 並不重要,只要能 Submit Http URL request 的前端即可,因此它的前端可以是 JSP / ASP / HTML ...ect. ) Submit一個 Http Request 至 Report Server 後,由其執行產生 PDF File 的工作,再於該 Server 上安裝 HTTP Daemon ,並將虛擬路徑指向 C:/PDFout/out 目錄,待Report 完成後,將透過 PL / SQL 動態設定的 HyperLink 顯示於 Browser 內供 User 下載即可,整個過程式都可以用 PL/SQL 來控制,也針對文件的 Security 做了些加強,唯一不能控制的部份就是 Distiller 的運作,因為它是以 Queue Job 的方式在執行PDF 轉換作業,因此如果有一隻報表掛了或設計不良而執行過久,都會造成 Distiller Server Fail 的情況, 這也是我一直想要改進的地方,因此於這一年多來只用一台 PC 充當 Report Server ,在我的系統在使用這方式 24 小時提供線上同仁 Text File or PDF report ,雖然這一年多來發生的情況不多,但始終會是一個遺憾和容易讓人 Challenge 的地方,如果有那位網友了解 Distiller 如何控制或是可透過 Web Moniter 的方法,也請不吝提供,謝謝 !! 至於 9iDS 我看過我同事 Run 過,的確可以直接產生 PDF File 而不會有亂碼情況,的確是要改一些地方,但我記不得步驟,Meta Link 上可以查的到,一併提供給大家參考,Thanks !! 新年快樂 Bogi 92/01/28 from 台灣

 

 

 

由 BOGI 于 03-01-29 04:12 最后编辑

 

转自:http://www.itpub.net/showthread.php?s=&threadid=90054

 

 

--------------------------------------------

回复人:Shangrila

--------------------------------------------

不好意思,翻出老掉牙的话题,现在我公司里用的就是阿莫说的最后一种方法,不过中间碰到了许多问题,比如页边距与直接生成的PDF不一致什么的,以前的都有折衷办法;今天碰到了一个,不好折衷,问题是:原来是8号字体,显示正常,我把其中部分改成10号、11号、12号,然后就无法正常显示了;不知道有没有人用过这种方法(先生成PS文件再转成PSF文件)?如果有的话给点建议?(我们用的是WEB发布)

 

--------------------------------------------

回复人:Shangrila

--------------------------------------------

知道问题所在了,原来不关RDF的事情,是一个别的转换程序有问题,哈哈

 

--------------------------------------------

回复人:urbansun

--------------------------------------------

仍然是乱码呀!

 

--------------------------------------------

回复人 <http://images.5d6d.net/dz7/smilies/default/shocked.gif> nline

--------------------------------------------

回楼主: 

 

我安装了Acrobat 5.0 (试过简体版和繁体版),为何没有你楼主所言的有一个“Acrobat Distiller”打印选择呢?

 

跳楼感谢ing......

 

--------------------------------------------

回复人:rogershen

--------------------------------------------

这个问题折腾了我半年... ...

 

我现在已经完全放弃PDF的中文报表。

 

我在9Ideveloper中实现了中文的PDF 输出,但是配置也很麻烦了

 

 

--------------------------------------------

回复人:wyh_singlee

--------------------------------------------

阿莫老大,那里您所说的破解版本的 Acrobat 5.0 

 

再问, 利用Acrobat 5.0  如果汉字为自造字,可以正确显示吗? (在report6 中可以显示自造的汉字)

 

我用PdfFactory 试了一下: 非自造的汉字可以正确显示,自造的汉字就不能显示了。

 

感谢老大的帮助。

 

--------------------------------------------

回复人:pelyxp

--------------------------------------------

我说过好多次了,6i本身不支持中文pdf输出的,是没有这个功能,不是设置或者是bug

 

一年前我碰到这个问题的时候,几乎看遍了oracle 9i,6i所有的report,form,font,printer相关的文档,和oracle的人讨论了好长时间,最后从9ias 的 dev team得到的确切回答就是不支持。9i才有这个功能。

 

 

如果依靠oracle的技术解决,就只有这个方法了,这个方法是目前我找道的最好的方法了,oracle的人也认同这个方法。form还是6i,report可以用9i。调用方法都不需要改。

 

 

http://61.144.28.248/d6i/bbs_armok01/bbs_content.jsp?bbsSerialNo=330442&bbsPageNo=2

 

 

--------------------------------------------

回复人:wyh_singlee

--------------------------------------------

pelyxp:

 

   我确认利用report6 本身的软件无法实现中文的显示,所以已经放弃用report6本身生成PDF的功能去实现。

 

  现在我们公司还不想不升级系统(升级系统是一件系统的工作,很需要人力的),所以想用第三方的软件去实现。

 

  现在有软件PdfFactory 可以实现一般中文字的显示,但自造的汉字的显示有些问题。不知谁有经验,可以share一下。

 

 

--------------------------------------------

 

 

--------------------------------------------

本文整理并转载至:阿莫OracleDeveloper论坛(www.oradev.net)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值