private Document createDocument(Page page, LinkRenderingDetails linkDetails, DecorationPolicy decoration) { Document xhtml; ContentTree tree = new ContentTree(); tree.addRootNode(new ContentNode(page)); try { xhtml = intermediateHtmlBuilder.buildHtml(tree, page.getSpace(), linkDetails, decoration); } catch (ImportExportException e) { log.error("error build xml dom", e); throw new RuntimeException(e); } return xhtml; }
/** * Render each of the nodes (Pages) in the supplied List to an HTML formatted String. * * @param nodes The list of nodes to be rendered to HTML * @param tocBuilder the class to be informed as nodes relevant to the table of contents are processed * @param bookmarksBuilder the class to be informed as nodes relevant to the bookmarks are processed * @param level the level in the ContentTree currently being processed. * @param fullContentTree the full content tree from which the nodes being rendered are taken. * @param progress a class interested in progress updates about the process * @return a list of the Strings where each String is an HTML version of the page content for each note. */ private List<String> renderContentTreeNodes(List<ContentNode> nodes, TocBuilder tocBuilder, BookmarksBuilder bookmarksBuilder, int level, ContentTree fullContentTree, PdfExportProgressMonitor progress) { List<String> renderedPagesContent = new ArrayList<>(); for (ContentNode node : nodes) { Page page = node.getPage(); String renderedHtml = renderToHtml(page, fullContentTree); renderedPagesContent.add(renderedHtml); progress.completedExportedHtmlConversionForPage(String.valueOf(page.getId()), page.getTitle()); tocBuilder.addEntry(level, page.getTitle()); bookmarksBuilder.beginEntry(page.getTitle()); List<ContentNode> children = node.getChildren(); if (children != null && !children.isEmpty()) { renderedPagesContent.addAll(renderContentTreeNodes(children, tocBuilder, bookmarksBuilder, level + 1, fullContentTree, progress)); } bookmarksBuilder.endEntry(); } return renderedPagesContent; }
private void populateLinkFixer(LinkFixer linkFixer, ContentTree contentTree, Collection<Page> additionalInternalPages) { List<ContentNode> contentNodes = contentTree.getAllContentNodes(); for (ContentNode node : contentNodes) { Page p = node.getPage(); linkFixer.addPage(p.getIdAsString(), p.getTitle()); } additionalInternalPages.forEach(p -> linkFixer.addPage(p.getIdAsString(), p.getTitle())); }
private File generatePdfExportFromImportExportManager() throws ImportExportException { final Page thisPage = getPage(); final DefaultExportContext context = new DefaultExportContext(); context.setExportScope(ExportScope.PAGE); context.setType(ImportExportManager.TYPE_PDF); context.addWorkingEntity(thisPage); context.setExportComments(false); context.setExportAttachments(false); context.setExportHierarchy(false); context.setUser(AuthenticatedUserThreadLocal.get()); final ContentTree contentTree = new ContentTree(); contentTree.addRootNode(new ContentNode(thisPage)); context.setContentTree(contentTree); return new File(importExportManager.exportAs(context, new ProgressMeter())); }
private PdfNode createPdfTreeNode(ContentNode contentNode, String contextPath, PdfExportProgressMonitor progress, Collection<Page> internalPages, SpaceExportMetrics spaceExportMetrics, PageExportMetrics pageExportMetrics) throws ImportExportException { spaceExportMetrics.getPageExportMetrics().add(pageExportMetrics); final Page page = contentNode.getPage(); progress.performingHtmlToPdfConversionForPage(page.getTitle()); final RenderedPdfFile file = createPdf(page, contextPath, new LinkRenderingDetails(internalPages, NORMALISE), page.getTitle(), pageExportMetrics, headerAndFooter()); PdfNode node = new PdfNode(page.getTitle(), file); for (ContentNode child : contentNode.getChildren()) { final PageExportMetrics childInfo = new PageExportMetrics(); node.addChild(createPdfTreeNode(child, contextPath, progress, internalPages, spaceExportMetrics, childInfo)); } return node; }
private File doCreatePdfForPage(User user, AbstractPage page, String contextPath) throws ImportExportException { exportPermissionChecker.checkAuthorization(user, page); Document xhtml; if (page instanceof Page) { ContentTree tree = newContentTree(); tree.addRootNode(new ContentNode((Page) page)); xhtml = intermediateHtmlBuilder.buildHtml(tree, page.getSpace(), LinkRenderingDetails.anchors(), DecorationPolicy.none()); } else if (page instanceof BlogPost) { xhtml = intermediateHtmlBuilder.buildHtml((BlogPost) page); } else { throw new IllegalArgumentException("Only pages and blog post are supported"); } String spaceKey = getSpaceKeyForExportFileName(page.getSpaceKey()); File pdf; try { String filename = spaceKey + "-" + ((page.getTitle() == null) ? page.getId() : page.getTitle().replaceAll("\\s", "")); if (!GeneralUtil.isSafeTitleForFilesystem(filename)) { filename = spaceKey + "-" + page.getId(); } pdf = flyingPdfDocumentConverter.convertXhtmlToPdf(filename, xhtml, contextPath); } catch (ImportExportException e) { if (e.getCause() instanceof FileNotFoundException) { String filename = spaceKey + "-" + page.getId(); pdf = flyingPdfDocumentConverter.convertXhtmlToPdf(filename, xhtml, contextPath); } else { throw e; } } return pdf; }