메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

PHP를 사용하여 PDF 파일을 동적으로 빌드하기

PHP를 사용하여 PDF 파일의 형식과 컨텐츠를 쉽게 제어하기

Jack Herrington, 소프트웨어 엔지니어, Leverage Software Inc.
Jack D. Herrington은 20년 경력의 소프트웨어 엔지니어이다. Code Generation in Action, Podcasting Hacks, PHP Hacks(출간 예정)의 저자이기도 하다. 30개 이상의 기술자료도 집필했다. (jack_d_herrington@codegeneration.net)

요약:  PHP를 사용하여 PDF 파일을 동적으로 빌드하는 전체 프로세스를 살펴봅니다. FPDF(Free PDF) 라이브러리나 PDFLib-LITE와 같은 오픈 소스 도구와 컨텐츠의 PDF 형식을 제어할 수 있는 PHP 코드를 실험합니다.

기사 게재일:  2011 년 9 월 06 일
난이도: 초급 원문:  보기 PDF:  A4 and Letter (400KB | 15 pages)Get Adobe® Reader®
페이지뷰:  1663 회
의견:  


때로는 인쇄할 페이지의 렌더링 방식을 제어할 필요가 있다. 이러한 경우에는 HTML을 사용하는 것이 적합하지 않다. PDF 파일을 사용하는 경우에는 페이지가 렌더링되는 방식과 페이지에서 텍스트, 그래픽 및 이미지가 렌더링되는 방식을 완전히 제어할 수 있다. 아쉽게도 PDF 파일을 빌드하는 데 필요한 API는 표준 PHP 툴킷에 포함되어 있지 않다. 따라서 다른 도구가 필요하다.

자주 사용하는 약어

  • API: Application programming interface
  • DOM: Document Object Mode
  • HTML: HyperText Markup Language
  • PDF: Portable Document Format
  • W3C: World Wide Web Consortium
  • XML: Extensible Markup Language

PHP용 PDF 지원을 웹에서 검색할 때, 가장 먼저 찾을 수 있는 것은 상용 PDFLib 라이브러리와 이 라이브러리의 오픈 소스 버전인 PDFLib-Lite이다. 이러한 라이브러리는 성능이 우수하지만 이러한 상용 버전은 가격이 매우 비싸다. 이 라이브러리의 경량 버전은 소스로만 배포되며 이러한 제한으로 인해 호스트 환경에서 이 라이브러리를 설치하려고 하면 문제점이 발생할 수도 있다.

순수 PHP로 만든 FPDF(Free PDF) 라이브러리를 선택할 수도 있다. 이 라이브러리는 컴파일할 필요가 없으며 완전히 무료이다. 따라서 라이센스가 없는 PDFLib를 사용할 때처럼 워터마크가 표시되지는 않는다. 이 기사에서는 이 FPDF 라이브러리를 사용하게 된다.

PDF 파일을 동적으로 빌드하는 과정을 설명하기 위해 여성 롤러 더비 경기의 점수를 사용할 것이다. 이러한 점수는 웹에서 가져와서 XML로 변환하였다. 목록 1에는 XML 데이터 파일의 예제가 표시되어 있다.


목록 1. XML 데이터

<events>  
  <event name='Beast of the East 2011'>
    <game score1='88' team1='Toronto Gore-Gore Rollergirls' 
          team2='Montreal La Racaille' score2='11'/>
    <game score1='58' team1='Toronto Death Track Dolls' 
          team2='Montreal Les Contrabanditas' score2='49'/>
     ...
  </event>
  <event name='Dustbowl Invitational 2011'>
     ...
  </event>
  <event name='The Great Yorkshire Showdown 2011'>
     ...
  </event>
</events>

XML의 루트 요소는 events 태그이다. 데이터는 이벤트로 그룹화되어 있으며 여기에서는 각 이벤트가 몇 개의 경기를 유지한다. events 태그 안에는 일련의 event 태그가 있으며 이 태그 안에는 다수의 game 태그가 있다. 이러한 game 태그에는 경기에 참여하는 두 팀의 이름과 경기를 통해 얻은 점수가 포함되어 있다.

목록 2에는 XML을 읽는 데 사용할 PHP 코드가 표시되어 있다.


목록 2. getresults.php

<?php
function getResults() {
  $xml = new DOMDocument(); 
  $xml->load('events.xml'); 
  $events = array();
  foreach($xml->getElementsByTagName('event') as $event) { 
    $games = array();
    foreach($event->getElementsByTagName('game') as $game) {
      $games []= array( 'team1' => $game->getAttribute('team1'),
        'score1' => $game->getAttribute('score1'),
        'team2' => $game->getAttribute('team2'),
        'score2' => $game->getAttribute('score2') );
    }
    $events []= array( 'name' => $event->getAttribute('name'),
      'games' => $games );
  }
  return $events;
}
?>

