Распечатать вложения из веб / xpages - PullRequest
0 голосов
/ 24 октября 2018

В моих приложениях мне нужна функция печати, которая будет печатать документы из представления Notes, включая их вложения (могут быть изображения, PDF-файлы, офисные документы) в виде одного упорядоченного файла.

Из того, что яЯ обнаружил, что поисковая система, не притворяющая зла, обнаружила, что iText поддерживает множество функций, включая объединение PDF, преобразование в PDF и чтение потоков.

Я не уверен, попадет ли мое внутреннее только используемое приложение в AGPLлицензия?.

Я также касаюсь других альтернатив, когда они позволяют мне объединять pdf, конвертировать документы и включать изображения.

Любой пример кода для агентов java, ssjs, java приветствуется.

Ответы [ 4 ]

0 голосов
/ 07 ноября 2018

Я использовал jspdf для генерации PDF-документов из XPages, хотя и вызываемых через CSJS (используя пару служб JSON RPC для получения данных).

0 голосов
/ 24 октября 2018

Лучшее решение - использовать Open Office в автономном режиме и конвертировать все файлы в PDF.

Поддерживаются наиболее распространенные файлы (документы Office и т. Д.).

Для операций PDF (объединение, разделение и т. д.) PDFBox - отличная альтернатива.

0 голосов
/ 24 октября 2018

Вот пример использования серверного JavaScript в XPages с iText для генерации PDF-файлов.iText - это библиотека классов Java, и ее можно вызывать из SSJS.Конечно, это может быть написано на Java и просто вызываться из XPage.Это решение SSJS.В событии XPage beforeRenderResponse:

importPackage(com.itextpdf);   // put the itext jar file in the Code/Jars folder
importPackage(java.io);
importPackage(java.net);
importPackage(javax.imageio);
importPackage(sun.misc);
importPackage(java.lang);

//Initialize
var hostname = context.getUrl().toString().split(facesContext.getExternalContext().getRequest().getRequestURI())[0];

var con = facesContext.getExternalContext();
var response:com.ibm.xsp.webapp.XspHttpServletResponse = con.getResponse();

var outfilename = "MyPDF.pdf";

// set response headers for browser to recognize data
// deliver uncached PDF
response.setContentType("application/pdf");
response.setHeader("Cache-Control", "no-cache");

response.setDateHeader("Expires", -1);
response.setHeader( "Content-Disposition", "inline; filename="+outfilename );

// create new PDF
var newPDF:com.itextpdf.text.Document = new com.itextpdf.text.Document(com.itextpdf.text.PageSize.LEGAL, 36, 36, 7, 10);

// Setup the Output Stream for the PDF
var outputstream = response.getOutputStream();
var writer = com.itextpdf.text.pdf.PdfWriter.getInstance(newPDF, outputstream);
var htmlWorker = new com.itextpdf.text.html.simpleparser.HTMLWorker(newPDF);

// Open the PDF and write the PDF header info
newPDF.open();

// set PDF meta data
newPDF.addAuthor("Eric Numeric");
newPDF.addCreationDate();
newPDF.addCreator("My Company, Inc.");
newPDF.addTitle("PDF Title");

// Text styles examples
var fontBOLD    = com.itextpdf.text.FontFactory.getFont("Consolas", 12, com.itextpdf.text.Font.BOLD);
var fontLABEL   = com.itextpdf.text.FontFactory.getFont("Consolas", 10, com.itextpdf.text.Font.BOLD, com.itextpdf.text.BaseColor.GRAY);
var fontBOLD8   = com.itextpdf.text.FontFactory.getFont("Consolas", 8, com.itextpdf.text.Font.BOLD);
var totrowFont  = com.itextpdf.text.FontFactory.getFont("Consolas", 7, com.itextpdf.text.Font.BOLD, com.itextpdf.text.BaseColor.BLUE);
var parabreak   = new com.itextpdf.text.Paragraph(" ");
var hiliteG     = new com.itextpdf.text.BaseColor(202, 255, 211, 1);  com.itextpdf.text.BaseColor.setValue(202, 255, 211, 1)
var bgcolor:com.itextpdf.text.BaseColor  = com.itextpdf.text.html.WebColors.getRGBColor("#CAFFD3");


// Get logo image - scale down
var image:com.itextpdf.text.Image = com.itextpdf.text.Image.getInstance(new URL(hostname + "/img/Logo.png")); 

image.scaleToFit(900, 40);
//print("scaled image");

newPDF.add(parabreak);       
newPDF.add(parabreak);  

//Create a table with 2 cells, width = 100%
var hdrtable = new com.itextpdf.text.pdf.PdfPTable(2);      // 2 columns.
hdrtable.setWidthPercentage(100);

// Logo
var cell1 = new com.itextpdf.text.pdf.PdfPCell(image); 
cell1.setBorder(com.itextpdf.text.Rectangle.NO_BORDER);     // removes border
hdrtable.addCell(cell1);

var cell2 = new com.itextpdf.text.pdf.PdfPCell(new com.itextpdf.text.Paragraph("Hello"));
cell2.setHorizontalAlignment(com.itextpdf.text.Element.ALIGN_CENTER);
cell2.setVerticalAlignment(com.itextpdf.text.Element.ALIGN_BOTTOM);
hdrtable.addCell(cell2);

// add table to PDF doc
newPDF.add(hdrtable);

// close PDF doc
newPDF.close();

// close writer
writer.close();

// complete response
facesContext.responseComplete();

Когда Xpage открыт, PDF-файл должен отображаться с помощью средства просмотра PDF браузера, а не загружаться в виде файла.

Вы также можетеИспользуйте iText для преобразования HTML-страниц в PDF, если у вас уже есть разработанные HTML-страницы: https://developers.itextpdf.com/content/itext-7-converting-html-pdf-pdfhtml

К вложенным файлам PDF-файлов или изображений можно добавить iText.Для преобразования документов Office, электронных таблиц и т. Д. Может потребоваться другая библиотека Java для преобразования в PDF - затем вы можете добавить новый PDF-файл, используя iText.

0 голосов
/ 24 октября 2018

POI4XPages может помочь с вложениями и их объединением и т. Д. Я думаю, что ваша большая проблема заключается в том, как перевести документ Domino в правильный формат для печати (pdf) и сохранить правильную визуализацию.Документы Native Notes не являются HTML / CSS.Таким образом, они должны быть преобразованы в html / css и затем помещены в pdf для объединения с другими вашими вложениями.В классе DominoDocument есть несколько методов для генерации html.

...