2011-03-09 60 views
2

我有一個C#代碼後面的文件,從服務器動態生成HTML並將其轉換爲PDF。在HTML中有<link rel="stylesheet">元素引用外部樣式表以及許多<img>標籤。C#.NET:從動態生成的HTML中更改CSS文件中的元素?

所有這些文件,圖像和樣式表都來自www.example.com,我試圖使用相同的url來使所有元素都來自static.example.com。我使用了明顯的stringName.Replace("www.example.com","static.example.com")來替換HTML中的元素,但是有什麼方法可以爲CSS文件中的引用執行此操作嗎?

例如:
background-image:url('www.example.com/bg.png');
需要成爲
background-image:url('static.example.com/bg.png');
在外部文件。

任何想法的方法?創造力受歡迎;我喜歡任何事情!

謝謝:)

+0

'/ path/to/file.png' url在每臺服務器上都是一樣的,btw。 – batman 2011-03-09 18:28:48

回答

3

既然你說「代碼背後的文件」......你在ASP.NET中做這個?

您可以使用HTML代碼中的String.Replace函數將<link href="www.example.com/cssfile.css">更改爲<link href="fixcss.ashx?file=www.example.com/cssfile.css">。然後編寫一個fixcss.ashx來檢索CSS文件並在其上執行字符串替換。

+0

我是,這聽起來像是一個很好的解決方案。謝謝! – batman 2011-03-09 19:16:52

+0

+1。此外,請確保緩存結果(使用系統緩存,或者更好地將其寫入磁盤或數據庫),以便在沒有必要的情況下不對每個請求執行字符串解析。 – Paul 2011-03-09 19:17:52

2

您可以使用FILESTREAM來獲取文件,然後由代碼替換你有used.Other方法是開放

你會發現這個喜歡樂於助人

CSS Parser

Reading and Parsing a CSS file

+0

我是一位長期的PHP程序員,而C#對我來說是非常新的。所以建議是實際編輯文件?或者在文件流中打開它,讓程序將文件視爲「已編輯」。我將HTML傳遞給Syncfusion的PDF庫進行轉換。 MSHTML引擎內部呈現文件並繪製位圖。將閱讀該文件,並使替換設置情況瞭解程序該文件有這些變化?我想我可能不得不寫一個「覆蓋服務器」的種類,爲了渲染器的目的,有不同的文件內容。 – batman 2011-03-09 18:53:17

+0

文件流將打開文件,因爲你必須先給它的路徑請告訴我,你在Winforms的ASP.Net工作? – 2011-03-09 18:56:32

+0

我認爲你應該看看他們解析css文件的鏈接,你可以做任何你想做的事 – 2011-03-09 18:59:14

1

啊哈,這是我的想法。這可能是低效率的,但這是我想我可以做的:

將每個<link rel="stylesheet">更改爲<style> ... </style>標籤並讀取文件內容,用嵌入的文件替換外部樣式表。

這可能是效率低下的想法?

謝謝!

+1

這也應該可以工作 – 2011-03-09 19:06:21

1

僅適用於某些品種(以及其他可能處於不同環境中的人),如果您有權訪問它,則可以(也應該)使用URL Rewrite module。它不僅可以重定向(就像PHP應用程序中的.htaccess一樣),還可以重寫所提供文件中的URL(例如,您的CSS文件)。

+0

謝謝,如果我不是在一個嚴格的IIS-.NET環境中,這將是一個很好的解決方案。 :) – batman 2011-03-09 22:46:15

+0

不,這是一個IIS模塊。 – Paul 2011-03-10 04:13:07