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; }
exportPermissionChecker.checkAuthorization(user, space); if (contentTree.size() == 1) { final Page page = Iterables.getOnlyElement(contentTree.getPages()); final File outputFile = createPdf( page, progress.completedCalculationOfPdfPages(contentTree.size()); progress.beginHtmlToPdfConversion(); if (contentTree.getPages() != null) { for (ContentNode topLevel : contentTree.getRootNodes()) { final PageExportMetrics rootPageInfo = new PageExportMetrics(); spaceExportMetrics.getPageExportMetrics().add(rootPageInfo); pagesForest.add(createPdfTreeNode(topLevel, contextPath, progress, contentTree.getPages(), spaceExportMetrics, rootPageInfo));
protected ContentTree newContentTree() { return new ContentTree(); }
@Override protected void doInTransactionWithoutResult(TransactionStatus status) { AuthenticatedUserThreadLocal.setUser(remoteUser); RequestCacheThreadLocal.getRequestCache().put(RequestCacheThreadLocal.CONTEXT_PATH_KEY, contextPath); PdfExportProgressMonitor monitor = flyingPdfExporterService.createProgressMonitor(progress); File pdfFile; try { monitor.beginCalculationOfContentTree(); Space space = spaceManager.getSpace(spaceId); ContentTree contentTree = importExportManager.getContentTree(remoteUser, space); if (!contentToBeExported.isEmpty()) { contentTree.filter(contentToBeExported); } monitor.completedCalculationOfContentTree(contentTree.size()); pdfFile = flyingPdfExporterService.createPdfForSpace(remoteUser, space, contentTree, monitor, contextPath, new SpaceExportMetrics()); downloadPath = importExportManager.prepareDownloadPath(pdfFile.getAbsolutePath()); gateKeeper.addKey(downloadPath, remoteUser); downloadPath = contextPath + downloadPath; monitor.completed(downloadPath); } catch (Exception ex) { log.error("Error during PDF export", ex); String exceptionMessage = ex.getMessage(); if (StringUtils.isBlank(exceptionMessage)) exceptionMessage = ex.getClass().getName(); monitor.errored(exceptionMessage); } } });
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; }
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())); }
@Override public File createPdfForSpace(User user, Space space, ContentTree contentTree, PdfExportProgressMonitor progress, String contextPath, SpaceExportMetrics spaceExportMetrics) throws ImportExportException { spaceExportMetrics.getEnvironmentInfo().setSpaceKey(space.getKey()); spaceExportMetrics.setConfluencePages(contentTree.size()); spaceExportMetrics.getEnvironmentInfo().setExportScope(ExportScope.SPACE); fillEnvironmentData(space, spaceExportMetrics.getEnvironmentInfo()); final long startTime = System.currentTimeMillis(); try { final File result = delegate.createPdfForSpace(user, space, contentTree, progress, contextPath, spaceExportMetrics); spaceExportMetrics.getExportResults().setExportStatus(ExportStatus.OK); return result; } catch (Exception e) { setGenericError(spaceExportMetrics.getExportResults()); throw e; } finally { spaceExportMetrics.setTotalTime((int) (System.currentTimeMillis() - startTime)); sendToAnalytics(new PdfExportAnalyticEvent(spaceExportMetrics)); } }
@Override public Document buildHtml(ContentTree contentTree, Space space, LinkRenderingDetails linkRendering, DecorationPolicy decoration, PdfExportProgressMonitor progress) throws ImportExportException { TocBuilder tocBuilder = new TocBuilder(); BookmarksBuilder bookmarksBuilder = new BookmarksBuilder(); List<String> pageHtml = renderContentTreeNodes(contentTree.getRootNodes(), tocBuilder, bookmarksBuilder, 0, contentTree, progress); LinkFixer linkFixer = new LinkFixer(space.getKey(), settingsManager.getGlobalSettings().getBaseUrl(), linkRendering.getLinkStrategy()); populateLinkFixer(linkFixer, contentTree, linkRendering.getInternalPages()); return buildHtml(pageHtml, space, decoration, tocBuilder, bookmarksBuilder, linkFixer); }
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())); }