이 스크립트에서는 XML 파일을 DOMDocument로 읽어오는 getResults 함수를 구현한다. 그런 다음, DOM 호출을 사용하여 모든 event 태그와 game 태그를 순회하여 이벤트 배열을 작성한다. 이 배열의 각 요소 안에는 이벤트의 이름과 진행된 경기의 배열이 포함되어 있는 해시 테이블이 있다. 구조는 기본적으로 XML 구조의 인메모리 버전이라고 할 수 있다.

이 스크립트가 작동하는지 테스트하기 위해 getResults 함수를 사용하여 파일을 읽은 다음, 그 데이터를 일련의 HTML 테이블로 출력하는 HTML 내보내기 페이지를 작성하게 된다. 목록 3에는 이러한 테스트를 수행하는 데 필요한 PHP 코드가 표시되어 있다.


목록 3. 결과 HTML 페이지

<html><head><title>Event Results</title></head>
<body>
<?php
include_once('getresults.php');
$results = getResults();
foreach( $results as $event ) {
?>
<h1><?php echo( $event['name'] ) ?></h1>
<table>
<?php
foreach( $event['games'] as $game ) {
  $s1 = (int)$game['score1'];
  $s2 = (int)$game['score2'];
?>
<tr>
  <td style="font-weight:<?php echo( ( $s1 > $s2 ) ? 'bold' : 'normal') ?>">
    <?php echo( $game['team1'] ) ?></td>
  <td><?php echo( $s1 ) ?></td>
  <td style="font-weight:<?php echo( ( $s2 > $s1 ) ? 'bold' : 'normal') ?>">
    <?php echo( $game['team2'] ) ?></td>
  <td><?php echo( $s2 ) ?></td>
</tr>
<?php
}
?>
</table>
<?php
}
?>
</body></html>

이 코드와 getresults.php 및 웹 서버로 업로드한 XML 데이터 파일을 사용하여 HTML 결과를 확인할 수 있다. HTML 결과는 그림 1과 비슷하다.


그림 1. HTML로 표시된 경기 결과
HTML로 표시된 경기 결과의 스크린샷

이 결과에서는 어떤 팀이 경기에서 승리했는지 확인하기 쉽도록 승리한 팀을 굵은체로 표시한다.

PDF 작성

데이터가 확보되었으므로 PDF 파일을 작성하는 데 집중할 차례이다. 첫 번째 단계에서는 FPDF 라이브러리를 다운로드하여 기존의 애플리케이션 파일 세트와 동일한 디렉토리에 설치한다. 사실상, 이 라이브러리가 PHP 라이브러리 경로에 있기만 하면 어디든지 원하는 위치에 설치할 수 있다. 목록 4와 같이 'FPDF_FONTPATH'를 설정해야 하므로 이 폰트 디렉토리를 설정하는 위치를 기록해 둔다.


목록 4. PDF Hello World

<?php
define('FPDF_FONTPATH','/Library/WebServer/Documents/derby/font/');

require( 'fpdf.php' );

$pdf = new FPDF();
$pdf->SetFont('Arial','',72);
$pdf->AddPage();
$pdf->Cell(40,10,"Hello World!",15);
$pdf->Output();
?>

이 스크립트는 일반적인 "Hello World" 예제이지만 HTML 대신 PDF를 사용한다. 이 스크립트에서는 먼저 define문을 사용하여 FPDF 폰트 디렉토리의 위치를 설정한다. 그런 다음, require문을 사용하여 FPDF 라이브러리를 가져온다. 그 후에는 FPDF 오브젝트를 작성하고, 폰트를 설정하고, 페이지를 추가한 후에 Cell 메소드를 사용하여 페이지에 테스트를 일부 삽입하여 PDF를 출력한다.

그림 2에는 모든 것이 제대로 되었을 때의 결과가 표시되어 있다.


그림 2. PDF로 표시된 Hello World
PDF로 표시된 Hello World의 스크린샷

PDF가 표시되지 않으면 명령행에서 이 스크립트를 실행하여 fpdf.php 파일이 누락되었는지 또는 또 다른 문제점이 있는지 확인한다.

이제까지 PDF 렌더링 작업을 살펴보았으므로 롤러 더비 결과 파일과 이 렌더링 작업을 병합하여 무엇을 동적으로 생성할 수 있는지 확인한다. 목록 5에는 이렇게 병합한 것의 첫 번째 버전이 표시되어 있다.


