Windows 시스템 에서 PHP 를 사용 하여 Word 문 서 를 만 드 는 튜 토리 얼

10825 단어 PHPWord
준비 작업
우선,윈도 시스템 에 전형 적 인 WAMP 환경 이 설치 되 어 있 는 지 확인 하 십시오.Interop 은 순 전 히 윈도 의 특성 이기 때문에 윈도 플랫폼 에서 아파 치 와 PHP 를 구축 할 것 입 니 다.이 실례 에서 나 는 EasyPHP 14.1 을 사 용 했 는데 이 소프트웨어 의 설치 와 설정 은 모두 매우 쉽다.
다음은 Microsoft Office 를 설치 해 야 합 니 다.판본 은 엄격하게 요구 하 는 것 이 아니다.제 가 사용 하고 있 는 것 은 Office 2013 전문 판 이지 만 2007 년 이후 의 Office 버 전 은 모두 사용 할 수 있 을 것 입 니 다.
그 다음 에 Interop 응용 프로그램(PIA,우선 상호작용 구성 요소 라 고도 함)을 개발 하 는 라 이브 러 리 가 설치 되 어 있 는 지 확인 해 야 합 니 다.이것 을 확보 하기 위해 서 우 리 는 자원 관리 자 를 열 고\assembly 를 찾 을 수 있 습 니 다.아래 에 설 치 된 PIAs 지점 을 볼 수 있 습 니 다.
201573144223171.png (1050×656)
우 리 는 Microsoft.Office.Interop.Word 항목 을 볼 수 있 습 니 다.이것 이 바로 우리 가 이 예시 에서 사용 할 PIA 다."이름","버 전","공개 키 표시"에 특히 주의 하 십시오.우 리 는 PHP 스 크 립 트 에 그것들 을 사용 할 것 이다.
이 디 렉 터 리 에 서 는 프로 그래 밍(PHP 뿐만 아니 라 VB.net,C\#등)에 사용 되 는 다른 PIAs(Office 가족 전체 포함)도 볼 수 있 습 니 다.
이 목록 에 Microsoft.Office.Interop 의 패키지 가 포함 되 어 있 지 않 으 면 Office 를 다시 설치 하고 설치 에 PIA 를 포함 할 수 있 습 니 다.우리 도 이 가방 을 수 동 으로 다운로드 하여 설치 할 수 있다.설치 의 상세 한 절 차 는 이 MSDN 페이지. 을 찾 아 볼 수 있다.
메모:Microsoft Office 2010 PIA Redistributable 만 따로 다운로드 하여 설치 할 수 있 습 니 다.이 가방 의 PIA 버 전 은 14.0.0 입 니 다.버 전 15 는 Office 설치 로 만 얻 을 수 있 습 니 다.
마지막 으로,우 리 는 파일 php.ini 에서 PHP 확장 php 를 사용 해 야 합 니 다.com_dotnet.dll,그리고 서버 를 다시 시작 합 니 다.
이제 우 리 는 프로 그래 밍 을 시작 할 수 있다.
HTML 폼
이 demo 는 주로 배경 처리 에 관심 을 가지 기 때문에 간단 한 HTML 폼 으로 프론트 데스크 톱 을 보 여 줍 니 다.이렇게 보 입 니 다.
201573144251848.png (889×757)
"Name","Gender"를 입력 하 는 데 사용 할 텍스트 상자 가 있 습 니 다."Age"의 도 메 인 값 제어 와"Message"를 쓰 는 텍스트 도 메 인 이 있 습 니 다.마지막 으로"Submit"단추 가 필요 합 니 다.
이 파일 을"index.html"이 라 고 명명 하여 가상 호스트 의 루트 디 렉 터 리 에 저장 하면 URL 을 통 해 이 파일 에 직접 접근 할 수 있 습 니 다.예 를 들 어:http://test/test/interop
백 스테이지
백그라운드 의 PHP 파일 은 우리 가 토론 하고 자 하 는 핵심 부분 이다.나 는 먼저 코드 를 아래 에 붙 이 고,이어서 한 걸음 한 걸음 설명 할 것 이다.
 

<?php
 
$inputs = $_POST;
$inputs['printdate']=''; 
// A dummy value to avoid a PHP notice as we don't have "printdate" in the POST variables. 
 
$assembly = 'Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c';
$class = 'Microsoft.Office.Interop.Word.ApplicationClass';
 
$w = new DOTNET($assembly, $class);
$w->visible = true;
 
$fn = __DIR__ . '\\template.docx';
 
$d = $w->Documents->Open($fn);
 
echo "Document opened.<br><hr>";
 
$flds = $d->Fields;
$count = $flds->Count;
echo "There are $count fields in this document.<br>";
echo "<ul>";
$mapping = setupfields();
 
foreach ($flds as $index => $f)
{
  $f->Select();
  $key = $mapping[$index];
  $value = $inputs[$key];
  if ($key == 'gender')
  {
    if ($value == 'm')
      $value = 'Mr.';
    else
      $value = 'Ms.';
  }
   
  if($key=='printdate')
    $value= date ('Y-m-d H:i:s');
 
  $w->Selection->TypeText($value);
  echo "<li>Mappig field $index: $key with value $value</li>";
}
echo "</ul>";
 
echo "Mapping done!<br><hr>";
echo "Printing. Please wait...<br>";
 
$d->PrintOut();
sleep(3);
echo "Done!";
 
$w->Quit(false);
$w=null;
 
 
 
function setupfields()
{
  $mapping = array();
  $mapping[0] = 'gender';
  $mapping[1] = 'name';
  $mapping[2] = 'age';
  $mapping[3] = 'msg';
  $mapping[4] = 'printdate';
   
 
  return $mapping;
}
폼 에서 전 달 된 값 을 가 져 오 는 변수$inputs 를 설정 한 후에 우 리 는 printdate 를 저장 하 는 가상 값 을 만 들 려 고 합 니 다.우 리 는 잠시 후에 이 변수 가 왜 필요 한 지 토론 할 것 입 니 다.지금 우 리 는 이 4 줄 의 비교적 관건 적 인 코드 를 보 았 습 니 다.
 

$assembly = 'Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c';
$class = 'Microsoft.Office.Interop.Word.ApplicationClass';
 
$w = new DOTNET($assembly, $class);
$w->visible = true;
PHP 의 COM 조작 은 assembly 에서 class 의 인 스 턴 스 를 요청 해 야 합 니 다.우리 의 사례 에서 나 는 Word 를 조작 할 것 이 라 고 생각한다.만약 우리 가 지난 캡 처 에서 보 여 준 코드 를 고려한다 면,우 리 는 완전한 서명 을 한 Word PIA 를 만 들 수 있 을 것 이다.
  •     “Name","Version","Public Key Token"은"c:\Windows\\assembly"를 탐색 할 때 보 여 주 는 정보
  • 입 니 다.
  •     “"Cultrue"는 항상 neutrual 입 니 다.
  • 클래스 컴 파일 된 파일 접미사 이름 을 보통 ApplicationClass 로 호출 합 니 다.
    다음 두 단 계 를 설정 하면 워드 대상 을 초기 화 할 수 있 습 니 다.
    우선,워드 대상 은 배경 에 저장 하거나 visible 속성 을 true 로 설정 하여 프론트 에 보 여 줍 니 다.
    그리고 처리 할 문 서 를 열 어서$d 변수 로 예화 합 니 다.
    문서 대상 에 html 폼 의 텍스트 를 기반 으로 문서 의 내용 을 추가 합 니 다.여기 서 파 라 메 터 를 설정 할 수 있 습 니 다.
    가장 좋 지 않 은 방법 은 php 페이지 의 모든 내용 을 하 드 인 코딩 한 다음 워드 대상 에 추가 하 는 것 입 니 다.나 는 이런 방식 을 채택 하지 않 을 것 을 강력 히 건의 합 니 다.그 이 유 는 다음 과 같 습 니 다.
    1 코드 가 유연성 이 없 기 때문에 php 내용 의 어떠한 변화 도 스 크 립 트 를 다시 수정 해 야 한다.
    2.통제 층,전시 층 의 분 리 를 위반 했다.
    3  워드 내용 의 형식(정렬,글꼴,스타일 등)을 설정 해 야 한다 면 코드 줄 수 를 크게 늘 리 고 프로 그래 밍 방식 으로 스타일 을 수정 하 는 것 은 매우 번 거 로 운 일이 다.
    다른 방식 은'검색-교체'를 사용 하 는 것 이다.PHP 에 내 장 된 이런 기능 은 매우 강하 다.교체 해 야 할 자리 내용 주위 에 구분자 들 을 배치 하 는 워드 문 서 를 만 들 수 있 습 니 다.예 를 들 어,우 리 는 다음 과 같은 내용 을 포함 하 는 문 서 를 만 듭 니 다.
    
    {{name}}
    
    
    PHP 에 서 는 폼 제출 에서 가 져 온"Name"값 으로 만 바 꿉 니 다.이런 방식 은 첫 번 째 옵션 중의 그러한 결점 을 피 했다.우 리 는 정확 한 구분자 만 찾 아야 합 니 다.이 예 에서 사용 하 는 템 플 릿 이 워드 문 서 를 제외 하고 템 플 릿 렌 더 링 을 하 는 것 같 습 니 다.
    세 번 째 옵션 은 제 제안 이 고 Word 의 고급 테마 입 니 다.우 리 는 도 메 인 으로 대체 자 를 표시 할 것 입 니 다.우리 의 PHP 코드 에서 우 리 는 해당 폼 값 의 필드 를 직접 업데이트 할 것 입 니 다. 
    이런 방법 은 유연 하고 빠 르 며 Word 의 가장 좋 은 실천 에 부합된다.파일 의 전체 텍스트 검색 도 피 하 는 것 이 성능 향상 에 도움 이 된다.이 옵션 은 단점 이 있 습 니 다. 
    한 마디 로,Word 는 처음 선보 인 이후로 이름 색인 필드 를 지원 하지 않 았 다.Word 문서 에서 만 든 필드 에 이름 을 제 공 했 음 에 도 불구 하고 모든 필드 에 숫자 아래 표 시 를 사용 해 야 합 니 다.이것 은 우리 가 폼 필드 의 필드 색인 과 이름 사이 의 매 핑 매 뉴 얼 을 사용 하 는 이 유 를 설명 한다.
    워드 문서 에 필드 를 삽입 하 는 방법 을 배 웁 니 다.이 demo 에 대해 서 는 5 개의 MERGEFIELD 필드 를 갖 춘 문서 가 있 습 니 다.또한,우 리 는 문서 와 PHP 스 크 립 트 를 한 디 렉 터 리 에 놓 아서 쉽게 가 져 올 수 있 습 니 다.
    printdate 필드 에 해당 하 는 창 필드 가 없습니다.이것 이 바로 우리 가$inputs 배열 에 가짜 printdate 를 key 로 추가 해 야 하 는 이유 입 니 다.이 키 가 없 으 면 스 크 립 트 는 실행 할 수 있 지만$inputs 배열 에 색인 printdate 가 존재 하지 않 는 다 는 알림 이 있 습 니 다.
    폼 데 이 터 를 사용 하여 필드 의 값 을 업데이트 한 후 다음 명령 으로 문 서 를 인쇄 합 니 다.
     
    
    $d->PrintOut();
    
    PrintOut 방법 은 몇 가지 선택 할 수 있 는 인자 가 있 습 니 다.여기 서 가장 간단 한 형식 을 사용 합 니 다.이것 은 우리 윈도 우즈 기기 에 연 결 된 기본 프린터 에 복사 본 을 인쇄 할 것 입 니 다.
    우 리 는 PrintPreview 를 사용 하여 인쇄 미리 보 기 를 할 수 있 습 니 다.순수 자동화 상황 에서 물론 우 리 는 PrintOut 을 직접 사용 하여 인쇄 를 한다.
    워드 프로그램 을 종료 하기 전에 인쇄 작업 이 백 엔 드 를 완전히 종료 하 는 데 시간 이 필요 하기 때문에 조금 더 기 다 려 야 합 니 다.delay(3)가 없 으 면$w->Quit 가 즉시 실행 되 고 인쇄 작업 이 즉시 종 료 됩 니 다.
    마지막 으로,우 리 는$w->Quit(false)를 호출 하여 우리 의 PHP 스 크 립 트 를 통 해 워드 프로그램 을 닫 는 것 을 선택 합 니 다.여기 서 제공 하 는 유일한 매개 변 수 는 종료 전에 변경 사항 을 저장 하 기 를 원 하 는 지 여 부 를 가리 키 는 것 입 니 다.우 리 는 확실히 문 서 를 변 경 했 지만,다른 사용자 의 입력 에 깨끗 한 템 플 릿 을 제공 하고 싶 지 않 기 때문에,문 서 를 저장 하고 싶 지 않 습 니 다.
     
    인 코딩 을 마 친 후에 우 리 는 폼 페이지 를 불 러 오고 내용 을 입력 하 며 폼 을 제출 할 수 있 습 니 다.다음 캡 처 는 PHP 스 크 립 트 의 출력 을 보 여 주 며 Word 문 서 를 업데이트 합 니 다.
    201573144442664.png (889×757)
    201573144502426.png (1663×843)
    인 코딩 속 도 를 높이 고 PIA 를 잘 이해 합 니 다.
    PHP 는 약 한 유형의 언어 다.COM 대상 은 Object 형식 입 니 다.우리 의 PHP 인 코딩 과정 에서 한 대상 에서 우 리 는 코드 자동 알림 과 완성 기능 을 사용 할 수 없습니다.하나의 Word 응용,하나의 문서,심지어 하나의 필드 에서 도 마찬가지 입 니 다.우 리 는 그것 이 어떤 특성 이 있 거나 어떤 방법 을 지원 하 는 지 모른다.
    이것 은 우리 개발 의 속 도 를 대폭 낮 출 것 이다.개발 을 더욱 빨리 하기 위해 서,우선,나 는 우리 가 c\#에서 개발 기능 을 우리 의 PHP 인 코딩 으로 옮 겨 야 한다 고 건의 합 니 다.저 는 무료 C\#IDE 를'\#develop'이 라 고 추천 합 니 다.여기,이곳 을 사용 할 수 있 습 니 다.VS 보다 저 는 이 소프트웨어 를 더 좋아 합 니 다.왜냐하면\#develop 은 부피 가 더 작고 간결 하 며 응답 이 빠 르 기 때 문 입 니 다.
    C\#코드 를 PHP 로 옮 기 는 것 은 조금도 무 섭 지 않다.먼저 C\#코드 를 보 여 주세요.
     
     Word.Application w=new Word.Application();
    w.Visible=true;
                
    String path=Application.StartupPath+"\\template.docx";
                
    Word.Document d=w.Documents.Open(path) as Word.Document;
                
    Word.Fields flds=d.Fields;
    int len=flds.Count;
                
    foreach (Word.Field f in flds)
    {
        f.Select();
        int i=f.Index;
        w.Selection.TypeText("...");
    }

    C\#의 코드 는 우리 가 이전에 보 여 준 PHP 의 코드 기반 과 똑 같은 것 을 볼 수 있 습 니 다.C\#는 강 한 유형의 언어 이기 때문에 우 리 는 일부 유형의 전환 문 구 를 볼 수 있 습 니 다.우 리 는 우리 의 변수 에 유형 을 부여 해 야 합 니 다.
    코드 의 유형 이 있 으 면 우 리 는 코드 의 자동 알림 과 코드 자동 완성 기능 을 마음껏 누 릴 수 있 습 니 다.그러면 우리 가 개발 하 는 속 도 는 큰 폭 으로 향상 될 것 입 니 다.
    또 다른 방법 은 Word 의 매크로 명령 을 사용 하 는 것 입 니 다.우 리 는 먼저 우리 가 반복 해 야 할 동작 을 한 번 조작 한 후에 매크로 로 그것 을 녹음 했다.하나의 매크로 는 사실 Visual Basic 이 고 PHP 로 도 쉽게 번역 할 수 있 습 니 다.
    가장 중요 한 것 은 여기 다운로드 입 니 다.특히 문서 에서 모든 Office 응용 네 임 스페이스 는 우리 가 가장 필요 로 하 는 참고 가 될 것 입 니 다.비교적 자주 사용 하 는 세 가지 응용 은 다음 과 같다.
  •     Excel 2013:http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel(v=office.15).aspx
  •     Word 2013:http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word(v=office.15).aspx
  •     PowerPoint2013:http://msdn.microsoft.com/en-us/library/microsoft.office.interop.powerpoint(v=office.15).aspx
  • 결어
    이 글 에서 우 리 는 PHP COM 라 이브 러 리 와 Microsoft Office Interop 기능 을 사용 하여 Word 문 서 를 아름 답 게 만 드 는 방법 을 보 여 주 었 다.
    윈도 와 오 피 스 는 우리 일상생활 에서 광범 위 하 게 사용 된다 고 할 수 있다.Office 나 Windows 의 강점 과 PHP 를 알 고 이해 할 수 있 는 것 은 Windows 플랫폼 에서 PHP 개발 을 하 는 모든 프로그래머 에 게 필요 하 다.
    PHP 의 COM 확장 을 사용 하면 이 조합 을 파악 할 수 있 는 문 이 열 립 니 다.
    만약 당신 이 이 부분의 프로 그래 밍 에 비교적 관심 이 있다 면,당신 의 평론 을 남 겨 주 십시오.우 리 는 이 화제 에 더 많은 글 을 쓰 는 것 을 고려 할 것 입 니 다.나 는 더 많은 현실 생활 의 응용 개발 이 이런 방식 을 사용 할 수 있 기 를 매우 기대한다.

    좋은 웹페이지 즐겨찾기