private static IRoleMappingResolver ResolveMappingToStandard(TagTreePointer taggingPointer)
        {
            TagStructureContext tagContext = taggingPointer.GetDocument().GetTagStructureContext();
            PdfNamespace        @namespace = taggingPointer.GetProperties().GetNamespace();

            return(tagContext.ResolveMappingToStandardOrDomainSpecificRole(taggingPointer.GetRole(), @namespace));
        }
        public virtual void DocWithInvalidMapping06()
        {
            PdfDocument pdfDocument = new PdfDocument(new PdfWriter(destinationFolder + "docWithInvalidMapping06.pdf",
                                                                    new WriterProperties().SetPdfVersion(PdfVersion.PDF_2_0)));

            pdfDocument.SetTagged();
            Document            document  = new Document(pdfDocument);
            TagStructureContext tagCntxt  = pdfDocument.GetTagStructureContext();
            PdfNamespace        pointerNs = tagCntxt.FetchNamespace(StandardNamespaces.PDF_2_0);

            pointerNs.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.span, StandardRoles.SPAN, pointerNs);
            // deliberately creating namespace via constructor instead of using TagStructureContext#fetchNamespace
            PdfNamespace stdNs2 = new PdfNamespace(StandardNamespaces.PDF_2_0);

            stdNs2.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.span, StandardRoles.EM, stdNs2);
            Text customRolePText1 = new Text("Hello world text 1.");

            customRolePText1.GetAccessibilityProperties().SetRole(LayoutTaggingPdf2Test.HtmlRoles.span);
            customRolePText1.GetAccessibilityProperties().SetNamespace(stdNs2);
            document.Add(new Paragraph(customRolePText1));
            Text customRolePText2 = new Text("Hello world text 2.");

            customRolePText2.GetAccessibilityProperties().SetRole(LayoutTaggingPdf2Test.HtmlRoles.span);
            // not explicitly setting namespace that we've manually created. This will lead to the situation, when
            // /Namespaces entry in StructTreeRoot would have two different namespace dictionaries with the same name.
            document.Add(new Paragraph(customRolePText2));
            document.Close();
            CompareResult("docWithInvalidMapping06");
        }
 public virtual void DocWithInvalidMapping07()
 {
     NUnit.Framework.Assert.That(() => {
         PdfDocument pdfDocument = new PdfDocument(new PdfWriter(destinationFolder + "docWithInvalidMapping07.pdf",
                                                                 new WriterProperties().SetPdfVersion(PdfVersion.PDF_2_0)));
         pdfDocument.SetTagged();
         Document document           = new Document(pdfDocument);
         PdfNamespace stdNs2         = pdfDocument.GetTagStructureContext().FetchNamespace(StandardNamespaces.PDF_2_0);
         int numOfTransitiveMappings = 120;
         String prevRole             = LayoutTaggingPdf2Test.HtmlRoles.span;
         for (int i = 0; i < numOfTransitiveMappings; ++i)
         {
             String nextRole = "span" + i;
             stdNs2.AddNamespaceRoleMapping(prevRole, nextRole, stdNs2);
             prevRole = nextRole;
         }
         stdNs2.AddNamespaceRoleMapping(prevRole, StandardRoles.SPAN, stdNs2);
         Text customRolePText1 = new Text("Hello world text.");
         customRolePText1.GetAccessibilityProperties().SetRole(LayoutTaggingPdf2Test.HtmlRoles.span);
         customRolePText1.GetAccessibilityProperties().SetNamespace(stdNs2);
         document.Add(new Paragraph(customRolePText1));
         document.Close();
     }
                                 , NUnit.Framework.Throws.InstanceOf <PdfException>().With.Message.EqualTo(String.Format(PdfException.RoleInNamespaceIsNotMappedToAnyStandardRole, "span", "http://iso.org/pdf2/ssn")))
     ;
 }
        public virtual void CustomRolesMappingPdf17()
        {
            PdfDocument pdfDocument = new PdfDocument(new PdfWriter(destinationFolder + "customRolesMappingPdf17.pdf",
                                                                    new WriterProperties().SetPdfVersion(PdfVersion.PDF_2_0)));

            pdfDocument.SetTagged();
            PdfNamespace xhtmlNs = new PdfNamespace("http://www.w3.org/1999/xhtml");
            PdfNamespace html4Ns = new PdfNamespace("http://www.w3.org/TR/html4");
            String       h9      = "H9";
            String       h1      = StandardRoles.H1;

            // deliberately mapping to H9 tag
            xhtmlNs.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.h1, h9);
            xhtmlNs.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.p, StandardRoles.P);
            xhtmlNs.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.img, StandardRoles.FIGURE);
            xhtmlNs.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.ul, StandardRoles.L);
            xhtmlNs.AddNamespaceRoleMapping(StandardRoles.SPAN, LayoutTaggingPdf2Test.HtmlRoles.span, xhtmlNs);
            xhtmlNs.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.span, StandardRoles.SPAN);
            xhtmlNs.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.center, "Center");
            html4Ns.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.center, LayoutTaggingPdf2Test.HtmlRoles.center
                                            , xhtmlNs);
            // test some tricky mapping cases
            pdfDocument.GetStructTreeRoot().AddRoleMapping(h9, h1);
            pdfDocument.GetStructTreeRoot().AddRoleMapping(h1, h1);
            pdfDocument.GetStructTreeRoot().AddRoleMapping("Center", StandardRoles.P);
            pdfDocument.GetStructTreeRoot().AddRoleMapping("I", StandardRoles.SPAN);
            pdfDocument.GetTagStructureContext().SetDocumentDefaultNamespace(null);
            pdfDocument.GetTagStructureContext().GetAutoTaggingPointer().SetNamespaceForNewTags(xhtmlNs);
            Document document = new Document(pdfDocument);

            AddContentToDocInCustomNs(pdfDocument, null, xhtmlNs, html4Ns, h1, document);
            document.Close();
            CompareResult("customRolesMappingPdf17");
        }
        public virtual void CustomRolesMappingPdf2()
        {
            PdfDocument pdfDocument = new PdfDocument(new PdfWriter(destinationFolder + "customRolesMappingPdf2.pdf",
                                                                    new WriterProperties().SetPdfVersion(PdfVersion.PDF_2_0)));

            pdfDocument.SetTagged();
            TagStructureContext tagsContext   = pdfDocument.GetTagStructureContext();
            PdfNamespace        stdNamespace2 = tagsContext.FetchNamespace(StandardNamespaces.PDF_2_0);
            PdfNamespace        xhtmlNs       = new PdfNamespace("http://www.w3.org/1999/xhtml");
            PdfNamespace        html4Ns       = new PdfNamespace("http://www.w3.org/TR/html4");
            String h9  = "H9";
            String h11 = "H11";

            // deliberately mapping to H9 tag
            xhtmlNs.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.h1, h9, stdNamespace2);
            xhtmlNs.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.p, StandardRoles.P, stdNamespace2);
            xhtmlNs.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.img, StandardRoles.FIGURE, stdNamespace2);
            xhtmlNs.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.ul, StandardRoles.L, stdNamespace2);
            xhtmlNs.AddNamespaceRoleMapping(StandardRoles.SPAN, LayoutTaggingPdf2Test.HtmlRoles.span, xhtmlNs);
            xhtmlNs.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.span, StandardRoles.SPAN, stdNamespace2);
            xhtmlNs.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.center, StandardRoles.P, stdNamespace2);
            html4Ns.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.center, LayoutTaggingPdf2Test.HtmlRoles.center
                                            , xhtmlNs);
            // test some tricky mapping cases
            stdNamespace2.AddNamespaceRoleMapping(h9, h11, stdNamespace2);
            stdNamespace2.AddNamespaceRoleMapping(h11, h11, stdNamespace2);
            tagsContext.GetAutoTaggingPointer().SetNamespaceForNewTags(xhtmlNs);
            Document document = new Document(pdfDocument);

            AddContentToDocInCustomNs(pdfDocument, stdNamespace2, xhtmlNs, html4Ns, h11, document);
            document.Close();
            CompareResult("customRolesMappingPdf2");
        }
