从网页/网页打印附件

  • 本文关键字:网页 打印 itext xpages
  • 更新时间 :
  • 英文 :


在我的应用程序中,我需要有一个打印功能,该功能将从Notes View打印文档,包括它们的附件(可能是图像,pdf,办公文档(作为单个有序文件。

根据我通过非邪恶假装搜索引擎发现的内容,我发现iText支持许多功能,包括合并pdf,转换为pdf和阅读流。

我不确定我的内部仅使用的应用程序是否属于 AGPL 许可证?

当它们允许我合并 pdf、文档转换和包含图像时,我还担心其他替代方案。

欢迎任何用于java代理,ssjs,java的示例代码。

下面是一个在 XPages 中使用服务器端 JavaScript 和 iText 生成 PDF 文件的示例。 iText 是一个 Java 类库,可以从 SSJS 调用。 当然,它可以用Java编写,也可以简单地从XPage调用。 这是一个 SSJS 解决方案。在 XPagebeforeRenderResponse事件中:

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。

最好的解决方案是在无头模式下使用 Open Office 并将所有文件转换为 PDF。

支持最常见的文件(Office 文档等(。

对于 PDF 操作(合并、拆分等(PDFBox是一个很好的选择。

POI4XPages也许能够帮助附件和组合它们等。我认为您的大问题是如何使 Domino 文档采用正确的格式进行打印 (pdf( 并保持适当的渲染。Native Notes 文档不是 html/css。因此,它们必须呈现为 html/css,然后覆盖为 pdf 以与您的其他附件相结合。类中有一些方法可以生成 html。

我使用 jspdf 从 XPages 生成 PDF 文档,尽管是通过 CSJS 调用的(使用几个 JSON RPC 服务来获取数据(。