암호화 된 숨겨진 워터 마크를 포함하도록 PDF를 생성 또는 업데이트 하시겠습니까?


10

배경

LaTeX를 사용하여 책 쓰기. 사용자가 책을 구매하면 PDF가 자동으로 생성됩니다.

문제

PDF에는 사람의 이름과 연락처 정보가 포함 된 워터 마크가 있어야합니다.

질문

다음 기준을 충족하는 소프트웨어 :

  • 암호화되고 보이지 않는 워터 마크를 PDF에 적용
  • 오픈 소스
  • 플랫폼 독립적 (Linux, Windows)
  • 빠름 (1 초 미만에 200 페이지 PDF로 표시)
  • 일괄 처리 (명령 줄 기반)
  • 공모 공격 방지
  • 취약하지 않음 (예 : PDF-> EPS-> PDF에 여전히 워터 마크가 포함되어 있음)
  • 잘 문서화 됨 (사용 예 표시)

아이디어 및 리소스

몇 가지 생각과 결과 :

NLP의 문제점은 문법 오류가 발생할 수 있다는 것입니다. 스테가 노 그라피의 문제점은 이미지가 이미지 캐시에서 제공되므로 워터 마크 이미지가있는 캐시를 다시 만들면 PDF를 생성 할 때 지연이 발생한다는 것입니다 (캐시에서 하나의 이미지를 삭제할 수는 있지만 우아한 해결책은 아닙니다).

감사합니다!


요구 사항에 대한 설명을 약간 수정하십시오. 그렇지 않으면 명확하지 않습니다. "감지 할 수없는 워터 마크"는 분명히 원하는 것이 아닙니다. 그렇지 않으면 필요한 경우 어떻게 자신을 감지 할 수 있습니까?
Kurt Pfeifle

사용중인 시스템의 목적이 정확히 무엇인지는 확실하지 않습니다. 라이센스가이를 금지하더라도 PDF가 다른 사용자에게 전달되는지 감지하십시오. 라이센스가이를 금지하더라도 PDF가 종이에 인쇄되는지 감지합니까? 인터넷을 통해 특정 PDF의 경로를 추적하고 열 때 추적합니까? 또는 다른 것?
Kurt Pfeifle

@pipitas : PDF의 등록 된 버전이 허가없이 공개 된 경우 누가 공개했는지 알고 싶습니다. 그러나 사람들이 PDF에 워터 마크가있는 것을 볼 수 있다면 워터 마크가 우회하기 훨씬 쉬워집니다.
Dave Jarvis

답변:


6

몇 년 전에 비슷한 일을했습니다. 모든 "고급"기준을 충족하지 못했습니다. 다음과 같이 작동했습니다.

  • 임의 PDF 페이지의 테두리 중 하나에 임의의 장소에 거의 감지 할 수없는 2x2 포인트 크기의 "클릭 가능"영역을 배치했습니다. 우연히 발견 될 가능성은 거의 없습니다 (어쨌든 PDF에있는 다른 매우 클릭 가능한 핫스팟이로드되는 동안 ...).

  • 링크를 클릭하면 http://my.own.site/project/87245e386722ad77b4212dbec4f0e912일부 "정오"글 머리 기호 가있는 웹 페이지 로 이동합니다. (내가 87245e386722ad77b4212dbec4f0e912DB 테이블에 저장된 사람의 이름 + 연락처 데이터의 MD5 해시 라고 언급 했습니까 ? :-)

분명히 이것은 인쇄 + 스캔 + 발생 또는 PDF "다시"사이클을 방지하지 못합니다. 또한 어느 정도 "불명확 한 보안"에 의존합니다.

다음은 Ghost-script를 사용하여 random-in.pdf의 1 페이지 왼쪽 하단에 클릭 가능한 핫스팟을 추가하는 방법입니다.