목록 5. 결과를 표시하는 첫 번째 PDF 버전

<?php
define('FPDF_FONTPATH','/Library/WebServer/Documents/derby/font/');

require( 'fpdf.php' );
require( 'getresults.php' );

class PDF extends FPDF
{
function EventTable($event)
{
    $this->Cell(40,10,$event['name'],15);
    $this->Ln();
}
}

$pdf = new PDF();
$pdf->SetFont('Arial','',48);
foreach( getResults() as $event ) {
  $pdf->AddPage();
  $pdf->EventTable($event);  
}
$pdf->Output();
?>

이 기사에서는 외부에서 FPDF 클래스를 작동하는 대신 자체 PDF 서브클래스로 이 FPDF 클래스를 확장한다. 이 서브클래스 내에서 주어진 이벤트의 결과 테이블을 빌드하는 새 메소드(EventTable)를 작성한다. 이 경우에는 간단하게 이벤트의 이름만 출력한다. 이 이름을 이 스크립트의 맨 아래에서 각 이벤트 페이지를 추가한 후, EventTable 메소드를 호출하는 foreach 루프로 둘러싼다.

이 스크립트의 출력은 그림 3에서 확인할 수 있다.


그림 3. 첫 번째 동적 PDF 버전
표제에 'Beast of the East 2011'이 표시된 첫 번째 동적 PDF 버전의 스크린샷

이 페이지를 아래로 스크롤하면 각 이벤트가 해당 페이지에 표시된다. 다음 단계에서는 페이지에 결과를 추가한다.


결과 테이블 빌드

PDF 파일을 빌드할 때는 HTML만큼 쉬운 테이블 구조는 없다. 테이블을 빌드하는 방법은 다양한 너비, 폰트, 배경색, 선색 등이 있는 일련의 셀을 빌드하는 것이다.

목록 6에는 테이블의 헤더 막대를 설정하는 추가 코드가 표시되어 있다.


목록 6. 결과 테이블 헤더 추가

<?php
define('FPDF_FONTPATH','/Library/WebServer/Documents/derby/font/');

require( 'fpdf.php' );
require( 'getresults.php' );

class PDF extends FPDF
{
function EventTable($event)
{
    $this->SetFont('','B','24');
    $this->Cell(40,10,$event['name'],15);
    $this->Ln();

    $this->SetXY( 10, 45 );

    $this->SetFont('','B','10');
    $this->SetFillColor(128,128,128);
    $this->SetTextColor(255);
    $this->SetDrawColor(92,92,92);
    $this->SetLineWidth(.3);

    $this->Cell(70,7,"Team 1",1,0,'C',true);
    $this->Cell(20,7,"Score 1",1,0,'C',true);
    $this->Cell(70,7,"Team 2",1,0,'C',true);
    $this->Cell(20,7,"Score 2",1,0,'C',true);
    $this->Ln();
}
}

$pdf = new PDF();
$pdf->SetFont('Arial','',10);
foreach( getResults() as $event ) {
  $pdf->AddPage();
  $pdf->EventTable($event);  
}
$pdf->Output();
?>

추가 코드에서는 폰트, 색상 및 선 너비를 설정한다. 그런 다음, 헤더 열이 네 개 있는 셀 몇 개를 렌더링한다. 이 코드는 행을 새로 시작하는 캐리지 리턴과 동일한 역할을 하는 Ln 메소드를 호출한다.

브라우저에서 이 스크립트를 살펴보면 그림 4와 같이 표시된다.


그림 4. 테이블의 헤더 행이 있는 페이지
테이블의 헤더 행이 있는 페이지의 스크린 캡처

그림 4에서는 헤더가 회색 배경에 흰색 텍스트로 렌더링된다. 이 형식은 헤더 아래에 렌더링되는 데이터와 헤더를 구분하는 데 도움이 된다. 경기 결과를 렌더링하기 위해 목록 7에 있는 코드를 추가한다.


목록 7. 완전한 결과 테이블 추가

<?php
define('FPDF_FONTPATH','/Library/WebServer/Documents/derby/font/');

require( 'fpdf.php' );
require( 'getresults.php' );

