現今一般瀏覽器要檢視PDF已經不是問題,最直覺的方式就是塞在iframe。
<iframe id = "iframe1" runat="server" src="MyFile.pdf">
</iframe>
那有沒有可能進一步做到控制工具列顯示或隱藏呢?
找了一下資料發現了這個:Parameters of Opening PDF Files
上述的連結,我已經在結尾加入了 #page=7
有沒有發現打開不是在第一頁? :D
也就是說最開頭的iframe部分,我們可以改寫為:
<iframe id = "iframe1" runat="server" src="MyFile.pdf#toolbar=0">
</iframe>
開啟PDF時就不會看到工具列了,我測試IE與Chrome有效。
補充說明:
2018年6月12日 星期二
DevExpress 處理 Word 轉圖檔 (以及PDF、HTML)
最近的需求要實作「Word轉圖檔」,研究一些相關技術後,還是使用元件方便。公司剛好有買DevExpress,剛好拿來練習....
網路上找到的範例:
直接複製不能用,可能是版本不同,修改結果如下:
string pathSource = Server.MapPath("~/Files/Sample.docx");
string pathTarget = Server.MapPath("~/Export/Image/Sample.png");
RichEditDocumentServer sourceServer = new RichEditDocumentServer();
sourceServer.LoadDocument(pathSource);
PrintingSystemBase ps = new PrintingSystemBase();
PrintableComponentLinkBase pLink = new PrintableComponentLinkBase(ps);
pLink.Component = sourceServer;
pLink.CreateDocument(true);
ImageExportOptions options = new ImageExportOptions();
options.Format = ImageFormat.Png; // 可輸出為不同圖檔格式
options.Resolution = 300;
options.ExportMode = ImageExportMode.DifferentFiles; //可選擇輸出單圖或多圖
pLink.ExportToImage(pathTarget, options);
DevExpress要參考的dll不少,Web.config可能也需要組態設定,可以直接開DevExpress專案開發,或者新開一個專案參考內容再回頭修改原本專案。
開啟DX專案會自動引用:
using部分
補充:
開啟DX專案會自動引用:
using部分
補充:
- 可透過設定將整份Word輸出為一張圖,或者每頁一張,參考 ImageExportOptions.ExportMode
- 多張圖會需要一個Viewer,目前嘗試使用 Image Gallery
- 研究過程中曾嘗試轉成 XPS,發現 這篇文章 不錯,可參考。
2018年6月11日 星期一
使用 Regex.Replace 快速取代字串
這次需求是需要取出地址前兩個字,但資料各種組成都有,例如:
(799)臺南市仁德區保安路9段99號~90
799臺南市仁德區保安里99鄰保安路9段99號~90
799-00臺南市仁德區保安里99鄰保安路9段99號~90
(79988)臺南市仁德區保安里99鄰保安路9段99號~90@!?+=-\|%$^#*&{}[]
使用 Regex.Replace先將數字與特殊字元取代(主要處理郵遞區號部分)
結果:
臺南市仁德區保安里鄰保安路段號
(799)臺南市仁德區保安路9段99號~90
799臺南市仁德區保安里99鄰保安路9段99號~90
799-00臺南市仁德區保安里99鄰保安路9段99號~90
(79988)臺南市仁德區保安里99鄰保安路9段99號~90@!?+=-\|%$^#*&{}[]
使用 Regex.Replace先將數字與特殊字元取代(主要處理郵遞區號部分)
string address = @"(79988)臺南市仁德區保安里99鄰保安路9段99號~90@!?+=-\|%$^#*&{}[]";
string pattern = @"[\d\W_]";
string replacement = "";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(address, replacement);
結果:
臺南市仁德區保安里鄰保安路段號
PhotoUtils.cs 找不到
引用DevExpress範例時遇到的問題,路徑可參考這篇:
https://www.devexpress.com/Support/Center/Question/Details/Q535762/the-devexpress-web-demos-photoutils-class-is-missing
官方說法在:
c:\Users\Public\Documents\DXperience 13.1 Demos\ASP.NET\CS\ASPxEditorsDemos\App_Code\PhotoUtils.cs
版本不同可能有差異,我的是在這裡找到:
C:\Users\Public\Documents\DevExpress Demos 16.2\Components\ASP.NET\CS\ASPxEditorsDemos\App_Code
加入後記得引用:
using DevExpress.Web.Demos;
https://www.devexpress.com/Support/Center/Question/Details/Q535762/the-devexpress-web-demos-photoutils-class-is-missing
官方說法在:
c:\Users\Public\Documents\DXperience 13.1 Demos\ASP.NET\CS\ASPxEditorsDemos\App_Code\PhotoUtils.cs
版本不同可能有差異,我的是在這裡找到:
C:\Users\Public\Documents\DevExpress Demos 16.2\Components\ASP.NET\CS\ASPxEditorsDemos\App_Code
加入後記得引用:
using DevExpress.Web.Demos;
2018年6月6日 星期三
錯誤 CS2001 \Properties\AssemblyInfo.cs could not be found.
開啟專案後 Properties/AssemblyInfo.cs 顯示問號
建置顯示錯誤
Source file 'D:\SampleCode\MsWordToImage\MsWordToImage\Properties\AssemblyInfo.cs' could not be found.
參考
https://stackoverflow.com/questions/6494691/source-file-properties-assemblyinfo-cs-could-not-be-found
屬性 > 應用程式 > 組件資訊 (即AssemblyInfo)
打開應該會是一片空白,請(至少)填入標題 (Title),按下確定。
這時問號就會消失(組件資訊已經產生),其他資訊系統會自動寫入,結果如下圖。
2018年6月5日 星期二
WITH (NOLOCK) 實作與驗證
建了一個USER資料表,包含ID與金額欄位
撰寫一個簡單的TRANSACTION,更新ID=3的USER金額
Transaction有正常begin與commit,所以再次select時,資料正確。
再來我故意將commit拿掉,此時Transaction執行後將無法結束(也就是TABLE會被LOCK)
從參數 @@TRANCOUNT知道此TRAN已經執行了(一次),但因為沒有commit,資料都還沒真的寫入。
這時候在回頭執行SELECT時,會撈不出資料
但是!
如果此時加入 WITH (NOLOCK),就可以撈出來了!!
可以看到值也已經更改,因為UPDATE有執行到 (請記得資料還沒COMMIT)
這時候回頭加入rollback,再執行一次transaction,
資料會復原,TABLE也會解除LOCK
此時一般的SELECT就可以執行了,不會再TIMEOUT
而數值會恢復到執行前的狀態(因為資料rollback了)
所以如果某個系統程序執行了一段冗長耗時的TRANSACTION
所有相關的TABLE在執行期間都會LOCK,此時某人要撈資料就必須下WITH (NOLOCK)
以上例子:
- 金額amount會在Transaction內異動,不適合搭配NOLOCK撈取。
- ID或姓名name,可使用NOLOCK,避免Transaction執行間無法撈取。
附帶一提,如果剛好要撈的資料欄位必須等TRANSACTION結束(不能用NOLOCK),
又不想讓USER看到逾時的話,可以改用NOWAIT判斷,然後提示USER,如下:
關於 NOWAIT 的實作範例可 參考這裡
訂閱:
文章 (Atom)