TagTreePointer(PdfStructElem structElem, PdfDocument document) { tagStructureContext = document.getTagStructureContext(); setCurrentStructElem(structElem); }
public LayoutTaggingHelper(PdfDocument document, boolean immediateFlush) { this.document = document; this.context = document.getTagStructureContext(); this.immediateFlush = immediateFlush; this.kidsHints = new LinkedHashMap<>(); this.parentHints = new LinkedHashMap<>(); this.autoTaggingPointerSavedPosition = new HashMap<>(); this.taggingRules = new HashMap<>(); registerRules(context.getTagStructureTargetVersion()); existingTagsDummies = new LinkedHashMap<>(); }
public LayoutTaggingHelper(PdfDocument document, boolean immediateFlush) { this.document = document; this.context = document.getTagStructureContext(); this.immediateFlush = immediateFlush; this.kidsHints = new LinkedHashMap<>(); this.parentHints = new LinkedHashMap<>(); this.autoTaggingPointerSavedPosition = new HashMap<>(); this.taggingRules = new HashMap<>(); registerRules(context.getTagStructureTargetVersion()); existingTagsDummies = new LinkedHashMap<>(); }
protected void createAndAddRendererSubTree(IElement element) { IRenderer rendererSubTreeRoot = element.createRendererSubTree(); LayoutTaggingHelper taggingHelper = initTaggingHelperIfNeeded(); if (taggingHelper != null) { taggingHelper.addKidsHint(pdfDocument.getTagStructureContext().getAutoTaggingPointer(), Collections.<IRenderer>singletonList(rendererSubTreeRoot)); } ensureRootRendererNotNull().addChild(rendererSubTreeRoot); }
protected void createAndAddRendererSubTree(IElement element) { IRenderer rendererSubTreeRoot = element.createRendererSubTree(); LayoutTaggingHelper taggingHelper = initTaggingHelperIfNeeded(); if (taggingHelper != null) { taggingHelper.addKidsHint(pdfDocument.getTagStructureContext().getAutoTaggingPointer(), Collections.<IRenderer>singletonList(rendererSubTreeRoot)); } ensureRootRendererNotNull().addChild(rendererSubTreeRoot); }
/** * Creates {@code TagTreePointer} instance. After creation {@code TagTreePointer} points at the root tag. * <p> * The {@link PdfNamespace} for the new tags, which don't explicitly define namespace by the means of * {@link DefaultAccessibilityProperties#setNamespace(PdfNamespace)}, is set to the value returned by * {@link TagStructureContext#getDocumentDefaultNamespace()} on {@link TagTreePointer} creation. * See also {@link TagTreePointer#setNamespaceForNewTags(PdfNamespace)}. * </p> * @param document the document, at which tag structure this instance will point. */ public TagTreePointer(PdfDocument document) { tagStructureContext = document.getTagStructureContext(); setCurrentStructElem(tagStructureContext.getRootTag()); setNamespaceForNewTags(tagStructureContext.getDocumentDefaultNamespace()); }
private static IRoleMappingResolver resolveMappingToStandard(TagTreePointer taggingPointer) { TagStructureContext tagContext = taggingPointer.getDocument().getTagStructureContext(); PdfNamespace namespace = taggingPointer.getProperties().getNamespace(); return tagContext.resolveMappingToStandardOrDomainSpecificRole(taggingPointer.getRole(), namespace); }
private static IRoleMappingResolver resolveMappingToStandard(TagTreePointer taggingPointer) { TagStructureContext tagContext = taggingPointer.getDocument().getTagStructureContext(); PdfNamespace namespace = taggingPointer.getProperties().getNamespace(); return tagContext.resolveMappingToStandardOrDomainSpecificRole(taggingPointer.getRole(), namespace); }
private void tryFlushPageTags() { try { if (!getDocument().isClosing) { getDocument().getTagStructureContext().flushPageTags(this); } getDocument().getStructTreeRoot().savePageStructParentIndexIfNeeded(this); } catch (Exception ex) { throw new PdfException(PdfException.TagStructureFlushingFailedItMightBeCorrupted, ex); } }
private void removeTagUnavailableInPriorToOneDotFivePdf(TaggingHintKey taggingHintKey, LayoutTaggingHelper taggingHelper) { taggingHelper.replaceKidHint(taggingHintKey, taggingHelper.getAccessibleKidsHint(taggingHintKey)); PdfDocument pdfDocument = taggingHelper.getPdfDocument(); WaitingTagsManager waitingTagsManager = pdfDocument.getTagStructureContext().getWaitingTagsManager(); TagTreePointer tagPointer = new TagTreePointer(pdfDocument); if (waitingTagsManager.tryMovePointerToWaitingTag(tagPointer, taggingHintKey)) { waitingTagsManager.removeWaitingState(taggingHintKey); tagPointer.removeTag(); } if (finishForbidden.remove(taggingHintKey)) { taggingHintKey.setFinished(); } } }
private void removeTagUnavailableInPriorToOneDotFivePdf(TaggingHintKey taggingHintKey, LayoutTaggingHelper taggingHelper) { taggingHelper.replaceKidHint(taggingHintKey, taggingHelper.getAccessibleKidsHint(taggingHintKey)); PdfDocument pdfDocument = taggingHelper.getPdfDocument(); WaitingTagsManager waitingTagsManager = pdfDocument.getTagStructureContext().getWaitingTagsManager(); TagTreePointer tagPointer = new TagTreePointer(pdfDocument); if (waitingTagsManager.tryMovePointerToWaitingTag(tagPointer, taggingHintKey)) { waitingTagsManager.removeWaitingState(taggingHintKey); tagPointer.removeTag(); } if (finishForbidden.remove(taggingHintKey)) { taggingHintKey.setFinished(); } } }
private void addWidgetAnnotationToPage(PdfPage page, PdfAnnotation annot) { if (page.containsAnnotation(annot)) { return; } TagTreePointer tagPointer = null; boolean tagged = page.getDocument().isTagged(); if (tagged) { tagPointer = page.getDocument().getTagStructureContext().getAutoTaggingPointer(); //TODO attributes? tagPointer.addTag(StandardRoles.FORM); } page.addAnnotation(annot); if (tagged) { tagPointer.moveToParent(); } }
private void addWidgetAnnotationToPage(PdfPage page, PdfAnnotation annot) { if (page.containsAnnotation(annot)) { return; } TagTreePointer tagPointer = null; boolean tagged = page.getDocument().isTagged(); if (tagged) { tagPointer = page.getDocument().getTagStructureContext().getAutoTaggingPointer(); //TODO attributes? tagPointer.addTag(StandardRoles.FORM); } page.addAnnotation(annot); if (tagged) { tagPointer.moveToParent(); } }
/** * Moves page to new place in same document with all it tag structure * * @param pageNumber number of Page that will be moved * @param insertBefore indicates before which page new one will be inserted to */ public void movePage(int pageNumber, int insertBefore) { checkClosingStatus(); if (insertBefore < 1 || insertBefore > getNumberOfPages() + 1) { throw new IndexOutOfBoundsException(MessageFormatUtil.format(PdfException.RequestedPageNumberIsOutOfBounds, insertBefore)); } PdfPage page = getPage(pageNumber); if (isTagged()) { getStructTreeRoot().move(page, insertBefore); getTagStructureContext().normalizeDocumentRootTag(); } PdfPage removedPage = catalog.getPageTree().removePage(pageNumber); if (insertBefore > pageNumber) { --insertBefore; } catalog.getPageTree().addPage(insertBefore, removedPage); }
TagTreePointer tagPointer = getDocument().getTagStructureContext().removeAnnotationTag(annotation); if (tagPointer != null) { boolean standardAnnotTagRole = tagPointer.getRole().equals(StandardRoles.ANNOT)
protected void flushSingleRenderer(IRenderer resultRenderer) { Transform transformProp = resultRenderer.<Transform>getProperty(Property.TRANSFORM); if (!waitingDrawingElements.contains(resultRenderer)) { processWaitingDrawing(resultRenderer, transformProp, waitingDrawingElements); if (FloatingHelper.isRendererFloating(resultRenderer) || transformProp != null) return; } if (!resultRenderer.isFlushed() && null != resultRenderer.getOccupiedArea()) { // TODO Remove checking occupied area to be not null when DEVSIX-1001 is resolved. int pageNum = resultRenderer.getOccupiedArea().getPageNumber(); PdfDocument pdfDocument = document.getPdfDocument(); ensureDocumentHasNPages(pageNum, null); PdfPage correspondingPage = pdfDocument.getPage(pageNum); if (correspondingPage.isFlushed()) { throw new PdfException(PdfException.CannotDrawElementsOnAlreadyFlushedPages); } boolean wrapOldContent = pdfDocument.getReader() != null && pdfDocument.getWriter() != null && correspondingPage.getContentStreamCount() > 0 && correspondingPage.getLastContentStream().getLength() > 0 && !wrappedContentPage.contains(pageNum) && pdfDocument.getNumberOfPages() >= pageNum; wrappedContentPage.add(pageNum); if (pdfDocument.isTagged()) { pdfDocument.getTagStructureContext().getAutoTaggingPointer().setPageForTagging(correspondingPage); } resultRenderer.draw(new DrawContext(pdfDocument, new PdfCanvas(correspondingPage, wrapOldContent), pdfDocument.isTagged())); } }
protected void flushSingleRenderer(IRenderer resultRenderer) { Transform transformProp = resultRenderer.<Transform>getProperty(Property.TRANSFORM); if (!waitingDrawingElements.contains(resultRenderer)) { processWaitingDrawing(resultRenderer, transformProp, waitingDrawingElements); if (FloatingHelper.isRendererFloating(resultRenderer) || transformProp != null) return; } if (!resultRenderer.isFlushed() && null != resultRenderer.getOccupiedArea()) { // TODO Remove checking occupied area to be not null when DEVSIX-1001 is resolved. int pageNum = resultRenderer.getOccupiedArea().getPageNumber(); PdfDocument pdfDocument = document.getPdfDocument(); ensureDocumentHasNPages(pageNum, null); PdfPage correspondingPage = pdfDocument.getPage(pageNum); if (correspondingPage.isFlushed()) { throw new PdfException(PdfException.CannotDrawElementsOnAlreadyFlushedPages); } boolean wrapOldContent = pdfDocument.getReader() != null && pdfDocument.getWriter() != null && correspondingPage.getContentStreamCount() > 0 && correspondingPage.getLastContentStream().getLength() > 0 && !wrappedContentPage.contains(pageNum) && pdfDocument.getNumberOfPages() >= pageNum; wrappedContentPage.add(pageNum); if (pdfDocument.isTagged()) { pdfDocument.getTagStructureContext().getAutoTaggingPointer().setPageForTagging(correspondingPage); } resultRenderer.draw(new DrawContext(pdfDocument, new PdfCanvas(correspondingPage, wrapOldContent), pdfDocument.isTagged())); } }
TagTreePointer tagPointer = null; if (toTag) { tagPointer = canvas.getPdfDocument().getTagStructureContext().getAutoTaggingPointer(); tagPointer.setPageForTagging(canvas.getPage());
TagTreePointer tagPointer = null; if (toTag) { tagPointer = canvas.getPdfDocument().getTagStructureContext().getAutoTaggingPointer(); tagPointer.setPageForTagging(canvas.getPage());
/** * Removes page from the document by page number. * * @param pageNum the one-based index of the PdfPage to be removed */ public void removePage(int pageNum) { checkClosingStatus(); PdfPage removedPage = catalog.getPageTree().removePage(pageNum); if (removedPage != null) { catalog.removeOutlines(removedPage); removeUnusedWidgetsFromFields(removedPage); if (isTagged()) { getTagStructureContext().removePageTags(removedPage); } // TODO should we remove everything (outlines, tags) if page won't be removed in the end, because it's already flushed? wouldn't tags be also flushed? if (!removedPage.getPdfObject().isFlushed()) { removedPage.getPdfObject().remove(PdfName.Parent); removedPage.getPdfObject().getIndirectReference().setFree(); } dispatchEvent(new PdfDocumentEvent(PdfDocumentEvent.REMOVE_PAGE, removedPage)); } }