class PDF extends FPDF
{
function EventTable($event)
{
    $this->SetFont('','B','24');
    $this->Cell(40,10,$event['name'],15);
    $this->Ln();

    $this->SetFont('','B','10');
    $this->SetFillColor(128,128,128);
    $this->SetTextColor(255);
    $this->SetDrawColor(92,92,92);
    $this->SetLineWidth(.3);

    $this->Cell(70,7,"Team 1",1,0,'C',true);
    $this->Cell(20,7,"Score 1",1,0,'C',true);
    $this->Cell(70,7,"Team 2",1,0,'C',true);
    $this->Cell(20,7,"Score 2",1,0,'C',true);
    $this->Ln();

    $this->SetFillColor(224,235,255);
    $this->SetTextColor(0);
    $this->SetFont('');

    $fill = false;

    foreach($event['games'] as $game)
    {
        $this->SetFont('Times',((int)$game['score1']>(int)$game['score2'])?'BI':'');
        $this->Cell(70,6,$game['team1'],'LR',0,'L',$fill);
        $this->Cell(20,6,$game['score1'],'LR',0,'R',$fill);
        $this->SetFont('Times',((int)$game['score1']<(int)$game['score2'])?'BI':'');
        $this->Cell(70,6,$game['team2'],'LR',0,'L',$fill);
        $this->Cell(20,6,$game['score2'],'LR',0,'R',$fill);
        $this->Ln();
        $fill =! $fill;
    }
    $this->Cell(180,0,'','T');
}
}

$pdf = new PDF();
$pdf->SetFont('Arial','',10);
foreach( getResults() as $event ) {
  $pdf->AddPage();
  $pdf->EventTable($event);  
}
$pdf->Output();
?>

EventTable 메소드에는 헤더 행 이외에도 각 경기를 반복하는 foreach 루프가 있다. 그림 5에는 이에 해당하는 코드가 표시되어 있다.


그림 5. 결과 테이블이 있는 PDF
팀과 점수가 표시된 결과 테이블이 있는 PDF의 스크린 캡처

$fill 변수는 테이블에 있는 각 행의 색상을 번갈아 가며 전환한다. 승리한 팀의 이름과 점수는 굵은 이탤릭체로 표시되기 때문에 쉽게 구분된다. 또한, 폰트가 헤더의 Arial 폰트에서 경기 컨텐츠의 Times 폰트로 변화된다.

예제 코드를 완료하기 위해 그래픽을 일부 추가한다.


그래픽으로 꾸미기

PDF에 이미지를 추가하기는 매우 쉽다. 이미지를 추가하기 위해 먼저 웹에서 이미지를 가져온다. 필자는 롤러 더비 팀 중 한 팀의 로고를 가져와서 PNG 형식으로 저장했다. 지금부터는 목록 8에 있는 새 코드를 사용한다.


목록 8. 로고 이미지 추가

<?php
define('FPDF_FONTPATH','/Library/WebServer/Documents/derby/font/');

require( 'fpdf.php' );
require( 'getresults.php' );

class PDF extends FPDF
{
function EventTable($event)
{
    $this->Image('logo.png',5,5,33);

    $this->SetXY( 40, 15 );

    $this->SetFont('','B','24');
    $this->Cell(40,10,$event['name'],15);
    $this->Ln();

    $this->SetXY( 10, 45 );

    $this->SetFont('','B','10');
    $this->SetFillColor(128,128,128);
    $this->SetTextColor(255);
    $this->SetDrawColor(92,92,92);
    $this->SetLineWidth(.3);

    $this->Cell(70,7,"Team 1",1,0,'C',true);
    $this->Cell(20,7,"Score 1",1,0,'C',true);
    $this->Cell(70,7,"Team 2",1,0,'C',true);
    $this->Cell(20,7,"Score 2",1,0,'C',true);
    $this->Ln();

    $this->SetFillColor(224,235,255);
    $this->SetTextColor(0);
    $this->SetFont('');

    $fill = false;

    foreach($event['games'] as $game)
    {
      $this->SetFont('Times',((int)$game['score1']>(int)$game['score2'])?'BI':'');
      $this->Cell(70,6,$game['team1'],'LR',0,'L',$fill);
      $this->Cell(20,6,$game['score1'],'LR',0,'R',$fill);
      $this->SetFont('Times',((int)$game['score1']<(int)$game['score2'])?'BI':'');
      $this->Cell(70,6,$game['team2'],'LR',0,'L',$fill);
      $this->Cell(20,6,$game['score2'],'LR',0,'R',$fill);
      $this->Ln();
      $fill =! $fill;
    }
    $this->Cell(180,0,'','T');
}
}

$pdf = new PDF();
$pdf->SetFont('Arial','',10);
foreach( getResults() as $event ) {
  $pdf->AddPage();
  $pdf->EventTable($event);  
}
$pdf->Output();
?>

