2017-05-15 6 views
0

나는 PDF/C 번호 iText를 가진 1A, 2A 또는 3A를 생성하기 위해 노력하고있어,하지만 난이 문제가 발생 :대체 설명을 그림에 필요한 문서

을 " Alt 항목은/Figure 요소에 대한 대체 설명을 지정해야합니다. " 나는 그것을 아주 잘 작동 B2 또는 B3를 PDF/A B1을 생성하려고하면,하지만 난 수준의 문서를 생성해야합니다

public byte[] GeneratePDFA(byte[] inputPdf) 
{ 
    //System.out.println("PDF to PDF/A"); 
    // step 1: creation of a document-object 
    iTextSharp.text.Document document = new iTextSharp.text.Document(); 
    PdfReader reader = null; 
    MemoryStream ms = new MemoryStream(); 
    try 
    { 
     // step 2: 
     // we create a writer that listens to the document 
     // and directs a PDF-stream to a file 
     PdfAWriter writer = PdfAWriter.GetInstance(document, ms, PdfAConformanceLevel.PDF_A_1A); 
     writer.SetTagged(PdfWriter.markAll); 
     document.AddAuthor("DiY"); 
     document.AddSubject("DiY"); 
     document.AddLanguage("it-IT"); 
     document.AddCreationDate(); 
     writer.CreateXmpMetadata(); 
     //writer.setCompressionLevel(9); 
     // step 3: we open the document 
     document.Open(); 
     PdfContentByte cb = writer.DirectContent; // Holds the PDF data 
     // step 4: 
     reader = new PdfReader(inputPdf); 
     PdfTemplate page; 
     // Get number of pages: 
     int pageCount = reader.NumberOfPages; 
     for (int i = 0; i < pageCount; i++) 
     { 
      document.NewPage(); 
      page = writer.GetImportedPage(reader, i + 1); 
      cb.AddTemplate(page, 0d, 0d); 
     } 
    } 
    catch (DocumentException de) 
    { 
     throw de; 
    } 
    catch (IOException ioe) 
    { 
     throw ioe; 
    } 
    // step 5: we close the document 
    document.Close(); 
    reader.Close(); 
    document.Dispose(); 
    reader.Dispose(); 
    ms.Flush(); 
    return ms.GetBuffer(); 
} 

PS를 :

내 코드는 다음과 같습니다!

답변

1

B는 기본을 의미합니다. 즉, 문서의 시각적 표현이 장기간 보존되도록하려는 것입니다. A는 액세스 가능을 나타냅니다. 그것은 당신의 문서가 그 내용에 대한 의미 론적 정보를 포함 할 필요가 있음을 의미합니다. 또한 추가하는 모든 이미지에 설명이 있어야 함을 의미합니다. 우리는이 예에서 이미지 ChunkAlt 설명을 추가 How can I generate a PDF/UA compatible PDF with iText?

:

Image i = Image.getInstance(FOX); 
CHunk c = new Chunk(i, 0, -24); 
c.setAccessibleAttribute(PdfName.ALT, new PdfString("Fox")); 

당신은

접근 가능한 PDF 생성에 대한 질문에 더 구체적으로, 공식 FAQ를 살펴 보자 매우 어색한 방식으로 문서를 만듭니다. 액세스 할 수있는 문서에 액세스 할 수없는 페이지를 가져옵니다. 즉 결코 작동하지 않을 것이다 !!!

원본 PDF에 태그가 지정되어 있으면 구조 트리를 복사하지 않고 페이지를 복사하여 기존 의미 정보를 모두 버리게됩니다. 이미지에 대체 텍스트를 추가해야하는 경우에는 다음 질문을 읽어야합니다. Add alternative text for an image in tagged pdf (PDF/UA) using iText

원본 PDF에 태그가 지정되지 않은 경우 콘텐츠 페이지를 복사하기 때문에 고객을 속일 것입니다. 페이지별로 콘텐츠의 의미를 신경 쓰지 않아도됩니다. 원본 문서에 테이블이 포함되어 있으면 구조 트리 루트를 만들어 해당 테이블로 표시해야합니다. 그것은 불가능하지는 않더라도, 매우 어렵습니다. 문서의 의미 구조를 감지하려면 사람이 필요할 수 있으며 사람이 PDF에 수동으로 태그를 지정해야 할 수도 있습니다.

액세스 할 수없고 여우와 개 그림이 포함 된 PDF를 상상해보십시오. 이 경우 이미지의 대체 설명을 추가해야합니다 (예 : "게으른 개로 점프하는 빠른 갈색 여우").

기계는 어떻게 할 것입니까? 더 구체적으로 : 이미지가 개를 뛰어 넘는 여우의 이미지라는 것을 기계가 어떻게 볼 수 있습니까? , 질문이 잘못은 아무리 당신이이 질문을 게시 횟수 (또한 Add alternative text for an image in Tagged PDF in C#를 볼 아마 다른 질문은 이미 삭제) :

은 요약! 액세스 할 수없는 PDF 만 가져 와서 적절한 태그를 제공하지 않고 액세스 할 수있는 PDF로 불러 낼 수는 없습니다. 적절한 태그를 제공하는 것은 인간의 지능을 필요로하는 것입니다. 기계는 인간의 도움 없이는 그것을 할 수 없다.

귀하의 지속성

는 기술적 인 수준에 PDF/A 레벨 A 로와 PDF가 인간 수준유효성을 검사하는 경우 상관 없어하는 PDF를 검증하는 솔루션을 원하는 것을 나타냅니다. 그렇게하면 고소 될 수 있음을 명심하십시오. 캐나다에서는 벌금이 10 만 캐나다 달러에 달할 수 있습니다. Pleading ignorance는 도움이되지 않습니다. PDF 전문가가 PDF를 접근성있는 PDF로 변환하는 것에 대한 가정이 잘못되었다고 설명했기 때문에 당신을 도울 수 없습니다.

+0

감사합니다. Bruno! 대학 프로젝트를위한 것입니다! –