2012-06-19 4 views
8

저는 HTML 이메일을 텍스트로 변환해야하는 프로젝트를 진행하고 있습니다. (열이 잘 정렬로) 예상되는 결과는 텍스트 파일에 다음과 같이한다HTML 표를 텍스트로 변환하십시오.

<table> 
    <tr> 
     <td width="10%"></td> 
     <td width="60%"> test product </td> 
     <td width="20%">5</td> 
     <td width="10%"> £50.00 </td> 
    </tr> 
    <tr> 
     <td></td> 
     <td colspan="3" width="100%"> Project Name: Test Project </td> 
    </tr> 
    <tr> 
     <td width="10%"> </td> 
     <td colspan="2" width="80%"> Page 1 : 01 New York 1.jpg </td> 
     <td width="10%"> £0.00 </td> 
    </tr> 
</table> 

:

test product          5   £50.00 
Project Name: Test Project                
Page 1 : 01 New York 1.jpg         £0.00 

내 생각으로 HTML 콘텐츠를 구문 분석 아래는 HTML 코드의 단순화 된 버전입니다 DOMDocument. 그런 다음 표의 기본 너비 (예 : 100 공백)를 설정 한 다음 각 열의 너비를 %에서 공백 수로 변환합니다 (colspan & 속성이 <td> 태그 기준). 그런 다음이 열의 너비를 각 열의 데이터 중 strlen으로 뺍니다. 모든 열을 수직으로 정렬하도록 pad_right에 필요한 공간 수를 저장합니다.

나는 그런 식으로 일해 왔고, 내가 원하는 것을 보관하지는 않았지만, 그것이 어리석은 사람인지, 아니면 누가 더 나은 방법으로 나를 도와 주는지 궁금해하고있다.

멀티 바이트 언어 (일본어, 한국어 등 ...)의 경우에도 문자가 한 공간보다 커지고 엉망이되기 때문에 접근 방식이 작동하지 않을 것이라고 생각합니다.

누군가 나를 도와 줄 수 있습니까?

+4

텍스트가 모노 스페이스 글꼴로 표시되는 경우에만 작동합니다. – Roman

+3

어? 멀티 바이트는 txt 파일에서 더 많은 공백을 차지하지 않습니다. – PeeHaa

+1

기대하는 것보다 넓은 컬럼이 있다면 어떻게 할 것입니까? –

답변

11

이것은 하나의 아이디어 일뿐입니다.

바퀴를 재발 명하지 마십시오. 테이블 렌더링은 어렵습니다. 텍스트 만 사용하는 렌더링 테이블은 훨씬 더 어렵습니다.

lynx와 같이 명령 줄에서 사용할 수있는 텍스트 기반 브라우저가 있습니다. HTML 테이블을 파일에 쓴 다음 텍스트 기반 브라우저에 파일을 전달하고 결과를 가져올 수 있습니다.

주 : 텍스트 기반 브라우저는 일반적으로 셸에서 사용되며 일반적으로 고정 폭 글꼴로 표시됩니다. 이것은 전제 조건으로 남아 있습니다.

lynx 및 w3m은 모두 Windows에서 사용할 수 있습니다. 텍스트 기반 테이블 렌더러의 복잡성을 명확히하기 위해 오픈 소스 인 w3m을 살펴보십시오. These 3000 lines of code은 html 표만 표시합니다.

UPDATE

코드 예제 :

$table = '<table><tr><td>foo</td><td>bar</td></tr></table>'; //this contains your table 
$html = "<html><body>$table</body></html>"; 

//write html file 
$tmpfname = tempnam(sys_get_temp_dir(), "tblemail"); 

$handle = fopen($tmpfname, "w"); 
fwrite($handle, $html); 
fclose($handle); 

$text = shell_exec("w3m.exe -dump \"$tmpfname\""); 
unlink($tmpfname); 

echo "<pre>$text</pre>"; 

w3m.exe 요구는 작업 디렉토리에 있어야합니다.

(시도하지 않았 음)

+0

고마워, 문제는이 변환이 자동적이어야하고 & Lynx를 설치할 수 없도록 Window 서버에서 실행되는 우리 회사 소프트웨어의 일부입니다. – Olizt

+1

오, 자동으로 생각했습니다. 아이디어는 그것을 자동화하는 것이 었습니다. PHP는 파일을 작성하고 브라우저를 실행 (shell_exec)합니다. 위 코드를 예제 코드 – Roman

+0

에 추가 할 것입니다 : "lynx와 w3m은 모두 Windows에서 사용할 수 있습니다"! – feeela

관련 문제