--- /dev/null
+/*******************************************************************************\r
+ * Copyright (c) 2012 Association for Decentralized Information Management in\r
+ * Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ * VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.document;\r
+\r
+import java.io.BufferedInputStream;\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.net.URL;\r
+\r
+import org.eclipse.mylyn.wikitext.core.parser.MarkupParser;\r
+import org.eclipse.mylyn.wikitext.mediawiki.core.MediaWikiLanguage;\r
+import org.simantics.Simantics;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.utils.Logger;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.utils.FileUtils;\r
+import org.simantics.utils.ui.BundleUtils;\r
+import org.simantics.wiki.ui.editor.IExportable;\r
+\r
+import com.lowagie.text.Document;\r
+import com.lowagie.text.DocumentException;\r
+import com.lowagie.text.PageSize;\r
+import com.lowagie.text.Utilities;\r
+import com.lowagie.text.pdf.PdfContentByte;\r
+import com.lowagie.text.pdf.PdfImportedPage;\r
+import com.lowagie.text.pdf.PdfReader;\r
+import com.lowagie.text.pdf.PdfWriter;\r
+\r
+public class Exportable implements IExportable {\r
+\r
+ final private String html;\r
+ final private DocumentSettings settings;\r
+\r
+ private static final String DEFAULT_CSS;\r
+ public static final String DEFAULT_MODEL_CSS;\r
+\r
+ private static String getBundleFileContents(String path, String defaultValue) {\r
+ URL url = BundleUtils.find(Activator.getContext().getBundle(), path);\r
+ if (url == null)\r
+ return defaultValue;\r
+ try (InputStream in = url.openStream()) {\r
+ return FileUtils.getContents(in);\r
+ } catch (IOException e) {\r
+ Logger.defaultLogError(e);\r
+ return defaultValue;\r
+ }\r
+ }\r
+\r
+ static {\r
+ DEFAULT_CSS = getBundleFileContents("simantics-wiki-documents.css", "");\r
+ DEFAULT_MODEL_CSS = getBundleFileContents("simantics-wiki-documents-default-model.css", "");\r
+ }\r
+ \r
+ public Exportable(ReadGraph graph, Resource res, String wiki, String css, DocumentSettings settings, boolean print) {\r
+\r
+ try {\r
+ wiki = DocumentDialect.INSTANCE.apply(graph, res, wiki);\r
+ } catch (DatabaseException e) {\r
+ Logger.defaultLogError(e);\r
+ }\r
+ \r
+ this.settings = settings;\r
+ \r
+ MarkupParser markupParser = new MarkupParser();\r
+ MediaWikiLanguage language = new MediaWikiLanguage();\r
+ markupParser.setMarkupLanguage(language);\r
+ String html = markupParser.parseToHtml(wiki);\r
+ \r
+ String width = "width:" + (210-settings.marginLeft-settings.marginRight) + "mm;";\r
+\r
+ if(print) {\r
+ html = html.replace("<body>", "<body style=\"background-color:#fff\"><div style=\"background-color:#FFF;" + width + "\">");\r
+ html = html.replace("</body>", "</div></body>");\r
+ } else {\r
+ String div1 = "margin-left:3mm;margin-top:3mm;background-color:#FFF;width:210mm;"; \r
+ String div2 = "background-color:#FFF;width:210mm;padding-top:" + settings.marginTop + "mm;";\r
+ String div3 = "overflow-x:hidden;margin-left:" + settings.marginLeft + "mm;background-color:#FFF;" + width; \r
+ html = html.replace("<body>", "<body><div style=\"" + div1 + "\"><div style=\"" + div2 + "\"><div style=\"" + div3 + "\">");\r
+ html = html.replace("</body>", "</div></div></div></body>");\r
+ }\r
+ \r
+ html = html.replace("<td>", "<td><div>");\r
+ html = html.replace("<th>", "<th><div>");\r
+ html = html.replace("</td>", "</div></td>");\r
+ html = html.replace("</th>", "</div></th>");\r
+ html = html.replace("</head>", "<style type=\"text/css\">" + DEFAULT_CSS + css + "</style></head>");\r
+ \r
+ this.html = html;\r
+ \r
+ }\r
+ \r
+ public String getHTML() {\r
+ return html;\r
+ }\r
+\r
+ @Override\r
+ public void export(Document document, PdfWriter writer) throws DocumentException {\r
+\r
+ File temp = Simantics.getTempfile("wikiPdfExport", "pdf");\r
+ try {\r
+ \r
+ temp.getParentFile().mkdirs();\r
+ PhantomJSDriver.print(html, settings, temp);\r
+ \r
+ PdfContentByte cb = writer.getDirectContent();\r
+ PdfReader reader = new PdfReader(new BufferedInputStream(new FileInputStream(temp)));\r
+ for (int i = 1; i <= reader.getNumberOfPages(); i++) {\r
+ document.setPageSize(PageSize.A4);\r
+ document.newPage();\r
+ //import the page from source pdf\r
+ PdfImportedPage page = writer.getImportedPage(reader, i);\r
+ //add the page to the destination pdf\r
+ float pts = Utilities.millimetersToPoints(10);\r
+ cb.addTemplate(page, pts, pts);\r
+ }\r
+\r
+ } catch (IOException e) {\r
+\r
+ throw new DocumentException(e);\r
+ \r
+ }\r
+\r
+ }\r
+\r
+}
\ No newline at end of file