목록 8의 핵심 메소드는 이미지 파일의 이름과 위치 및 너비를 인수로 받는 Image 메소드이다. 모든 추가 매개변수는 옵션이므로 원하는 만큼 정보를 지정한다.

또한, SetXY를 새로 호출하여 텍스트와 테이블을 적절한 위치로 이동함으로써 이미지와 겹치지 않도록 한다.

그림 6에는 이 스크립트의 출력이 표시되어 있다.


그림 6. 로고 이미지가 있는 완료된 PDF
로고 이미지가 있는 완료된 PDF의 스크린 캡처

그래픽을 렌더링하고 흐르는 텍스트와 하이퍼링크를 추가하고 여백, 방위와 같은 페이지 메커니즘을 관리할 수 있도록 라이브러리에서 제공하는 다른 모든 메소드를 사용하여 PDF 파일을 완전히 제어한다.


결론

올바른 도구를 사용하면, PHP로 PDF 파일을 빌드하기가 매우 쉽다. 이러한 접근 방식은 송장이나 티켓을 인쇄하거나 양식을 채우는 작업을 비롯하여 컨텐츠의 레이아웃을 정확히 제어해야 하는 모든 작업에 적합하다.


참고자료

교육

  • W3C: 표준에 대한 훌륭한 사이트를 알아보자. 특히 XML 표준은 이 기사와도 관련된다.

  • PHP 사이트: 사용 가능한 PHP에 대한 최고의 참조 자료를 살펴보자.

  • 필자의 더 많은 기사(Jack Herrington저, developerWorks, 2005년 3월 - 현재): Ajax, JSON, PHP, XML 및 다른 기술에 대한 기사를 읽어보자.

  • XML 입문 XML을 배우는 데 필요한 참고자료를 얻자.

  • developerWorks의 XML 영역: XML 분야의 기술을 향상시키는 데 도움이 되는 참고자료를 얻을 수 있다. XML 기술 자료에서 다양한 기술 관련 기사와 팁, 튜토리얼, 표준 및 IBM Redbook을 볼 수 있다.

  • IBM XML 인증: XML 및 관련 기술에 대한 IBM 인증 개발자가 되는 방법을 찾아볼 수 있다.

  • developerWorks 기술 행사 및 웹 캐스트: 이러한 세션에 참가하여 최신 기술에 대한 정보를 얻을 수 있다.

  • Twitter의 developerWorks 페이지: 오늘 가입하여 developerWorks 트윗을 팔로우하자.

  • developerWorks podcasts: 소프트웨어 개발자의 흥미로운 인터뷰와 토론을 확인할 수 있다.

  • developerWorks on-demand demos: 입문자를 위한 제품 설치 및 설정 과정에서 숙련된 개발자를 위한 고급 기능의 활용에 이르기까지 다양한 데모를 제공한다.

제품 및 기술

  • PDFLib: 상용 라이브러리를 사용하여 PDF 파일을 작성해 보자.

  • PDFLib-Lite: PDFLib 7의 오픈 소스 버전을 다운로드하여 그 기능 서브세트를 탐구해 보자.

  • PECL 패키지: PDF를 즉시 처리하는 데 필요한 PDFLib 프로그래밍 라이브러리를 둘러싸는 확장을 다운로드하자.

  • FPDF: 이 기사에서 PDF 파일을 생성하는 데 사용한 라이브러리를 얻자.

  • IBM 제품 평가판: IBM SQA Sandbox의 온라인 시험판을 다운로드하거나 살펴보고 DB2®, Lotus®, Rational®, Tivoli® 및 WebSphere® 애플리케이션 개발 도구 및 미들웨어 제품을 사용해 볼 수 있다.

토론

  • XML 영역 토론 포럼: 여러 XML 관련 토론에 참여해 볼 수 있다.

  • developerWorks 커뮤니티: 개발자가 운영하고 있는 블로그, 포럼, 그룹 및 위키를 살펴보면서 다른 developerWorks 사용자와 의견을 나눌 수 있다.

필자소개

Jack D. Herrington은 20년 경력의 소프트웨어 엔지니어이다. Code Generation in Action, Podcasting Hacks, PHP Hacks(출간 예정)의 저자이기도 하다. 30개 이상의 기술자료도 집필했다. (jack_d_herrington@codegeneration.net)

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=XML, 오픈 소스
ArticleID=755486
ArticleTitle=PHP를 사용하여 PDF 파일을 동적으로 빌드하기
publish-date=09062011
author1-email=jherr@pobox.com
author1-email-cc=

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.