c#實現ofd文件轉圖片功能 (附執行程序)


前言 ofd文件的作用就是保證信息能如實的存儲、傳遞、顯示。保證ofd文件的真實性靠的是簽名;ofd 的顯示需要專用軟件。ofd標准是新的國家標准,應用范圍遠不如pdf;現有瀏覽器不能解析ofd、支持ofd顯示的軟件也寥寥無幾。ofd閱讀器程序(已集成了轉圖、轉PDF功能)下載。

    專用軟件讀取ofd過程包括對ofd文件解壓縮、分析每頁的文字和圖元、關聯對應的資源、解析簽章等復雜操作。將ofd文件轉成圖片,可以避免這些重復的操作;ofd轉成圖片后,就可以方便的在瀏覽器、各類app中顯示。所以,ofd轉圖片是ofd系統中必不可少的一個功能。

ofd轉圖片實現思路

  ofd轉圖片沒有捷徑可走。實現ofd轉圖片,就是在圖片上輸出文字、圖元、各類曲線等,這些操作和輸出到屏幕上並沒有多大區別。ofd轉圖片和ofd閱讀器在技術上是有很大重合的。要完成ofd轉圖片,需要你對ofd文件有充分的理解。參見我的文章《采用WPF技術,開發OFD電子文檔閱讀器》

  本文ofd轉圖片功能沒用到wpf相關類,而是使用了System.Drawing暨GDI+。.net core 3.0 已經實現了System.Drawing;理論上,本文所涉及的代碼可以很方便的移植到.net core下,在linux下實現ofd轉圖只有一步之遙。

實現ofd轉圖片包括以下幾個步驟:

1 創建ofd頁面信息模型

ofd頁面由文本、圖片、曲線等組成。首先將頁面解析成各類object,它們的父類為PageObject:

 public class PageObject { public string GetAttributeValue(string name) { string result = XmlHelper.GetXmlAttributeValue(_xmlNode, name); return result; } }

從此類派生出 PageObjectText、PageObjectPath、PageObjectImage等,代表ofd頁面文本、曲線、圖片等類型信息。

2 由信息模型PageObject 創建顯示模型OfdVisual;

信息模型包含了顯示需要的各類信息,顯示模型就是利用這類信息顯示。顯示模型的父類為OfdVisual:

  public class OfdVisual { public OfdVisual() { } public virtual void Show(bool visiable, bool even = false) { } public virtual void ShowSelect(bool visiable, Rectangle selectRegion, bool even = false) { } public string PageItemId { get { if (PageObject == null) return string.Empty; return PageObject.ID; } }public PointF ToPageLocation(PointF pt) { return new PointF(pt.X + BoundaryLocation.X, pt.Y + BoundaryLocation.Y); } protected void PutBoundary() { VisualGraphics.TranslateTransform(BoundaryLocation.X, BoundaryLocation.Y); VisualGraphics.SetClip(ClipRect); } GraphicsState graphicsState; protected void DrawSave() { graphicsState = VisualGraphics.Save(); } protected void DrawRestore() { VisualGraphics.Restore(graphicsState); } protected void PutTransform() { if (ObjectTransform != null) { VisualGraphics.MultiplyTransform(ObjectTransform); } } public double XZoomRate { get { if (ObjectTransform == null) return 1; float result = ObjectTransform.Elements[0]; return result; } } public double YZoomRate { get { if (ObjectTransform == null) return 1; float result = ObjectTransform.Elements[4]; return result; } } }

有三類顯示模型OfdVisualText、OfdVisualImage、OfdVisualPath等。

3 創建bitmap

根據頁面大小創建bitmap,由bitmap獲取Graphics。后面的顯示操作就是利用Graphics各類函數處理。

_ofdBitmap = new Bitmap((int)(width* scale), (int)(height* scale)); Graphics = Graphics.FromImage(_ofdBitmap);

 ofd轉圖片程序功能說明

   操作步驟:選擇生成圖片的縮放比例,點擊“ofd轉圖片”按鈕,選擇ofd文件。轉成圖片后,ofd文件在左側列表顯示,點擊列表中文件,右側顯示對應的圖片。程序底部為日志,顯示ofd文件的頁數、轉換耗時等信息。

為了方便別的程序調用,程序可以做成web 服務形式,對外接口為web api。客戶端傳入ofd文件,輸出為圖片。

后記 對於ofd轉圖片,網上有一種方法是采用虛擬打印。這是一種捷徑,也是沒有辦法的辦法。但是采用虛擬打印,必須依賴第三方ofd閱讀器,使用不方便,輸出效果也增加了不確定性。要實現ofd轉圖片,必須對ofd標准吃透,建立相應顯示模型,按部就班的實現轉圖功能;只有這樣,程序的功能才是自主可控、效率才有保證。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM