【问题标题】:Print attachments from web/xpages从 web/xpages 打印附件
【发布时间】:2018-10-24 11:56:55
【问题描述】:

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

从我通过一个非邪恶的伪装搜索引擎发现,我发现 iText 支持许多功能,包括 pdf 的合并、转换为 pdf 和阅读流。

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

我还关注其他允许我合并 pdf、文档转换和包含图像的替代方案。

欢迎任何 java 代理、ssjs、java 的示例代码。

【问题讨论】:

  • 要了解您的内部应用程序是否属于 AGPL 许可,请联系 iText Software:itextpdf.com/contact。 IANAL 但我的直觉是,只要您的最终用户有一种简单的方法来访问您的应用程序的源代码,那么您很可能会很顺利。在您的情况下,您的最终用户只是您公司的员工。因此,如果接待员使用您的应用程序,那么接待员应该能够访问源代码。
  • 索取示例代码,但没有展示您自己尝试过的内容,这在 Stack Overflow 上是非常不受欢迎的。
  • 如果您不喜欢或被允许在公共网站上发布应用程序的完整源代码,我绝不会使用 AGPL 许可
  • 我也不敢

标签: itext xpages


【解决方案1】:

这是一个在 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。

【讨论】:

    【解决方案2】:

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

    支持大多数常见文件(Office 文档等)。

    对于 PDF 操作(合并、拆分等),PDFBox 是一个不错的选择。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-02
          • 2020-09-04
          • 1970-01-01
          • 1970-01-01
          • 2015-06-06
          相关资源
          最近更新 更多