2011-03-09 6 views
2

동적으로 생성 된 HTML을 서버에서 가져 와서 PDF로 변환하는 C# 코드 숨김 파일이 있습니다. 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('static.example.com/bg.png');
될 필요가 background-image:url('www.example.com/bg.png');
.

접근 방법에 대한 아이디어가 있습니까? 창의력을 환영합니다. 나는 아무것도를 위해있다!

감사합니다 :)

+0

'/ path/to/file.png' URL은 각 서버에서 동일합니다 (btw). – batman

답변

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

+0

+1이에요. 또한 결과를 캐싱 (시스템 캐시를 사용하거나 더 나은 디스크 또는 데이터베이스에 쓰기)하여 반드시 수행 할 필요가없는 모든 요청에 ​​대해 문자열 구문 분석을 수행하지 않도록하십시오. – Paul

2
당신은 파일을 얻기 위해 파일 스트림을 사용하여 다음 used.Other 접근이 열려있는 코드로 대체 할 수

당신은 도움이

CSS Parser

처럼이를 찾을 수 있습니다

Reading and Parsing a CSS file

+0

저는 오랫동안 PHP 프로그래머 였으므로 C#은 제게 상당히 새로운 것입니다. 그래서 제안은 실제로 파일을 편집하는 것입니까? 또는 파일 스트림에서 열면 프로그램에서 파일을 "편집 된 것처럼 처리합니다." HTML을 Syncfusion의 PDF 라이브러리에 전달하여 변환합니다. 내부의 MSHTML 엔진은 파일을 렌더링하고 비트 맵을 그립니다. 파일을 읽고 대체 프로그램을 작성하면 파일에 이러한 변경 사항이 있다는 상황 인식 기능이 설정됩니까? 렌더러의 목적에 따라 파일 내용이 다른 "대체 서버"를 작성해야 할 수도 있습니다. – batman

+0

파일 스트림은 파일을 열 때 먼저 경로를 지정해야합니다. Winforms의 ASP.Net에서 작업하고 있다고 말해주십시오. –

+0

나는 당신이 CSS 파일을 파싱하는 링크를 봐야한다고 생각한다. 그리고 너는 무엇을 할 수 있니. –

1

아하, 내가 가진 아이디어가 여기 있습니다. 이것은 비효율적 일 수도 있지만 다음과 같이 할 수 있습니다.

<link rel="stylesheet"><style> ... </style> 태그로 변경하고 파일 내용을 읽은 다음 외부 스타일 시트를 포함 된 것으로 바꾸십시오.

이것은 비효율적 일 수 있습니다.

감사합니다.

+1

그게 또한 –

1

다양한 환경 (그리고 다른 환경에있을 수있는 사람들)에게만 액세스 할 수 있다면 URL Rewrite module을 사용할 수 있습니다. 리디렉션 (PHP 응용 프로그램의 .htaccess와 같은)뿐만 아니라 제공되는 파일 (예 : CSS 파일)의 URL도 다시 작성할 수 있습니다.

+0

감사합니다. 엄격한 IIS - .NET 환경이 아닌 경우 * 훌륭한 솔루션입니다. :) – batman

+0

아니요, 이것은 IIS 모듈입니다. – Paul