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"); }
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 )); }
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"); }
/// <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; }
private void ProcessKidNamespace(PdfStructElem kid) { PdfNamespace kidNamespace = kid.GetNamespace(); if (currentNamespace != null && kidNamespace == null) { kid.SetNamespace(currentNamespace); kidNamespace = currentNamespace; } tagStructureContext.EnsureNamespaceRegistered(kidNamespace); }
/// <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); }
/// <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())); } }
internal virtual void ThrowExceptionIfRoleIsInvalid(AccessibilityProperties properties, PdfNamespace pointerCurrentNamespace ) { PdfNamespace @namespace = properties.GetNamespace(); if (@namespace == null) { @namespace = pointerCurrentNamespace; } ThrowExceptionIfRoleIsInvalid(properties.GetRole(), @namespace); }
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; } }
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"); }
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); } }
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); } }
// 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"); }
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"))) ; }
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)); }
private String ComposeInvalidRoleException(String role, PdfNamespace @namespace) { return(ComposeExceptionBasedOnNamespacePresence(role, @namespace, PdfException.RoleIsNotMappedToAnyStandardRole , PdfException.RoleInNamespaceIsNotMappedToAnyStandardRole)); }