2012-12-16 2 views
0

현재 PDF 편집기를 작성 중입니다. 태그 처리를 구현하는 데 문제가 있습니다. 가 [H1], [H2] [H3] [H4], [H4] [H5] [H6], [강력]Zend PDF wysiwyg 편집기 출력

내가 ':

나는 다음과 같은 태그를 허용 할 drawText (아래 코드)라는 메서드로 클래스를 빌드하십시오.

[h1] 태그는 글꼴 크기와 글꼴 크기를 변경합니다. 코드에서 볼 수 있듯이 저는 텍스트 줄을 출력하고 있습니다. 텍스트 줄 예 : 탑승권 [/ strong]입니다. 스마트 폰이나 태블릿에 PDF 파일을 저장하고 [strong] 게이트 [/ strong]에 표시하십시오.

[strong] 굵은 글씨로 텍스트를 만들고 싶습니다. Zend_PDF를 사용하려면이 굵은 텍스트로 TTF 파일을 설정 한 다음 현재 X 좌표를 찾고 $ this-> pdf() -> drawText (텍스트, X 좌표, Y 좌표, 문자 세트)를 호출해야합니다. 나는 생각을 해왔고 이것을 가능하게하는 코드를 작성하려고 노력했다. (폭발, preg_match_all 등을 시도해 보았다.). 그러나 나는 그것을 작동시키지 못했다 ...

나는 내가 아니다라고 생각한다. 이 문제가있는 사람은 한 명뿐입니다. 누군가가이 문제에 대해 생각해보고 그 사람이 어떻게했는지 알려줌으로써 조금만 도울 수 있기를 바랍니다.

누군가로부터 듣고 미리 감사드립니다. Zend_Pdf와 텍스트를 렌더링 할 때 대부분의 사람들이 시작하지만 불행하게도 당신이 당신의 목표를 달성하기 위해 litte 더 복잡한 무언가를 개발해야 할 것 곳

/** 
* drawSplittedText() 
* 
* @param array $text 
* @return object Application_Plugin_PdfPlugin 
*/ 
public function drawSplittedText(Array $text) 
{ 
    // Count the number of rows. 
    $textRowCount = count($text); 

    $i = 0;   

    foreach ($text as $row) 
    {   
     // Replace tabs, because they're not outputted properly. 
     $row = str_replace("\t", ' ', $row); 

     // If the character encoding of the currrent row not is UTF-8, convert the row characters to UTF-8. 
     if (($rowEncoding = mb_detect_encoding($row)) != 'UTF-8') { 
      $row = iconv($rowEncoding, 'UTF-8', $row); 
     } 

     // Output row on PDF 
     $this->pdf()->drawText($row, $this->_defaultMarginleft, $this->currentY, 'UTF-8'); 

     $this->newLine(); 

     ++$i;    
    } 

    return $this; 
} 

답변

0

위의 코드는 아마도.

첫째, 현재 글꼴 유형 및 크기와 함께 현재 x 및 y 위치를 추적해야합니다.

그러면 현재 글꼴 및 크기로 렌더링 할 때 텍스트 덩어리가 필요한 공간을 계산하는 도우미 함수/메서드가 필요합니다.

다음과 같이 나는 다음 렌더링 코드를 깨는 제안

다음 writeText()getStringWidth() 기능/메소드를 구현

function writeParagraph($text) 
{ 
    // Looks for the next tag and sends all text before that tag to the 
    // writeText() function. When it gets to a tag it changes the current 
    // font/size accordingly, then continues sending text until it runs out 
    // of text or reaches another tag. If you need to deal with nested tags 
    // then this function may have to call itself recursively. 
} 

function writeText($text) 
{ 
    // The first thing this function needs to do is call getStringWidth() to 
    // determine the width of the text that it is being asked to render and if 
    // the line is too long, shorten it. In practice, a better approach is to 
    // split the words into an array based on the space between each word and 
    // then use a while() loop to start building the string to be rendered 
    // (start with first word, then add second word, then add third word, etc), 
    // in each iteration testing the length of the current string concatenated 
    // with the next word to see if the resulting string will still fit. If you 
    // end up with a situation where adding the next word to the current string 
    // will result in a string that is too long, render the current string and 
    // a line feed then start the process again, using the next word as the first 
    // word in the new string. You will probably want to write a bonus line feed 
    // at the end as well (unless, of course, you just wrote one!). 
} 

function getStringWidth($str) 
{ 
    // This needs to return the width of $str 
} 

내가 샘플 클래스가 (https://github.com/jamesggordon/Wrap_Pdf) 현재 위치, 현재 스타일 등과 같은 다른 모든 것들을 포함합니다. writeParagraph() 함수에 대한 코드를 알아 내지 못하면 Wrap_Pdf에 포함 시키도록하겠습니다.