2012-09-11 4 views
0

PDF로 출력하는 프로그램이 있는데,이 프로그램에서 읽을 수 있기를 원합니다.iText를 사용하여 보이지 않는 PDF 객체 만들기

내 프로그램에서 읽을 수있는 자체 데이터 유형이 생겼지 만 PDF 파일에 포함시켜야합니다 (여러 파일이 없으며 단일 출력 당 하나의 파일이 필요함). 또한이 데이터는 사용자에게 보이지 않게 보이지 않도록해야합니다.

PDF 사전에 대해 들었지만 어떻게해야하는지 잘 모르겠습니다. XMP/XML 파일을 사용하고 싶지 않지만 데이터가 키 - 값보다 복잡합니다. 데이터를 찾을 수 iText를

  • 사용하여 채 웁니다

    • iText를
    • 를 사용하여 PDF에 새 dicitonary을 추가 좋을 텐데 무엇

      누군가가 나에게 저를 설정하는 코드의 몇 가지 예를 들어 라인을 작성하는 것입니다 당신은 뭐 비슷한 작업을 수행 할 iText를
  • +0

    XML은 매우 복잡한 데이터를 저장할 수 있으며 일반적으로 – gigadot

    +0

    합니까? – Karlovsky120

    답변

    3

    를 사용하여 읽기 iText를

  • 사용하여 파일에서 어도비 일러스트 레이터가하고있다. Adobe Illustrator에서 PDF를 만들면 원본 AI 파일을 캡슐화 할 수 있습니다. 이렇게하면 PDF를 편집 할 수 있다는 인상을줍니다. 실제로 Adobe Illustrator는 AI 파일을 가져 와서이를 사용하여 업데이트 된 AI에서 PDF를 편집하고 다시 만듭니다.

    이 정보는 어디에 저장되어 있습니까? ISO-32000-1 섹션 14.5을 참조하십시오

    규격에 부합하는 제품은 해당 문서, 페이지 또는 형태와 관련하여 개인 데이터를 저장하는 장소로이 사전을 사용할 수 있습니다. 그러한 개인 데이터는 해당 제품을 따르는 제품 (예 : 그래픽 편집기의 개체 그룹화 정보 또는 Adobe Photoshop®에서 사용하는 레이어 정보)에 의미있는 정보를 전달할 수 있지만 일반 용도의 판독기에서는 무시할 수 있습니다.

    여기에 무엇이 필요한지 잘 모르겠습니다. 내가 위에 답한 것과 같은 조언을 요청하는 경우 : 예를 들어 루트 사전 (일명 카탈로그)에 PieceInfo 항목을 추가하십시오. 이것은 모두 문서화 된 것입니다, 그렇지 않습니까? ISO 사양을 읽고 "iText in Action"의 파트 4를 읽으십시오.

    질문 : 내가해야 할 일을하는 나를위한 코드를 작성하십시오. 그때 나는이 사이트의 목표를 어느 정도 위반한다고 생각합니다.

  • +0

    마지막 부분에 대해서는 다음과 같은 것을 의미했습니다 : iTextClassINeed.createNewDictionary (args); iTextClassNeed.addNewlineToDictionary (args); 그럼 나는 더 자세한 정보를 얻기 위해 iTextClassINeed를 탐험하러 갈 것입니다 ... – Karlovsky120

    +1

    내 대답은 묵시적으로 : 새로운 사전을 만들지 마십시오! ISO-32000-1에서 제안 된 구문을 사용하고 카탈로그에 Page-Piece Dictionary를 추가하십시오. 방법? PdfWriter.getExtraCatalog()를 사용하고 Piece-Info 사전을 추가합니다. Piece-Info 사전은 어떻게 만듭니 까? 어 ... 왜 새로운 PdfDictionary()를 사용하지 않습니까? –

    +0

    예, 정말 고마워요. 필요한 모든 것입니다 ... – Karlovsky120

    1

    그럼 당신은 진수는 다음과 같이 화면을 빼다 다음 문자열로 데이터를 인코딩 및 수 :

    cb.showTextAligned(PdfContentByte.ALIGN_LEFT,"HIDDENDATA_"+ hexencodeddata, 2000f,2000f, 0f); 
    

    모든 문자열이 HIDDENDATA_

    또 다른 방법은 검색 과정을 읽는 것은 주석

    을 사용하는 것입니다
    public void addAnnotation(PdfWriter writer, 
         Document document, Rectangle rect, String text) { 
         PdfAnnotation annotation = new PdfAnnotation(writer, 
          new Rectangle(
           rect.getRight() + 10, rect.getBottom(), 
           rect.getRight() + 30, rect.getTop())); 
         annotation.setTitle("Text annotation"); 
         annotation.put(PdfName.SUBTYPE, PdfName.TEXT); 
         annotation.put(PdfName.OPEN, PdfBoolean.PDFFALSE); 
    
         annotation.put(PdfName.NAME, new PdfName(text)); 
         writer.addAnnotation(annotation); 
        } 
    

    그런 다음이를 사용하여 읽으십시오.이 사용자에게 표시되지 않습니다있는 방법으로 PDF로 embedd 할 수있는 방법이 있나요

    http://downloads.snowtide.com/javadoc/PDFTextStream/2.3.2/com/snowtide/pdf/PDFTextStream.html

    +1

    나는 이것을 투표하지 않을 것이지만, 이것은 나쁜 조언입니다. 어도비 리더에 어노테이션이 나타날 것입니다. 16 진수로 인코딩 된 데이터를 사용하여 페이지의 보이는 영역 외부에 쓰면 PDF의 '부적절한 사용'으로 간주됩니다. ISO-32000-1이 개인 데이터를 저장하는 메커니즘을 제공한다면, 왜 사용하지 않을까요? –

    +0

    나는 당신에게 동의한다, 그것은 단지 다른 방법 일 뿐이다. 이전 답변이 가장 좋은 방법이지만, PDF가 개인 정보를 지원한다고하더라도 개인 정보가 있다는 조언을 원치 않을 때가 있습니다. –

    관련 문제