gs \
 -o random-out.pdf \
 -sDEVICE=pdfwrite \
 -dPDFSETTINGS=/prepress \
 -c "[ /Rect [1 1 3 3]" \
 -c "  /Color [1 1 1]" \
 -c "  /Page 1" \
 -c "  /Action <</Subtype /URI" \
 -c "  /URI (http://my.own.site/87245e386722ad77b4212dbec4f0e912)>>" \
 -c "  /Subtype /Link" \
 -c "  /ANN pdfmark" \
 -f random-in.pdf

클릭 가능한 영역을 다음과 같이 명령 줄 매개 변수보다 크게 눈에 띄게 변경하려면 :

 [....]
 -c "[/Rect [1 1 50 50]" \
 -c "  /Color [1 0 0]" \
 [....]

훨씬 더 간단한 방법은 데이터베이스에서 PDF의 MD5 해시를 생성하고 유지하는 것입니다. 메타 데이터 내부의 문서 UUID와 CreationDate 및 ModDate로 인해 생성 한 PDF마다 고유하지 않습니다. 물론 원본 PDF를 디지털 형식으로 만 추적 할 수 있습니다.


야생에서 PDF를 찾아서이 기술을 사용하여 다시 추적 한 적이 있습니까?
Dave Jarvis

@Dave Jarvis : 그렇습니다. 어떤 식 으로든 ... "심각한"것이 아니기 때문에 추적에 관심이 없었습니다. 개념 증명으로 만 사용했으며 약 6 개월 후에 "추적"웹 서버를 끕니다. 그것은 네트워크 PDF 서버를위한 것이 었습니다. 저는 고객 회사 내부에 설치했습니다. "트래커"는 위에서 설명한 것과 비슷하지만 클릭 할 수있는 전체 페이지 영역을 사용했습니다. 난 그냥 .... 아파치 로그 파일에 "히트"의 수를 추적
커트 Pfeifle에게

좋은 생각이지만 GhostScript는 압축 해제를 지원하지 않기 때문에 (입력에서 JPEG 스타일로 압축 된 이미지의 정보가 손실 됨) 지원하지 않기 때문에 PDF에서 GhostScript를 실행하면 포함 된 샘플 이미지가 저하 될 수 있습니다. JPEG 이미지 압축을 모든 이미지에 적용 (방금 압축 해제 한 이미지 포함) ...
SamB

@ SamB : Ghostscript 명령 줄에 추가 하여 기존 JPEG 품질의 100 %를 유지할 수 있다고 생각 합니다 -dJPEQ=100 -dQFActor=1.0. 하지만, 난에서 이미지 품질의 저하를 발견하지했습니다 난의 일반 설정을 사용하면 파일 -dPDFSETTINGS=/prepress.... 고스트있는 모든 PDF를 다시 증류 할 때를
커트 Pfeifle

[계속] 아닙니다. Ghostscript 이미지에 제공되는 것은 JPEG 압축뿐 아니라 -dColorImageFilter=/FlateEncode(무손실 ZIP)을 사용 =/DCTEncode하여 이전 GS 버전 의 기본값 (JPEG 손실 )을 무시할 수 있습니다. GS v7.21부터 기본값은 =/FlateEncode어쨌든 ... 색상과 동일 -dGrayImageFilter=...( 기본적으로 -dMonoImageFilter=...사용 /CCITTFaxEncode)
Kurt Pfeifle

1

매우 어려운 일이며 이것이 귀하의 모든 질문에 전혀 대답하지 못할 것입니다.

나는 이것을 할 수 있거나 무작위로 할 수있는 하나의 솔루션에 대해 확신하지 못합니다.

그러나이 작업을 수행 한 경우 가장 쉬운 방법은 문서를 형식이 지정된 HTML과 같은 중간 형식으로 유지하는 것입니다.

인쇄 CSS 파일 또는 이와 유사한 기능을 사용하면 레이아웃을 책과 동일하게하고 일종의 스크립트를 사용하여 그림, 내용 또는 무엇이든 문서를 다시 구성하는 서버 측 PDF 구성 요소를 무작위로 지정할 수 있습니다.

