Export web content as PDF

<%@page import="sun.awt.RepaintArea"%>
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui" %>
<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet" %>
<%@ taglib uri="http://liferay.com/tld/security" prefix="liferay-security" %>
<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme" %>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %>
<%@ taglib uri="http://liferay.com/tld/util" prefix="liferay-util" %>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ page import="javax.portlet.PortletPreferences" %>
<%@ page import="com.liferay.portal.kernel.util.Validator" %>
<%@ page import="com.liferay.portal.kernel.util.ParamUtil" %>
<%@ page import="com.liferay.portlet.PortletPreferencesFactoryUtil" %>
<%@ page import="com.liferay.portal.util.PortalUtil" %>
<%@ page import="com.liferay.portal.kernel.dao.search.ResultRow" %>
<%@ page import="com.liferay.portal.kernel.util.ParamUtil" %>
<%@ page import="com.liferay.portal.kernel.util.WebKeys" %>
<%@ page import="com.liferay.portal.model.User" %>
<%@ page import="com.liferay.portal.service.UserLocalServiceUtil" %>
<%@ page import="javax.portlet.PortletURL" %>
<%@page import="javax.portlet.WindowState" %>
<%@page import="java.text.Format"%>
<%@page import="com.liferay.portal.kernel.util.FastDateFormatFactoryUtil"%>
<%@page import="com.liferay.portal.kernel.util.GetterUtil"%>
<%@page import="com.liferay.portal.kernel.util.StringPool"%>
<%@page import="java.util.*"%>
<%@page import="com.liferay.portal.kernel.util.OrderByComparator"%>
<%@page import="com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil"%>
<%@page import="com.liferay.portlet.journal.model.JournalArticle"%>
<%@page import="com.liferay.portal.kernel.language.LanguageUtil"%>
<%@page import="com.liferay.portal.kernel.util.HtmlUtil"%>
<%@page import="com.liferay.portal.model.Group"%>
<%@page import="com.liferay.portal.kernel.servlet.SessionMessages"%>
<%@page import="com.liferay.portal.kernel.portlet.LiferayWindowState"%>
<%@page import="javax.portlet.ActionRequest"%>
<%@page import="com.liferay.portal.kernel.util.WebKeys"%>
<%@page import="com.liferay.portal.theme.ThemeDisplay"%>
 
<portlet:defineObjects />
<liferay-theme:defineObjects />
 
<portlet:resourceURL var="exportWebContentURL">
</portlet:resourceURL>
 
<h4>Midland National : Journal Content Article</h4>
<a href="<%=exportWebContentURL%>">Download Click Here</a>
 
 
<%
Group group = themeDisplay.getScopeGroup();
boolean isPrivate = themeDisplay.getLayout().isPrivateLayout();
String friendlyURL = PortalUtil.getGroupFriendlyURL(group, isPrivate, themeDisplay);
System.out.println("friendlyURL :::::: "+friendlyURL);
%>
<%-- 
<%
 
//long groupId = ParamUtil.getLong(renderRequest,"sitesSelectBox",0);
long groupId = 23531;
List<JournalArticle> articleList=null;
 
if(groupId!=0){
articleList=JournalArticleLocalServiceUtil.getArticles(groupId);
}
 
%>
 
 
<aui:form action="<%=exportWebContentURL%>" method="post" name="exportWebContentForm" target="_blank">
<aui:layout>
<aui:column>
<aui:select label="Sites" name="sitesSelectBox" id="sitesSelectBox">
<aui:option label="Select Sites"  value="-1" />
    <aui:option label="Global"  value="<%=themeDisplay.getCompanyGroupId()%>" />
<%
List<Group> mySites = user.getMySites();
for (int i = 0; i < mySites.size(); i++) {
Group group = mySites.get(i);
String groupName = HtmlUtil.escape(group.getDescriptiveName(locale));
if (group.isUser()) {
groupName = LanguageUtil.get(pageContext, "my-site");
}
%>
<aui:option label="<%= groupName %>"  value="<%= group.getGroupId() %>" />
<%
}
%>
</aui:select>
</aui:column>
</aui:layout> 
<c:if test='<%=articleList!=null && !articleList.isEmpty()%>'>
<aui:select label="Web Content Article" name="webContentSelectBox" id="webContentSelectBox">
    <aui:option label="global"  value="<%= themeDisplay.getCompanyGroupId() %>" />
<%
for (JournalArticle artticle:articleList) {
%>
<aui:option label="<%=artticle.getTitleCurrentValue() %>"  value="<%= artticle.getArticleId()%>" />
<%
}
%>
</aui:select>
</c:if>
<c:if test='<%=articleList==null || articleList.isEmpty()%>'>
<h2 style="color:red;">There is no articles for selected group..</h2>
</c:if>
<aui:layout>
<aui:column>
<aui:button type="submit" value="submit" name="submit"></aui:button>
</aui:column>
</aui:layout>
 
