2016-11-10 5 views
1

Setasign FPDI으로 몇 개의 PDF 파일을 병합하려고합니다. 이 패키지는 일부 PDF 형식에서는 제대로 작동하지만 다른 형식에서는 제대로 작동하지 않습니다.
세 가지 형식의 PDF가 있습니다.PHP로 다른 PDF 포맷을 병합 하시겠습니까?

형식 1 :

%PDF-1.4 
%´µ¶· 
% 
1 0 obj 
<< 
/Type /Catalog 
/PageMode /UseNone 
/ViewerPreferences 2 0 R 
/Pages 3 0 R 
/PageLayout /OneColumn 
>> 

형식 2 :

--uuid:3c4caf6a-2a7e-4ca5-9e0a-63346610deae 
Content-Type: application/octet-stream 
Content-Transfer-Encoding: binary 
Content-ID: <1> 

%PDF-1.4 
%âãÏÓ 
1 0 obj 
<</ColorSpace/DeviceGray/Subtype/Image 

형식 3 :

2550 4446 2d31 2e34 0a25 aaab acad 0a34 
2030 206f 626a 0a3c 3c0a 2f43 7265 6174 
6f72 2028 4170 6163 6865 2046 4f50 2056 
6572 7369 6f6e 2031 2e30 290a 2f50 726f 
6475 6365 7220 2841 7061 6368 6520 464f 
5020 5665 7273 696f 6e20 312e 3029 0a2f 
4372 6561 7469 6f6e 4461 7465 2028 443a 
3230 3136 3131 3130 3135 3437 3532 5a29 
0a3e 3e0a 656e 646f 626a 0a35 2030 206f 

FPDI 형식 (1)와 함께 잘 작동하지만 형식 실패 2.

내가 시도했을 때 형식의 또 다른 PDF 병합 웹 사이트에서 형식이에서 두 파일을 병합, 내가 함께있어 PDF 3.

내 질문은 PHP에서 어떤 형식으로 2 개 형식이 개 파일을 병합 할 수있는 방법입니다.

누구든지이 형식을 설명 할 수 있다면 좋을 것입니다.

답변

1

"Format 2"는 PDF의 바이트 오프셋 위치를 손상시킬 잘못된 헤더 데이터를 포함하기 때문에 손상된 파일입니다 (FPDI는 이러한 파일을 복구하지 않지만 유효한 PDF가 필요합니다).

"형식 3"은 PDF 파일이 아닌 16 진수 값의 묶음 일뿐입니다.

+0

그래서 헤더를 정리해야합니까? 그리고 크롬 및 기타 PDF 리더가 모든 형식을 읽는 방법을 알아보십시오. – anwerj

+0

성능을 많이 저하시킬 수있는 파일을 복구하려고합니다. 별도의 [FPDI PDF-Parser] (https://www.setasign.com/products/fpdi-pdf-parser/details/)는 일반적인 피해 (전부는 아님)를 수리하려고 시도합니다. 이러한 모든 파일이 유효한 PDF 문서가 아니므로 올바른 버전을 요청해야합니다. –

+0

감사합니다. FPDI로 전달하기 전에 pdf를 정리하려고합니다. – anwerj

0

Setasign의 답변 덕분에 유효하지 않은 형식을 정리했습니다. 간단한 콘텐츠 분할을 사용하고 있습니다. $raw 포맷 2 $content입니다

public function parseRawResponse($raw, $from) 
{ 
    $positionMap = [ 
     'PDF' => [ 'init' => "%PDF-1.4\n", 'end' => "\n%%EOF"] 
    ]; 
    $initPos = strpos($raw,$positionMap[$from]['init']); 
    $endPos = strrpos($raw, $positionMap[$from]['end']) + strlen($positionMap[$from]['end']); 
    $content = substr($raw, $initPos, ($endPos - $initPos)); 
    return $content; 
} 

은 PDF의 실제 내용이다.

+0

PDF 버전 번호를 사용해서는 안됩니다. –

+0

예, 당신 말이 맞아요. 나는 그 맥락에서 그렇게 할 것이다. – anwerj