wpf採用Xps實現文件顯示 套打功能

2021-08-25 14:19:50 字數 1971 閱讀 5721

**:

近期的乙個專案需對資料進行套打,使用者要求現場不允許安裝office、頁面預覽顯示必須要與文件完全一致,xps文件來對資料進行處理。wpf的documentview 控制項可以直接將資料進行顯示,xps也是一種開放式的文件,如果我們能夠替換裡面的標籤就最終實現了我們想要的效果。

推薦兩篇關於xps的文件介紹

廢話不多說,上**

private void setpage()

")//判定當前資料是否為標籤

", "");

docfp.children

.removeat(i);//移除標籤

textblock label = new textblock();

canvas.setleft(label, x);

canvas.settop(label, y - fontsize);

canvas.setzindex(label, 99);

label.foreground = brushes.red

; label.fontfamily = new system.windows

.media

.fontfamily("宋體");

label.fontsize = fontsize;

label.text = "你的內容"

; containcanvas.children

.add(label);}}

}#endregion

docfp.children

.add(containcanvas);//將畫布新增到頁面上

((iaddchild)docfppc).addchild(docfp);}}

this.docview

.document = fds;

xpsdoc.close();//這個地方需要注意關閉,否則的話會出現莫名其妙的錯誤

}

處理過程中的幾點注意事項:

1、關於xps文件的生成,我是採用的word2010,然後使用列印功能生成的xps文件。

2、關於標籤的設定:如果在word 中你直接寫 的話,在頁面中未必能夠按照你的想法生成標籤。我用的方法是,對於同一行、相鄰的標籤,需要用不同的顏色來進行標記。標記的顏色也要與正文的顏色區分開,關於xps生成的規則還不太清楚,好像只有相同字型的內容都會分到一起。如下圖

3、檢視標記是否正確,可以先把xps文件的字尾名修改一下,然後用winrar解壓,檢視解開目錄 \documents\1\pages\1.fpage ,用記事本開啟,查詢一下確定標籤是否正確。

如下圖:

其中x.fpage是指的第幾頁。

標籤的樣式如下:

請注意,這樣的解壓是單向的,處理前請備份。

4、需要引用的dll檔案:

windowsbase.dll presentationcore.dll reachframework.dll presentationframework.dll ,(部分檔案在wpf中已經被引用了),光確定用需要引用那些檔案都折騰了我半天,丟人啊。

經過最近幾天的折騰,我認為這種方法的優點:

1、純向量繪圖,無失真,模板上面隨意畫。

2、xps模板一旦做好了,交付使用者,使用者一般無法自己進行修改,比較簡單方便。

3、不需要安裝任何第三方外掛程式。

4、任何元素,想加就加,完全可以畫圖、新增水印等

5、字型不會丟失,xps檔案在打包的時候,會一併將字型打包進專案裡面,不管安裝到任何地方,都不需要考慮字型問題

另外,在處理模板的時候,如果使用wps212可能會有驚喜!

wpf中xps文件合併功能實現

原文 wpf中xps文件合併功能實現 如果要是直接先開啟乙個xps檔案,用新檔案去寫fixeddocument,或者documentsequence 新增到新的檔案中的話,會報錯,提示,system.windows.xps.xpspackagingexception 型別的未經處理的異常在 reac...

彙編 採用順序程式設計方法,實現在螢幕上顯示大寫字幕A

執行環境 windows xp professional masm6.15 editplus 第一種方法 採用順序程式設計方法,實現螢幕上顯示大寫字母a。486 data segment use16 mesg db a data ends code segment use16 assume cs c...

VC 實現單文件程式的全屏顯示及恢復

摘要 本文對在vc下單文件程式的全屏顯示及其恢復的實現過程作了介紹。關鍵字 窗體 全屏顯示 visual c 一 引言 在編輯類軟體或程式 編輯程式中經常要遇到一些長度特別大的文字或 尤其是對於程式原始碼的編輯,如果編輯介面太小,則需要頻繁拉動滾動條,對於程式設計師而言是很不情願的,因為這樣會打斷程...