
배경
LaTeX를 사용하여 책을 집필합니다. 사용자가 책을 구매하면 PDF가 자동으로 생성됩니다.
문제
PDF에는 사람의 이름과 연락처 정보가 포함된 워터마크가 있어야 합니다.
질문
다음 기준을 충족하는 소프트웨어는 무엇입니까?
- 암호화되어 보이지 않는 워터마크를 PDF에 적용합니다.
- 오픈 소스
- 플랫폼 독립적(Linux, Windows)
- 빠름(1초 이내에 200페이지 PDF 표시)
- 일괄 처리(독점적으로 명령줄 기반)
- 공모 공격 방지
- 취약하지 않음(예: PDF -> EPS -> PDF에 여전히 워터마크가 포함되어 있음)
- 잘 문서화되어 있습니다(예제 사용법 보여줌)
아이디어 및 리소스
몇 가지 생각과 결과:
- 자연어 처리(NLP) 워터마크.
- 무작위로 선택한 이미지에 스테가노그래피를 적용합니다.
- http://openstego.sourceforge.net/cmdline.html
NLP의 문제점은 문법 오류가 발생할 수 있다는 것입니다. 스테가노그래피의 문제점은 이미지가 이미지 캐시에서 제공되므로 워터마크가 있는 이미지로 해당 캐시를 다시 생성하면 PDF 생성 시 지연이 발생한다는 것입니다(캐시에서 이미지 하나만 삭제할 수도 있지만 이는 우아한 솔루션이 아닙니다).
감사합니다!
답변1
몇 년 전에도 비슷한 일을 했습니다. 모든 "하드" 기준을 충족하지 못했습니다. 다음과 같이 작동했습니다.
나는 임의의 PDF 페이지 테두리 중 하나의 임의 위치에 거의 감지할 수 없는 2x2 포인트 크기의 "클릭 가능한" 영역을 배치했습니다. 우연히 발견될 가능성은 거의 없습니다(어쨌든 PDF에 있었던 매우 분명하게 클릭할 수 있는 다른 핫스팟 중에서...).
링크를 클릭하면
http://my.own.site/project/87245e386722ad77b4212dbec4f0e912
일부 "정오표" 글머리 기호가 만들어진 웹페이지로 이동하게 됩니다. (87245e386722ad77b4212dbec4f0e912
제가 DB 테이블에 저장한 사람 이름 + 연락처 데이터의 MD5 해시 라고 언급했나요 ? :-)
분명히 이것은 인쇄+스캔+ocr-ing 또는 PDF "재튀김" 주기로부터 보호되지 않습니다. 그리고 그것은 또한 어느 정도의 "모호함에 의한 보안"에 의존합니다.
다음은 Ghostscript를 사용하여 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만 추적할 수도 있습니다...
답변2
매우 어려운 문제이고 이것이 귀하의 모든 질문에 전혀 답이 될지 확신할 수 없습니다.
이 작업을 수행하거나 무작위로 수행할 수 있는 올인원 솔루션이 확실하지 않습니다.
하지만 제가 이 일을 맡게 된다면 가장 쉬운 방법은 문서를 HTML 형식이나 이와 유사한 중간 형식으로 유지하는 것이라고 생각합니다.
인쇄 CSS 파일이나 이와 유사한 것을 사용하면 책과 동일하게 레이아웃을 얻을 수 있고 일종의 스크립트를 사용하여 그림, 내용 또는 모든 것을 무작위로 만들고 문서를 다시 조립하는 서버 측 PDF 구성 요소를 사용할 수 있습니다.
그러면 예를 들어 누군가 문서를 구매할 때 구매 스크립트는 보호 메커니즘(예: 첫 번째 사진, 두 번째 사진, 텍스트 등)을 식별하는 번호를 무작위로 선택한 다음 고유한 다운로드 링크를 생성할 수 있습니다.
해당 다운로드 링크가 호출되면 번호를 확인하고 작업을 수행한 후 PDF로 컴파일한 다음 클라이언트에 다운로드합니다.
다시 한 번 말씀드리지만, 이것이 쉽지 않고 간단하지 않을 것이라는 점을 알고 있습니다. 그러나 귀하는 쉬운 것을 요구하지 않으며 이것이 제가 생각할 수 있는 최선의 방법입니다.