<aui:script>
AUI().use('aui-base', function(A) {
A.one('#<portlet:namespace />sitesSelectBox').on('change', function(event){ 
A.one('#<portlet:namespace />exportWebContentForm').set('target','_self');
submitForm(document.<portlet:namespace />exportWebContentForm, "<portlet:renderURL></portlet:renderURL>")
});
});
</aui:script>
</aui:form>
 --%>
=======================================================================
package com.export.jouranlcontent;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.List;
 
import javax.portlet.PortletException;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;
 
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.language.LanguageUtil;
import com.liferay.portal.kernel.util.ArrayUtil;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.PropsUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.model.Group;
import com.liferay.portal.model.User;
import com.liferay.portal.model.UserGroup;
import com.liferay.portal.model.UserGroupGroupRole;
import com.liferay.portal.service.ClassNameLocalServiceUtil;
import com.liferay.portal.service.GroupLocalServiceUtil;
import com.liferay.portal.service.UserGroupGroupRoleLocalServiceUtil;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.portal.util.PortalUtil;
import com.liferay.portlet.documentlibrary.model.DLFolder;
import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil;
import com.liferay.portlet.expando.model.ExpandoColumn;
import com.liferay.portlet.expando.model.ExpandoTable;
import com.liferay.portlet.expando.model.ExpandoValue;
import com.liferay.portlet.expando.service.ExpandoColumnLocalServiceUtil;
import com.liferay.portlet.expando.service.ExpandoTableLocalServiceUtil;
import com.liferay.portlet.expando.service.ExpandoValueLocalServiceUtil;
import com.liferay.portlet.journal.model.JournalArticleDisplay;
import com.liferay.portlet.journalcontent.util.JournalContentUtil;
import com.liferay.util.bridges.mvc.MVCPortlet;
import com.lowagie.text.DocumentException;
 
import org.w3c.dom.Document;
import org.w3c.tidy.Tidy;
import org.xhtmlrenderer.pdf.ITextRenderer;
public class ExportJorinalContentAction extends MVCPortlet {
 
@Override
public void doView(javax.portlet.RenderRequest renderRequest, javax.portlet.RenderResponse renderResponse) throws IOException ,PortletException {
 
try {
boolean showPreview = false;
String allowedUserGroups = PropsUtil.get("allowed.usergroups.webcontent.preview");
ThemeDisplay themeDisplay = (ThemeDisplay) renderRequest.getAttribute(WebKeys.THEME_DISPLAY);
 
System.out.println("allowedUserGroups from portal-ext.properties :"+allowedUserGroups);
System.out.println("User is signed in :"+themeDisplay.isSignedIn());
 
if(allowedUserGroups != null && themeDisplay.isSignedIn()){
String[] userGroupsArray = allowedUserGroups.split(",");
List<String> allowedUserGroupsList = Arrays.asList(userGroupsArray);
System.out.println("allowedUserGroupsList "+allowedUserGroupsList);
 
User user= themeDisplay.getUser();
List<UserGroup> groups = user.getUserGroups();
for (UserGroup userGroup : groups) {
String userGroupName = userGroup.getName();
System.out.println("userGroupName "+userGroupName);
if(allowedUserGroupsList.contains(userGroupName)){
showPreview = true;
break;
}
}
}
System.out.println("showPreview "+showPreview);
} catch (Exception e) {
e.printStackTrace();
}finally{
super.doView(renderRequest, renderResponse);
}
};
 
@Override
public void serveResource(
ResourceRequest resourceRequest, ResourceResponse resourceResponse)
throws IOException, PortletException {
String articleId=ParamUtil.getString(resourceRequest,"webContentSelectBox");
ThemeDisplay themeDisplay = (ThemeDisplay)resourceRequest.getAttribute(WebKeys.THEME_DISPLAY);
long groupId =ParamUtil.getLong(resourceRequest,"sitesSelectBox");
try { 
//49787 49950 
JournalArticleDisplay articleDisplay = JournalContentUtil.getDisplay(23531, "51016", "", LanguageUtil.getLanguageId(resourceRequest),themeDisplay);
//JournalArticleDisplay articleDisplay = JournalContentUtil.getDisplay(groupId, articleId, "", LanguageUtil.getLanguageId(resourceRequest),themeDisplay);
resourceResponse.reset();
resourceResponse.setContentType("application/pdf");
resourceResponse.setProperty("Content-disposition", "attachment; filename=\"" + articleDisplay.getTitle().concat(StringPool.PERIOD).concat("pdf") + "\"");
OutputStream outputStream = resourceResponse.getPortletOutputStream();
String articleHtml = "<!DOCTYPE HTML><html><body>"+articleDisplay.getContent()+"</body></html>";
articleHtml = articleHtml.replaceAll("src=\"/documents", "src=\""+themeDisplay.getPortalURL()+"/documents");
System.out.println(articleHtml);
Tidy tidy = new Tidy();
InputStream is = new ByteArrayInputStream(articleHtml.getBytes());
Document doc = tidy.parseDOM(is, null);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(doc, null);
renderer.layout();
renderer.createPDF(outputStream);
 
} catch (DocumentException e) {
e.printStackTrace();
}
 
}
}
 
0