Example #6
0
        private void LogCreatedRootTagHasMappingIssue(PdfNamespace rootTagOriginalNs, IRoleMappingResolver mapping
                                                      )
        {
            String origRootTagNs = "";

            if (rootTagOriginalNs != null && rootTagOriginalNs.GetNamespaceName() != null)
            {
                origRootTagNs = " in \"" + rootTagOriginalNs.GetNamespaceName() + "\" namespace";
            }
            String mappingRole = " to ";

            if (mapping != null)
            {
                mappingRole += "\"" + mapping.GetRole() + "\"";
                if (mapping.GetNamespace() != null && !StandardNamespaces.PDF_1_7.Equals(mapping.GetNamespace().GetNamespaceName
                                                                                             ()))
                {
                    mappingRole += " in \"" + mapping.GetNamespace().GetNamespaceName() + "\" namespace";
                }
            }
            else
            {
                mappingRole += "not standard role";
            }
            ILog logger = LogManager.GetLogger(typeof(iText.Kernel.Pdf.Tagutils.RootTagNormalizer));

            logger.Warn(String.Format(iText.IO.LogMessageConstant.CREATED_ROOT_TAG_HAS_MAPPING, origRootTagNs, mappingRole
                                      ));
        }
Example #7
0
        private void SetNamespaceForNewTagsBasedOnExistingRoot()
        {
            IList <IStructureNode> rootKids = document.GetStructTreeRoot().GetKids();

            if (rootKids.Count > 0)
            {
                PdfStructElem        firstKid        = (PdfStructElem)rootKids[0];
                IRoleMappingResolver resolvedMapping = ResolveMappingToStandardOrDomainSpecificRole(firstKid.GetRole().GetValue
                                                                                                        (), firstKid.GetNamespace());
                if (resolvedMapping == null || !resolvedMapping.CurrentRoleIsStandard())
                {
                    ILog   logger = LogManager.GetLogger(typeof(iText.Kernel.Pdf.Tagutils.TagStructureContext));
                    String nsStr;
                    if (firstKid.GetNamespace() != null)
                    {
                        nsStr = firstKid.GetNamespace().GetNamespaceName();
                    }
                    else
                    {
                        nsStr = StandardNamespaces.GetDefault();
                    }
                    logger.Warn(String.Format(iText.IO.LogMessageConstant.EXISTING_TAG_STRUCTURE_ROOT_IS_NOT_STANDARD, firstKid
                                              .GetRole().GetValue(), nsStr));
                }
                if (resolvedMapping == null || !StandardNamespaces.PDF_1_7.Equals(resolvedMapping.GetNamespace().GetNamespaceName
                                                                                      ()))
                {
                    documentDefaultNamespace = FetchNamespace(StandardNamespaces.PDF_2_0);
                }
            }
            else
            {
                documentDefaultNamespace = FetchNamespace(StandardNamespaces.PDF_2_0);
            }
        }
        public virtual void DocWithExplicitAndImplicitDefaultNsAtTheSameTime()
        {
            PdfDocument pdfDocument = new PdfDocument(new PdfWriter(destinationFolder + "docWithExplicitAndImplicitDefaultNsAtTheSameTime.pdf"
                                                                    , new WriterProperties().SetPdfVersion(PdfVersion.PDF_2_0)));

            pdfDocument.SetTagged();
            TagStructureContext tagsContext = pdfDocument.GetTagStructureContext();

            tagsContext.SetDocumentDefaultNamespace(null);
            PdfNamespace explicitDefaultNs = tagsContext.FetchNamespace(StandardNamespaces.PDF_1_7);
            Document     document          = new Document(pdfDocument);
            Paragraph    hPara             = new Paragraph("This is header.");

            hPara.GetAccessibilityProperties().SetRole(StandardRoles.H);
            hPara.GetAccessibilityProperties().SetNamespace(explicitDefaultNs);
            document.Add(hPara);
            PdfNamespace xhtmlNs = new PdfNamespace("http://www.w3.org/1999/xhtml");

            xhtmlNs.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.img, StandardRoles.FIGURE, explicitDefaultNs
                                            );
            xhtmlNs.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.ul, StandardRoles.L);
            iText.Layout.Element.Image img = new Image(ImageDataFactory.Create(sourceFolder + imageName)).SetWidth(100
                                                                                                                   );
            img.GetAccessibilityProperties().SetRole(LayoutTaggingPdf2Test.HtmlRoles.img);
            img.GetAccessibilityProperties().SetNamespace(xhtmlNs);
            document.Add(img);
            List list = new List().SetListSymbol("-> ");

            list.GetAccessibilityProperties().SetRole(LayoutTaggingPdf2Test.HtmlRoles.ul);
            list.GetAccessibilityProperties().SetNamespace(xhtmlNs);
            list.Add("list item").Add("list item").Add("list item").Add("list item").Add("list item");
            document.Add(list);
            xhtmlNs.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.center, "Center", explicitDefaultNs);
            xhtmlNs.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.p, "Note", explicitDefaultNs);
            explicitDefaultNs.AddNamespaceRoleMapping("Center", StandardRoles.P, explicitDefaultNs);
            explicitDefaultNs.AddNamespaceRoleMapping("Note", "Note");
            xhtmlNs.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.span, "Note");
            pdfDocument.GetStructTreeRoot().AddRoleMapping("Note", StandardRoles.P);
            Paragraph centerPara = new Paragraph("centered text");

            centerPara.GetAccessibilityProperties().SetRole(LayoutTaggingPdf2Test.HtmlRoles.center);
            centerPara.GetAccessibilityProperties().SetNamespace(xhtmlNs);
            Text simpleSpan = new Text("simple p with simple span");

            simpleSpan.GetAccessibilityProperties().SetRole(LayoutTaggingPdf2Test.HtmlRoles.span);
            simpleSpan.GetAccessibilityProperties().SetNamespace(xhtmlNs);
            Paragraph simplePara = new Paragraph(simpleSpan);

            simplePara.GetAccessibilityProperties().SetRole(LayoutTaggingPdf2Test.HtmlRoles.p);
            simplePara.GetAccessibilityProperties().SetNamespace(xhtmlNs);
            document.Add(centerPara).Add(simplePara);
            pdfDocument.GetStructTreeRoot().AddRoleMapping("I", StandardRoles.SPAN);
            Text iSpan = new Text("cursive span");

            iSpan.GetAccessibilityProperties().SetRole("I");
            document.Add(new Paragraph(iSpan));
            document.Close();
            CompareResult("docWithExplicitAndImplicitDefaultNsAtTheSameTime");
        }
Example #9
0
 /// <summary>A copy constructor.</summary>
 /// <param name="tagPointer">
 /// the
 /// <c>TagTreePointer</c>
 /// from which current position and page are copied.
 /// </param>
 public TagTreePointer(iText.Kernel.Pdf.Tagutils.TagTreePointer tagPointer)
 {
     this.tagStructureContext = tagPointer.tagStructureContext;
     SetCurrentStructElem(tagPointer.GetCurrentStructElem());
     this.currentPage      = tagPointer.currentPage;
     this.contentStream    = tagPointer.contentStream;
     this.currentNamespace = tagPointer.currentNamespace;
 }
Example #10
0
        private void ProcessKidNamespace(PdfStructElem kid)
        {
            PdfNamespace kidNamespace = kid.GetNamespace();

            if (currentNamespace != null && kidNamespace == null)
            {
                kid.SetNamespace(currentNamespace);
                kidNamespace = currentNamespace;
            }
            tagStructureContext.EnsureNamespaceRegistered(kidNamespace);
        }
Example #11
0
        /// <summary>
        /// This method defines a recommended way to obtain
        /// <see cref="iText.Kernel.Pdf.Tagging.PdfNamespace"/>
        /// class instances.
        /// </summary>
        /// <remarks>
        /// This method defines a recommended way to obtain
        /// <see cref="iText.Kernel.Pdf.Tagging.PdfNamespace"/>
        /// class instances.
        /// <para />
        /// Returns either a wrapper over an already existing namespace dictionary in the document or over a new one
        /// if such namespace wasn't encountered before. Calling this method is considered as encountering a namespace,
        /// i.e. two sequential calls on this method will return the same namespace instance (which is not true in general case
        /// of two method calls, for instance if several namespace instances with the same name are created via
        /// <see cref="iText.Kernel.Pdf.Tagging.PdfNamespace"/>
        /// constructors and set to the elements of the tag structure, then the last encountered one
        /// will be returned by this method). However encountered namespaces will not be added to the document's structure tree root
        /// <see cref="iText.Kernel.Pdf.PdfName.Namespaces">/Namespaces</see>
        /// array unless they were set to the certain element of the tag structure.
        /// </remarks>
        /// <param name="namespaceName">
        /// a
        /// <see cref="System.String"/>
        /// defining the namespace name (conventionally a uniform resource identifier, or URI).
        /// </param>
        /// <returns>
        ///
        /// <see cref="iText.Kernel.Pdf.Tagging.PdfNamespace"/>
        /// wrapper over either already existing namespace object or over the new one.
        /// </returns>
        public virtual PdfNamespace FetchNamespace(String namespaceName)
        {
            PdfNamespace ns = nameToNamespace.Get(namespaceName);

            if (ns == null)
            {
                ns = new PdfNamespace(namespaceName);
                nameToNamespace.Put(namespaceName, ns);
            }
            return(ns);
        }
