[#28] PDF-Angebot aus MySQL-DB mit PHP erstellen (FPDF)

안녕하세요! 오늘 저는 PDF 형식으로 제안을하는 것에 응답하고 싶습니다 이 오퍼는 PHP 클래스 FPDF를 사용하여 동적으로 생성되어야합니다

나는 그 결과를 보여줄 것이다 견적 페이지에 이미 있습니다 몇몇 제안 위치를 선정하고 5 %의 총 할인을 수여했다 '쿠폰 생성'을 클릭하면 새 탭이 열리고 제공합니다 이 제안의 머리에는 가상의 회사 및 연락처가 들어 있습니다

현재 날짜와 페이지 번호를 볼 수도 있습니다 그 후, 고객 데이터가 표시됩니다 그런 다음 소개 문구와 함께 오퍼 번호를 따릅니다 가장자리에서 볼 수 있습니다 접는 자국도

중간에 모든 선택된 기사가 나열됩니다 기사 번호, 설명, 번호 및 각각의 가격 결국 모든 것이 합산되고 할인이됩니다 if 사용 가능 – 공제 19 %의 판매 세가 하단에 부과됩니다

몇 가지 표준 문구 및 기타 가상의 은행 세부 정보가 포함되어 있습니다 보시다시피 페이지 당 3 개의 항목 만 설정했습니다 있어야합니다 따라서 최종 청구서의 경우에만 두 번째 페이지가 생성되었습니다 추가

디자인은 회사의 유형에 따라 크게 좌우됩니다 대량 상품 회사는 그런 식으로 디자인을 선택해야합니다 많은 기사가 한 페이지에 들어갑니다 맞춤형 제품을 판매하는 회사는 많은 디자인이 필요합니다 설명을위한 공간이 남습니다

다시 한 번 더 기사를 받아 들일 수 있습니다 예를 들어 톱 2 조각 그런 다음 처음 3 개의 기사가 첫 번째 페이지에 표시되고 두 번째로 4 위 좋아, 제안은 "쿠폰"폴더에 있습니다

저장된 ID와 현재 날짜를 전달합니다 백그라운드에서 오퍼 데이터는 MySQL 데이터베이스에 저장됩니다 이를 위해 테이블 ​​"tbl_offer_positions"및 "tbl_offers"가 필요했습니다 여기 디자이너가 어떻게 테이블이 함께 링크되어 있는지 확인할 수 있습니다 "offer_positions"테이블은 오퍼를 제품에 연결합니다

각 제안 항목마다 제안마다 항목이 하나씩 있습니다 이것은 세 번째 정규 형식을 보존하는 데 중요합니다 우리는 그것을 살펴볼 수 있습니다 쿠폰이 저장되고 모든 오퍼에는 "o_id", "오퍼 ID"가 있습니다 고객 ID는 각 고객에 대한 참조를 제공합니다

날짜와 파일 이름도 저장됩니다 쿠폰 상태도 있으며 기본적으로 '열림'으로 설정됩니다 예를 들어 여전히 "받아 들여지거나"거부 될 수 있습니다 내가 첫 번째 제안을 선택 했으므로 3 가지 항목 또한 "offer_positions"테이블에서 첫 번째 제안에 대해 3 개의 항목을 얻습니다 두 번째 오퍼에는 4 개의 기사가 있으므로 4 개의 항목이 있습니다

선택했다 여기서 기본 키는 "o_id"와 "p_id"의 ​​조합입니다 Ok 나는 그것을 어떻게 했느냐? 마지막 비디오 이후 나는 주로 "generateOfferphp"파일을 가지고 있습니다 편집

이 파일의 길이는 이제 약 300 줄이므로 방금 대략 설명합니다 당신은 그렇게 어렵지 않다는 것을 알게 될 것입니다 더 비슷해 각 요소를 손으로 배치해야하기 때문에 부지런히 일하십시오 이렇게되면 혼란스러워집니다

소스 코드가 마음에 들지 않으면 댓글을 달았습니다 하지만 일단 작동하면 많은 시간을 절약 할 수 있습니다 확인을 클릭합니다 위, 나는 모든 관련 데이터를 먼저 얻을 것이다 이 정보는 오퍼 페이지에서 직접 제공됩니다

그런 다음 "tfpdf"클래스를 작성합니다 링크는 비디오 설명에서 찾을 수 있습니다 내가 데이터베이스에 있기 때문에 또한 설정 파일과 "Db_connectphp" date () 함수에 관해서는 날짜를 얻을 수 있고 시간과 함께 날짜를 생성하십시오

그런 다음, 먼저 INSERT 쿼리를 사용하여 데이터베이스에 새 오퍼를 만듭니다 나는 그에게 "tbl_offers"테이블에 들어간다 나는 그것을 위해 PDO를 사용한다 여기서 두 필드 만 채워야합니다 고객 ID와 날짜

쿠폰 ID 때문입니다 자동 증가 값은이고 파일 이름은 기본적으로 0입니다 상태는 항상 "열림"상태입니다 사용 파일 이름에 쿠폰 ID가 있어야하므로 할 수 있습니다

그 제안이 어떻게 불릴 지 아직 모른다 함수 "lastInsertId ()"에 대한 마지막 ID를 얻습니다 삽입 된 레코드를 다시 현재 쿠폰 ID입니다 그들의 도움으로 나는 제안 이름 "Offer_ # ID_ # Date

pdf" 그 다음에 따옴표의 파일 이름을 입력하는 UPDATE 쿼리가옵니다 변수 "$ data"는 배열이며 다음과 같은 수의 항목을 포함합니다 게재 순위가 선택되었습니다 for 루프의 도움으로 INSERT 쿼리를 배치합니다

동일한 제안 ID가있을 때마다 여기에서 사용됩니다 상품 ID는 차원 0에 저장되고 수량은 차원 1 sizeof () 함수는 배열의 항목 수를 반환합니다 그렇게하면 루프가 몇 번 지나야하는지 알 수 있습니다 이것으로 데이터베이스와 관련된 부분이 완성됩니다

여기에서 개별 요소의 형식 지정에 관한 것입니다 PDF 파일을 먼저 만들어서 열어야하며 새 파일이어야합니다 페이지가 첨부됩니다 이 모든 것은 FPDF 클래스의 표준 구문을 문서화 한 것입니다 링크는 내가 비디오 설명에서 말한 것과 같습니다

그 후 페이지 수에 대한 카운터가 필요하며 페이지 당 3 개의 기사 만 표시되어야합니다 ceil () 함수는 항상 반올림합니다 그래서 궤도를 잃지 않기 위해 여분의 기능으로 반복 명령을 아웃소싱했습니다 예를 들어, 각각의 새 페이지에서 쿠폰 헤드와 쿠폰 데이터가 표시됩니다 관련 매개 변수를 함수에 전달합니다

적어도이 변수는 $ pdf 변수입니다이 경우에는 tfpdf 클래스의 객체입니다 나타냅니다 이 변수에는 나중에 전체 오퍼 설정이 포함됩니다 발견 할 수있는 함수 yes : createHeader ()를 볼 수 있습니다

하단에 여기에 이것도 모두 표준 구문입니다 예를 들어, 이 경우 "Arial"글꼴 크기 10, 텍스트 색상을 설정하고 사진을 표시합니다 그런 다음 로고와 회사 이름이 표시되고 주소가 적어지고 전화가 표시됩니다

팩스 번호 원칙적으로 createOfferData ()에서도 똑같은 일이 발생합니다 이 함수는이 부분을 만듭니다 즉, 페이지 번호가있는 날짜입니다 그래서 추가 매개 변수가 필요했습니다

보시다시피 당신은 항상 같은 기능이 필요합니다 setFont (), Image () 및 text () 함수를 호출합니다 뒤에 나오는 숫자는 X 위치, Y 위치 및 높이를 나타냅니다 다시 요소가 마음에들 때까지 시도해야합니다

것 원하는 디자인을 얻는 데 비교적 오랜 시간이 걸릴 수 있습니다 도달했습니다 그럼 우리가 먼저 뛰어 올랐어 여기서 역동적 인 부분을 천천히 시작합니다

여기에서 나는 얻는다 우선, 각 고객에 대한 모든 고객 데이터 당신이 위로 볼 때 오퍼의 첫 번째 페이지는 고객 데이터가 표시됩니다 이 코드 블록은이 4 줄을 생성합니다 이름과 성이됩니다

text () 함수에서 함께 출력 그 주소는 불행히도 그렇게 쉽지 않았습니다 데이터베이스에서 주소가 다음과 같이 저장되었음을 나타냅니다 집 번호 새로운 라인에서 각각의 장소 text () 함수는 텍스트를 여러 줄로 재생할 수 없습니다

"MultiCell ()"이라는 기능이 있습니다 하지만 사용하기가 너무 복잡하다고 생각합니다 그래서 나는 explode () – PHP에서 사용하는 함수 이렇게하면이 주소 문자열이 줄 끝에서 구분됩니다 PHP_EOL이라는 PHP 상수가 있습니다

그런 다음 하나를 얻습니다 배열 다시 즉, EOL 이전의 첫 번째 부분은 배열 인덱스 0에서 끝나고 문자열의 두 번째 부분은 1로 처리 할 수 ​​있습니다 그럴까? 줄 바꿈을 여러 번하면 2, 3, 4 등을 얻을 수 있습니다 그런 다음 2 개의 text () 함수를 사용하여 주소를 사용할 수 있습니다

그 중 두 번째는 단 4 단위 낮습니다 그런 다음 다시 따르십시오 쿠폰 번호를 칠하는 아웃소싱 기능 다음은 첫 번째 페이지에서만 다시 볼 수있는 표준 문장입니다 그런 다음 다시 2 가지 아웃소싱 기능을 사용했습니다

이것은이 회색 영역을 만듭니다 여기 하나있어 그리고 아래의 기능은이 테이블의 제목이됩니다 이들은이 두 가지 기능입니다 이 변수는 나중에 추가됩니다

위치 지정이 필요합니다 나는 또한 제안의 발을 그립니다 예를 들어, 은행 세부 정보가 제공됩니다 그것의 밑에 재미있는 얻는다 모든 혜택 정보가 여기에 나와 있습니다

가격 계산이 이루어졌다 채울 페이지가있는 한이 코드를 실행해야합니다 그리고 그것이 어떻게 오퍼 데이터를 출력해야하는지에 대해 설명합니다 while 루프 대신 물론 for 루프 나 for-each 루프를 사용할 수도 있습니다 사용합니다

여기서는 먼저 데이터베이스에서 제품 데이터를 가져옵니다 표준 함수로 다시 쓴다 다시 image () 함수, setFont (), SetTextColor () 및 text () 만 사용됩니다 그에 따라 가격을 형식화해야합니다 그가에 있기 때문에 영어 형식이 저장됩니다

이것을 위해 나는 쉼표에 대한 요점을 교환한다 이 함수는 number_format () 함수와 함께 작동합니다 round () 함수는 2로 반올림됩니다 쉼표 뒤에 위치 이것은 함수를 함께 넣었 기 때문에 지금은 조금 복잡해 보입니다

중첩 여기서 다시 언급 한 변수를 찾을 수 있습니다 나는 여기서 예를 들어 가격에 수량을 곱한 것을 계산한다 이것은 최종 가격을 합산합니다 적어도 3 개의 항목을 선택하면 새 페이지가됩니다

추가 이 모양입니다 이것은 "addPage ()"함수를 통해 가능합니다 모듈러스 연산자를 사용하면 다른 페이지가 있는지 확인할 수 있습니다 해결되어야한다

이 경우 페이지 수에 대한 카운트 수가 1 씩 증가합니다 증가했다 여기서 나는 아웃소싱 기능을 다시 사용할 수있었습니다 이로 인해 많은 소스 코드가 저장되었습니다 맨 마지막은 마지막 청구서입니다 여기에 할인이 공제되고, 표시된 금액과 부가가치세가 공제됩니다

거뒀다 결국 표준 문장이 발행 될 것입니다 매개 변수 "F"가있는 output () 함수는 PDF 파일을 파일로 저장합니다 저장 그런 다음 echo 명령을 사용하여 현재 파일 이름을 반환합니다 JQuery를 사용하여 방금 저장 한 쿠폰으로 새 탭을 만듭니다

열 수 있어요 아래에 모든 아웃소싱 기능 만 있습니다 보시다시피,이 제안은 실제로 필요한 것입니다 표준 기능 그래픽을 어디에서 가져 왔는지 정확히 기억하지 않습니다

나는이 제안에 사용한다 상용 프로젝트에서는 사용하지 마십시오 비디오 설명에는 로열티없는 그래픽의 일부 페이지에 대한 링크가 있습니다 제공합니다 다음에 보자