예를 들어, 문서를 구매 한 사람이 있으면 구매 스크립트는 보호 메커니즘을 식별하는 번호 (예 : 첫 번째 그림, 두 번째 그림, 텍스트 등)를 임의로 선택한 다음 고유 한 다운로드 링크를 생성 할 수 있습니다.

다운로드 링크가 호출되면 번호를 확인하고 작업을 수행하며 pdf로 컴파일 한 다음 클라이언트로 다운로드합니다.

다시 말하지만, 이것이 쉽지 않은 일이라는 것을 알고 있지만 쉬운 것을 요구하지 않으며 이것이 내가 생각할 수있는 가장 좋은 방법입니다.


@ 데이브 자비스-나는 당신이하려고하는 일을 완전히 이해합니다 ... 말했듯이, 나는 최선의 해결책을 확신하지 못하지만 적어도 말해야하는 것은 ... 쉽지 않습니다.
윌리엄 힐섬

@Dave Jarvis-내가 말하고 싶었던 것은 원하는 것을하는 한 가지 / 쉬운 방법으로 모든 것을 본 적이 없지만 PHP / ASP.Net을 사용하면 스크립트를 작성하는 것이 더 쉽습니다. 구성 요소. HTML 형식의 전체 문서가 올바르게 / 정확하게 형식화 된 경우 PDF 구성 요소를 사용하여 변환하는 것이 매우 쉽다고 생각합니다. 예를 들어, 31 페이지에 100 페이지와 그림이 있다고 가정 해 보겠습니다. 1-30 페이지를 PDF로, 32-100 페이지를 PDF로, 31 페이지를 html로 생성하고 (도서의 나머지 스타일에 따라) 1/2
William Hilsum

첫 번째 PDF를 얻고 html 페이지를 숨기고 두 번째 PDF를 가져 와서 모든 PDF를 결합하는 새 pdf를 생성하는 pdf 구성 요소. 스크립트를 호출 할 수 있습니다 생성 된 페이지 스테 가노 그래피 (!하지 않도록 동사에) 또는 다른 어떤 당신이 많은 (무료 및 유료) PDF 구성 요소가 ... 할을 수행 할 수 있습니다 -이 예를 들어 하나입니다 ... componentone.com/SuperProducts / PDF 나는 이것이 내가 이해하려고하는 것을 좀 더 명확하게하기를 희망한다 – 설명하기 매우 어렵다. 2/2
윌리엄 힐섬

@Dave Jarvis-정확하지는 않지만 ... 내가 말했듯이 설명하기가 매우 어렵습니다 ... 일부 PDF 구성 요소는 CSS / 인쇄 스타일과 함께 놀랍습니다. 예를 들어, 무들을보십시오. 웹 페이지를 완전히 포맷하고 책처럼 보이게 인쇄하거나 스타일을 따를 수 있습니다. 그런 다음 PDF 구성 요소를 사용 하여 최종 결과를 보는 방식과 정확히 동일 하게 내보내거나 저장할 수 있습니다. 필요한 그림을 쉽게 생성하고 텍스트를 가지고이를 단일 PDF 파일로 (완벽하게 최종 사용자에게) 모을 수 있습니다. 나는 당신이 원하는 것을 얻는 가장 쉬운 방법이라고 생각하기 때문에 web / php / asp.net을 언급합니다.
William Hilsum

@ 데이브 자비스 : pdfTeX를 사용하지 않는 것 같습니까? (또는 사용자 가 pdf-> ps-> pdf 변환을 수행하고 프로세스에서 샘플 이미지를 저하시키는 것에 대해 더 걱정 했습니까?). 어쨌든 ps-> pdf 변환 일반적으로 이미지를 열화시킵니다. GhostScript는 JPEG 형식 이미지를 압축 된 형태로 보존하기에 충분하지 않고 입력에서 발생하는 모든 이미지에 JPEG 스타일 압축을 자동으로 적용하는 경향이 있기 때문입니다. (Distiller 는 JPEG 스타일 이미지 만 남겨 두라고 지시 수 있지만 실제로는 누구에게 있습니까?)
SamB
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.