Example #12
0
 /// <summary>
 /// Gets an instance of the
 /// <see cref="IRoleMappingResolver"/>
 /// corresponding to the current tag structure target version.
 /// </summary>
 /// <param name="role">a role in the given namespace which mapping is to be resolved.</param>
 /// <param name="namespace">
 /// a
 /// <see cref="iText.Kernel.Pdf.Tagging.PdfNamespace"/>
 /// which this role belongs to.
 /// </param>
 /// <returns>
 /// a
 /// <see cref="IRoleMappingResolver"/>
 /// instance, with the giving role in the given
 /// <see cref="iText.Kernel.Pdf.Tagging.PdfNamespace"/>
 /// as current.
 /// </returns>
 public virtual IRoleMappingResolver GetRoleMappingResolver(String role, PdfNamespace @namespace)
 {
     if (TargetTagStructureVersionIs2())
     {
         return(new RoleMappingResolverPdf2(role, @namespace, GetDocument()));
     }
     else
     {
         return(new RoleMappingResolver(role, GetDocument()));
     }
 }
Example #13
0
        internal virtual void ThrowExceptionIfRoleIsInvalid(AccessibilityProperties properties, PdfNamespace pointerCurrentNamespace
                                                            )
        {
            PdfNamespace @namespace = properties.GetNamespace();

            if (@namespace == null)
            {
                @namespace = pointerCurrentNamespace;
            }
            ThrowExceptionIfRoleIsInvalid(properties.GetRole(), @namespace);
        }
