2016-08-30 3 views
2

자동 빌드 프로세스의 일부로 빌드 번호를 일련의 PDF 파일 (참조 가이드)으로 패치하고 싶습니다. 필드를 업데이트하고 PDF를 다시 출력하려면 LibreOffice의 일부 매크로를 자동화하는 것이 가장 좋습니다.PDF 문서를 패치하는 방법

그러나 PDF 파일에서 자리 표시 자의 일부 바이너리 찾기 및 바꾸기를 실행하는 데 더 많은 (직접적인 것은 틀림없이 더러운) 솔루션이 있는지 알고 싶습니다. 내용은 PDF의 일반 텍스트로 나타나지 않습니다. 도움이 될만한 트릭이 있습니까?

+0

하는 방법 빌드 번호를 검색 할 수 있어야? 그것은 정상적인 PDF 뷰어에서 볼 수 있어야합니까? 아니면 숨겨진 장소에 포함시켜야합니까? – mkl

+0

바닥 글이나 부록 같은 텍스트에 표시되어야합니다. –

+0

그럴 경우 @ Bruno의 답은 가장 빠르고 더러운 해결책이 무엇인지를 보여줍니다. – mkl

답변

2

번호는 압축 된 콘텐츠 스트림의 일부이기 때문에 일반 텍스트로 사용할 수 없습니다.

"Hello World!" 예. 당신이 진 부분을 압축 해제하면

2 0 obj 
<</Length 65/Filter/FlateDecode>>stream 
xœ+är 
á26S°00SIá2PÐ5´ 1ôÝBÒ¸4<RsròÂó‹rR5C²€[email protected]*\C¸¹ Çq° 
endstream 
endobj 

, 당신이 찾을 수 있습니다 :

q 
BT 
36 806 Td 
0 -18 Td 
/F1 12 Tf 
(Hello World!) Tj 
0 0 Td 
ET 
Q 

그러나, 다음 구문도 올바른 것 : 텍스트 수를 나타냅니다 컨텐츠 스트림은 다음과 같습니다

BT 
/F1 12 Tf 
88.66 806 Td 
(ld!) Tj 
-22 0 Td 
(Wor) Tj 
-15.33 0 Td 
(llo) Tj 
-15.33 0 Td 
(He) Tj 
ET 

이 구문은 읽기가 훨씬 어렵지만 텍스트 행렬의 변경 사항을 기반으로 모든 수학을 수행하고 다른 텍스트 조각을 재구성하면 출력은 이전에 가지고 있던 구문의 출력과 동일합니다.

PDF가 압축되지 않은 구문으로 쉽게 인식 될 수 있음을 의미하는 간단한 방법으로 PDF를 만들면 페이지의 콘텐츠 스트림을 가져 와서 압축을 풀고 변경하고 압축 한 다음 PDF로 돌아갑니다.

이렇게하면 찾고있는 문자열이 외부 콘텐츠 스트림이 아닌 페이지의 콘텐츠 스트림에 있다고 가정합니다. 즉, 양식 XObject입니다. 모든 가정이 충족되면

,이 같은 iText를 사용할 수 :

PdfReader reader = new PdfReader(src); 
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); 
int total = reader.getNumberOfPages() + 1; 
for (int i = 1; i < total; i++) { 
    byte[] content = reader.getPageContent(i); 
    byte[] alteredBytes = doSomethingWith(content); 
    reader.setPageContent(i, alteredBytes); 
} 
stamper.close(); 
reader.close(); 

당신은 doSomethingWith() 방법을 구현해야 당신이 필요로 교체 이진 검색 &을 수행하도록.

중요 : 짧은 & 더러운 방법을 물었고, 이것은 매우 빠른 & 더러운 방법입니다. 내 직원 중 한 명이이 코드를 제출하는 것을 보게되면이 코드를 사용하는 데 괜찮은 인수를 제공 할 수 없다면 그 사람을 그 자리에서 해고 할 것입니다. 이 코드는 많은 PDF에서 실패하지만 매우 구체적인 사용 사례에서 필요한 것일 수 있습니다.

당신은 또한 읽을 수 있습니다 iText or iTextSharp rudimentary text edit

+0

종합적인 답변을 주셔서 감사합니다. 매우 통찰력! 우리는 잠시 포기하고 깨끗한 해결책 (libreoffice 자동화)을 위해 나중에 갈 것입니다. –

관련 문제