在我的应用程序中,我需要具有一种打印功能,该功能将从Notes视图中将包含附件(可以是图像,pdf,office文档)的文档作为单个有序文件进行打印。
根据我在一个非邪恶的伪装搜索引擎中发现的信息,我发现iText支持许多功能,包括合并pdf,转换为pdf以及阅读流。
我不确定我内部仅使用的应用程序是否会受到AGPL许可?
当它们允许我合并pdf,文档转换并包括图像时,我还关注其他选择。
欢迎使用Java代理ssjs和Java的任何示例代码。
答案 0 :(得分:2)
这是在XPages中使用服务器端JavaScript和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,而不是将其下载为文件。
如果您已经开发了HTML页面,也可以使用iText将HTML页面转换为PDF:https://developers.itextpdf.com/content/itext-7-converting-html-pdf-pdfhtml
PDF或图像的文件附件可以附加iText。要转换Office文档,电子表格等,可能需要另一个Java库才能转换为PDF,然后可以使用iText附加新的PDF。
答案 1 :(得分:1)
最好的解决方案是在无头模式下使用Open Office,并将所有文件转换为PDF。
支持大多数常用文件(Office文档等)。
对于PDF操作(合并,拆分等),PDFBox是一个很好的选择。
答案 2 :(得分:0)
POI4XPages可能能够帮助处理附件并将它们组合在一起,等等。我认为您的主要问题是如何将Domino文档转换为正确的格式以进行打印(pdf)并保持正确的呈现。 Native Notes文档不是html / css。因此,必须将它们渲染为html / css,然后将其转换为pdf以与您的其他附件结合使用。 DominoDocument类中有一些生成html的方法。
答案 3 :(得分:0)
我曾经使用jspdf从XPages生成PDF文档,尽管它是通过CSJS调用的(使用几个JSON RPC服务来获取数据)。