Example #14
0
 internal virtual void EnsureNamespaceRegistered(PdfNamespace @namespace)
 {
     if (@namespace != null)
     {
         PdfDictionary namespaceObj = @namespace.GetPdfObject();
         if (!namespaces.Contains(namespaceObj))
         {
             namespaces.Add(namespaceObj);
         }
         nameToNamespace.Put(@namespace.GetNamespaceName(), @namespace);
     }
 }
        internal RoleMappingResolverPdf2(String role, PdfNamespace @namespace, PdfDocument document)
        {
            this.currRole      = PdfStructTreeRoot.ConvertRoleToPdfName(role);
            this.currNamespace = @namespace;
            String        defaultNsName    = StandardNamespaces.GetDefault();
            PdfDictionary defaultNsRoleMap = document.GetStructTreeRoot().GetRoleMap();

            this.defaultNamespace = new PdfNamespace(defaultNsName).SetNamespaceRoleMap(defaultNsRoleMap);
            if (currNamespace == null)
            {
                currNamespace = defaultNamespace;
            }
        }
Example #16
0
 internal virtual void ThrowExceptionIfRoleIsInvalid(String role, PdfNamespace @namespace)
 {
     if (!CheckIfRoleShallBeMappedToStandardRole(role, @namespace))
     {
         String exMessage = ComposeInvalidRoleException(role, @namespace);
         if (forbidUnknownRoles)
         {
             throw new PdfException(exMessage);
         }
         else
         {
             ILog logger = LogManager.GetLogger(typeof(iText.Kernel.Pdf.Tagutils.TagStructureContext));
             logger.Warn(exMessage);
         }
     }
 }
        public virtual void DocWithInvalidMapping09()
        {
            PdfDocument pdfDocument = new PdfDocument(new PdfWriter(destinationFolder + "docWithInvalidMapping09.pdf",
                                                                    new WriterProperties().SetPdfVersion(PdfVersion.PDF_2_0)));

            pdfDocument.SetTagged();
            TagStructureContext tagsContext = pdfDocument.GetTagStructureContext();
            PdfNamespace        ssn2        = tagsContext.FetchNamespace(StandardNamespaces.PDF_2_0);

            ssn2.AddNamespaceRoleMapping(StandardRoles.DOCUMENT, "Book", ssn2);
            Document document = new Document(pdfDocument);

            document.Add(new Paragraph("hello world; root tag mapping"));
            document.Close();
            CompareResult("docWithInvalidMapping09");
        }
        public virtual void StampTest05()
        {
            PdfDocument pdfDocument = new PdfDocument(new PdfReader(sourceFolder + "simpleDocNewStdNs.pdf"), new PdfWriter
                                                          (destinationFolder + "stampTest05.pdf", new WriterProperties().SetPdfVersion(PdfVersion.PDF_2_0)));
            TagStructureContext tagCntxt = pdfDocument.GetTagStructureContext();
            PdfNamespace        xhtmlNs  = tagCntxt.FetchNamespace("http://www.w3.org/1999/xhtml");
            PdfNamespace        ssn2     = tagCntxt.FetchNamespace(StandardNamespaces.PDF_2_0);

            xhtmlNs.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.ul, StandardRoles.L, ssn2);
            TagTreePointer pointer = new TagTreePointer(pdfDocument);

            pointer.MoveToKid(StandardRoles.TABLE).MoveToKid(StandardRoles.TR).MoveToKid(1, StandardRoles.TD).MoveToKid
                (StandardRoles.L);
            pointer.SetRole(LayoutTaggingPdf2Test.HtmlRoles.ul).GetProperties().SetNamespace(xhtmlNs);
            pdfDocument.Close();
            CompareResult("stampTest05");
        }
Example #19
0
        private void CreateNewRootTag()
        {
            IRoleMappingResolver mapping;
            PdfNamespace         docDefaultNs = context.GetDocumentDefaultNamespace();

            mapping = context.ResolveMappingToStandardOrDomainSpecificRole(StandardRoles.DOCUMENT, docDefaultNs);
            if (mapping == null || mapping.CurrentRoleIsStandard() && !StandardRoles.DOCUMENT.Equals(mapping.GetRole()
                                                                                                     ))
            {
                LogCreatedRootTagHasMappingIssue(docDefaultNs, mapping);
            }
            rootTagElement = document.GetStructTreeRoot().AddKid(new PdfStructElem(document, PdfName.Document));
            if (context.TargetTagStructureVersionIs2())
            {
                rootTagElement.SetNamespace(docDefaultNs);
                context.EnsureNamespaceRegistered(docDefaultNs);
            }
        }
Example #20
0
        private void WrapAllKidsInTag(PdfStructElem parent, PdfName wrapTagRole, PdfNamespace wrapTagNs)
        {
            int            kidsNum    = parent.GetKids().Count;
            TagTreePointer tagPointer = new TagTreePointer(parent, document);

            tagPointer.AddTag(0, wrapTagRole.GetValue());
            if (context.TargetTagStructureVersionIs2())
            {
                tagPointer.GetProperties().SetNamespace(wrapTagNs);
            }
            TagTreePointer newParentOfKids = new TagTreePointer(tagPointer);

            tagPointer.MoveToParent();
            for (int i = 0; i < kidsNum; ++i)
            {
                tagPointer.RelocateKid(1, newParentOfKids);
            }
        }
Example #21
0
 // it is StructTreeRoot
 // should never happen as we always should have only one root tag and we don't remove it
 private String ComposeExceptionBasedOnNamespacePresence(String role, PdfNamespace @namespace, String withoutNsEx
                                                         , String withNsEx)
 {
     if (@namespace == null)
     {
         return(String.Format(withoutNsEx, role));
     }
     else
     {
         String nsName             = @namespace.GetNamespaceName();
         PdfIndirectReference @ref = @namespace.GetPdfObject().GetIndirectReference();
         if (@ref != null)
         {
             nsName = nsName + " (" + JavaUtil.IntegerToString(@ref.GetObjNumber()) + " " + JavaUtil.IntegerToString(@ref
                                                                                                                     .GetGenNumber()) + " obj)";
         }
         return(String.Format(withNsEx, role, nsName));
     }
 }
 public virtual void DocWithInvalidMapping02()
 {
     NUnit.Framework.Assert.That(() => {
         PdfDocument pdfDocument = new PdfDocument(new PdfWriter(destinationFolder + "docWithInvalidMapping02.pdf",
                                                                 new WriterProperties().SetPdfVersion(PdfVersion.PDF_2_0)));
         pdfDocument.SetTagged();
         TagStructureContext tagsContext = pdfDocument.GetTagStructureContext();
         tagsContext.SetDocumentDefaultNamespace(null);
         PdfNamespace explicitDefaultNs = tagsContext.FetchNamespace(StandardNamespaces.PDF_1_7);
         Document document = new Document(pdfDocument);
         explicitDefaultNs.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.p, StandardRoles.P);
         Paragraph customRolePara = new Paragraph("Hello world text.");
         customRolePara.GetAccessibilityProperties().SetRole(LayoutTaggingPdf2Test.HtmlRoles.p);
         document.Add(customRolePara);
         document.Close();
     }
                                 , NUnit.Framework.Throws.InstanceOf <PdfException>().With.Message.EqualTo(String.Format(PdfException.RoleIsNotMappedToAnyStandardRole, "p")))
     ;
 }
        public virtual bool ResolveNextMapping()
        {
            PdfObject     mapping       = null;
            PdfDictionary currNsRoleMap = currNamespace.GetNamespaceRoleMap();

            if (currNsRoleMap != null)
            {
                mapping = currNsRoleMap.Get(currRole);
            }
            if (mapping == null)
            {
                return(false);
            }
            bool mappingWasResolved = false;

            if (mapping.IsName())
            {
                currRole           = (PdfName)mapping;
                currNamespace      = defaultNamespace;
                mappingWasResolved = true;
            }
            else
            {
                if (mapping.IsArray())
                {
                    PdfName       mappedRole   = null;
                    PdfDictionary mappedNsDict = null;
                    PdfArray      mappingArr   = (PdfArray)mapping;
                    if (mappingArr.Size() > 1)
                    {
                        mappedRole   = mappingArr.GetAsName(0);
                        mappedNsDict = mappingArr.GetAsDictionary(1);
                    }
                    mappingWasResolved = mappedRole != null && mappedNsDict != null;
                    if (mappingWasResolved)
                    {
                        currRole      = mappedRole;
                        currNamespace = new PdfNamespace(mappedNsDict);
                    }
                }
            }
            return(mappingWasResolved);
        }
        public virtual void DocWithInvalidMapping04()
        {
            // TODO this test passes, however it seems, that mingling two standard namespaces in the same tag structure tree should be illegal
            // May be this should be checked if we would implement conforming PDF/UA docs generations in a way PDF/A docs are generated
            PdfDocument pdfDocument = new PdfDocument(new PdfWriter(destinationFolder + "docWithInvalidMapping04.pdf",
                                                                    new WriterProperties().SetPdfVersion(PdfVersion.PDF_2_0)));

            pdfDocument.SetTagged();
            TagStructureContext tagsCntxt = pdfDocument.GetTagStructureContext();
            PdfNamespace        stdNs2    = tagsCntxt.FetchNamespace(StandardNamespaces.PDF_2_0);

            stdNs2.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.p, StandardRoles.P);
            Document  document       = new Document(pdfDocument);
            Paragraph customRolePara = new Paragraph("Hello world text.");

            customRolePara.GetAccessibilityProperties().SetRole(LayoutTaggingPdf2Test.HtmlRoles.p);
            document.Add(customRolePara);
            document.Close();
            CompareResult("docWithInvalidMapping04");
        }
        public virtual void SimpleDocExplicitlyOldStdNs()
        {
            PdfDocument pdfDocument = new PdfDocument(new PdfWriter(destinationFolder + "simpleDocExplicitlyOldStdNs.pdf"
                                                                    , new WriterProperties().SetPdfVersion(PdfVersion.PDF_2_0)));

            pdfDocument.SetTagged();
            TagStructureContext tagsContext = pdfDocument.GetTagStructureContext();
            PdfNamespace        @namespace  = tagsContext.FetchNamespace(StandardNamespaces.PDF_1_7);

            tagsContext.SetDocumentDefaultNamespace(@namespace);
            Document  document = new Document(pdfDocument);
            Paragraph h1       = new Paragraph("Header level 1");

            h1.GetAccessibilityProperties().SetRole(StandardRoles.H1);
            Paragraph helloWorldPara = new Paragraph("Hello World from iText7");

            document.Add(h1);
            AddSimpleContentToDoc(document, helloWorldPara);
            document.Close();
            CompareResult("simpleDocExplicitlyOldStdNs");
        }
Example #26
0
        public virtual void StructElemTest07()
        {
            PdfWriter writer = new PdfWriter(destinationFolder + "structElemTest07.pdf");

            writer.SetCompressionLevel(CompressionConstants.NO_COMPRESSION);
            PdfDocument document = new PdfDocument(writer);

            document.SetTagged();
            PdfStructElem doc    = document.GetStructTreeRoot().AddKid(new PdfStructElem(document, PdfName.Document));
            PdfPage       page   = document.AddNewPage();
            PdfCanvas     canvas = new PdfCanvas(page);

            canvas.BeginText();
            canvas.SetFontAndSize(PdfFontFactory.CreateFont(StandardFonts.COURIER), 24);
            canvas.SetTextMatrix(1, 0, 0, 1, 32, 512);
            PdfStructElem paragraph = doc.AddKid(new PdfStructElem(document, PdfName.P));
            PdfStructElem span1     = paragraph.AddKid(new PdfStructElem(document, PdfName.Span, page));

            canvas.OpenTag(new CanvasTag(span1.AddKid(new PdfMcrNumber(page, span1))));
            canvas.ShowText("Hello ");
            canvas.CloseTag();
            PdfStructElem span2 = paragraph.AddKid(new PdfStructElem(document, new PdfName("Chunk"), page));

            canvas.OpenTag(new CanvasTag(span2.AddKid(new PdfMcrNumber(page, span2))));
            canvas.ShowText("World");
            canvas.CloseTag();
            canvas.EndText();
            canvas.Release();
            PdfNamespace @namespace = new PdfNamespace("http://www.w3.org/1999/xhtml");

            span1.SetNamespace(@namespace);
            span1.AddRef(span2);
            span1.SetPhoneticAlphabet(PdfName.ipa);
            span1.SetPhoneme(new PdfString("Heeeelllloooooo"));
            @namespace.AddNamespaceRoleMapping(StandardRoles.SPAN, StandardRoles.SPAN);
            document.GetStructTreeRoot().AddNamespace(@namespace);
            page.Flush();
            document.Close();
            CompareResult("structElemTest07.pdf", "cmp_structElemTest07.pdf", "diff_structElem_07_");
        }
        /// <exception cref="System.UriFormatException"/>
        private void AddContentToDocInCustomNs(PdfDocument pdfDocument, PdfNamespace defaultNamespace, PdfNamespace
                                               xhtmlNs, PdfNamespace html4Ns, String hnRole, Document document)
        {
            Paragraph h1P = new Paragraph("Header level 1");

            h1P.GetAccessibilityProperties().SetRole(LayoutTaggingPdf2Test.HtmlRoles.h1);
            Paragraph helloWorldPara = new Paragraph("Hello World from iText7");

            helloWorldPara.GetAccessibilityProperties().SetRole(LayoutTaggingPdf2Test.HtmlRoles.p);
            iText.Layout.Element.Image img = new iText.Layout.Element.Image(ImageDataFactory.Create(sourceFolder + imageName
                                                                                                    )).SetWidth(100);
            img.GetAccessibilityProperties().SetRole(LayoutTaggingPdf2Test.HtmlRoles.img);
            document.Add(h1P);
            document.Add(helloWorldPara);
            document.Add(img);
            pdfDocument.GetTagStructureContext().GetAutoTaggingPointer().SetNamespaceForNewTags(defaultNamespace);
            List list = new List().SetListSymbol("-> ");

            list.GetAccessibilityProperties().SetRole(LayoutTaggingPdf2Test.HtmlRoles.ul);
            list.GetAccessibilityProperties().SetNamespace(xhtmlNs);
            list.Add("list item").Add("list item").Add("list item").Add("list item").Add(new ListItem("list item"));
            document.Add(list);
            Paragraph center = new Paragraph("centered text").SetTextAlignment(TextAlignment.CENTER);

            center.GetAccessibilityProperties().SetRole(LayoutTaggingPdf2Test.HtmlRoles.center);
            center.GetAccessibilityProperties().SetNamespace(html4Ns);
            document.Add(center);
            Paragraph h11Para = new Paragraph("Heading level 11");

            h11Para.GetAccessibilityProperties().SetRole(hnRole);
            document.Add(h11Para);
            if (defaultNamespace == null)
            {
                Text i = new Text("italic text");
                i.GetAccessibilityProperties().SetRole("I");
                Paragraph pi = new Paragraph(i.SetItalic());
                document.Add(pi);
            }
        }
 public virtual void DocWithInvalidMapping05()
 {
     NUnit.Framework.Assert.That(() => {
         PdfDocument pdfDocument = new PdfDocument(new PdfWriter(destinationFolder + "docWithInvalidMapping05.pdf",
                                                                 new WriterProperties().SetPdfVersion(PdfVersion.PDF_2_0)));
         pdfDocument.SetTagged();
         Document document = new Document(pdfDocument);
         // deliberately creating namespace via constructor instead of using TagStructureContext#fetchNamespace
         PdfNamespace stdNs2 = new PdfNamespace(StandardNamespaces.PDF_2_0);
         stdNs2.AddNamespaceRoleMapping(LayoutTaggingPdf2Test.HtmlRoles.p, StandardRoles.P, stdNs2);
         Paragraph customRolePara = new Paragraph("Hello world text.");
         customRolePara.GetAccessibilityProperties().SetRole(LayoutTaggingPdf2Test.HtmlRoles.p);
         customRolePara.GetAccessibilityProperties().SetNamespace(stdNs2);
         document.Add(customRolePara);
         Paragraph customRolePara2 = new Paragraph("Hello world text.");
         customRolePara2.GetAccessibilityProperties().SetRole(LayoutTaggingPdf2Test.HtmlRoles.p);
         // not explicitly setting namespace that we've manually created. This will lead to the situation, when
         // /Namespaces entry in StructTreeRoot would have two different namespace dictionaries with the same name.
         document.Add(customRolePara2);
         document.Close();
     }
                                 , NUnit.Framework.Throws.InstanceOf <PdfException>().With.Message.EqualTo(String.Format(PdfException.RoleInNamespaceIsNotMappedToAnyStandardRole, "p", "http://iso.org/pdf2/ssn")))
     ;
 }
Example #29
0
 private String ComposeTooMuchTransitiveMappingsException(String role, PdfNamespace @namespace)
 {
     return(ComposeExceptionBasedOnNamespacePresence(role, @namespace, iText.IO.LogMessageConstant.CANNOT_RESOLVE_ROLE_TOO_MUCH_TRANSITIVE_MAPPINGS
                                                     , iText.IO.LogMessageConstant.CANNOT_RESOLVE_ROLE_IN_NAMESPACE_TOO_MUCH_TRANSITIVE_MAPPINGS));
 }
Example #30
0
 private String ComposeInvalidRoleException(String role, PdfNamespace @namespace)
 {
     return(ComposeExceptionBasedOnNamespacePresence(role, @namespace, PdfException.RoleIsNotMappedToAnyStandardRole
                                                     , PdfException.RoleInNamespaceIsNotMappedToAnyStandardRole));
 }