- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在java中集成开放式办公室。我正在做的是创建一个文档,并希望以 pdf 格式获取该文档作为 jsp 响应。但我无法做到这一点。我能够创建一个空白的开放式办公文档并在其中填写所需的文本。然后我希望每当这个 jsp 运行时我们都会得到该文档作为 pdf 格式的响应。
代码是
<%@page import="com.sun.star.text.XParagraphCursor"%>
<%@page import="java.io.IOException"%>
<%@page import="org.apache.commons.io.FileUtils"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="com.sun.star.beans.PropertyValue"%>
<%@page import="com.sun.star.beans.XPropertySet"%>
<%@page import="com.sun.star.comp.helper.Bootstrap"%>
<%@page import="com.sun.star.frame.XComponentLoader"%>
<%@page import="com.sun.star.frame.XDesktop"%>
<%@page import="com.sun.star.frame.XStorable"%>
<%@page import="com.sun.star.lang.XComponent"%>
<%@page import="com.sun.star.lang.XMultiComponentFactory"%>
<%@page import="com.sun.star.text.XText"%>
<%@page import="com.sun.star.text.XTextDocument"%>
<%@page import="com.sun.star.uno.UnoRuntime"%>
<%@page import="com.sun.star.uno.XComponentContext"%>
<%@page import="com.sun.star.util.XReplaceDescriptor"%>
<%@page import="com.sun.star.util.XReplaceable"%>
<%@page import="ooo.connector.BootstrapSocketConnector"%>
<%@page import="com.sun.star.text.XText"%>
<%@page import="com.sun.star.text.XTextRange"%>
<%@page import="com.sun.star.lang.XMultiServiceFactory"%>
<%@page import="com.sun.star.text.XTextTable"%>
<%@page import="com.sun.star.table.XCellRange"%>
<%@page import="com.sun.star.table.XCell"%>
<%@page import="com.sun.star.util.XCloseable"%>
<%@page import="com.sun.star.text.XTextCursor"%>
<!DOCTYPE html>
<%
// Initialise
String oooExeFolder = "C:/Program Files/OpenOffice 4/program/";
XComponentContext xContext = BootstrapSocketConnector.bootstrap(oooExeFolder);
XMultiComponentFactory xMCF = xContext.getServiceManager();
Object oDesktop = xMCF.createInstanceWithContext(
"com.sun.star.frame.Desktop", xContext);
XDesktop xDesktop = (XDesktop) UnoRuntime.queryInterface(XDesktop.class, oDesktop);
XComponentLoader xCLoader = (XComponentLoader) UnoRuntime.queryInterface(XComponentLoader.class, oDesktop);
//----------------------------------
try {
// Create a document
XComponent xdocument = xCLoader.loadComponentFromURL("private:factory/swriter", "_blank", 0, new PropertyValue[0]);
// Get the textdocument
XTextDocument aTextDocument = (XTextDocument) UnoRuntime.queryInterface(com.sun.star.text.XTextDocument.class, xdocument);
// Get its text
XText xText = aTextDocument.getText();
XTextRange xTextRange = xText.createTextCursor();
((XTextCursor) xTextRange).gotoEnd(true);
XPropertySet xTextProps = (XPropertySet) UnoRuntime.queryInterface(
XPropertySet.class, xTextRange);
xTextProps.setPropertyValue("CharFontName", "Helvetica");
xTextProps.setPropertyValue("CharWeight",
new Float(com.sun.star.awt.FontWeight.BOLD));
xTextProps.setPropertyValue("CharHeight", new Float(16));
XParagraphCursor xPC = (XParagraphCursor) UnoRuntime.queryInterface(
XParagraphCursor.class, xTextRange);
XPropertySet xPS = (XPropertySet) UnoRuntime.queryInterface(
XPropertySet.class, xPC);
xPS.setPropertyValue("ParaAdjust", com.sun.star.style.ParagraphAdjust.CENTER);
xText.insertString(xText.getEnd(), "Records Management Division \n Records Center Statistics \n Weekly Report\n\n", false);
xText.insertString(xText.getEnd(), "Week :" + month + " " + date + " - " + endmonth + " " + date1 + "," + endyear + "\n\n", false);
XMultiServiceFactory xMSF = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, xdocument);
// Creating a table with 3 rows and 4 columns
XTextTable xTextTable = (XTextTable) UnoRuntime.queryInterface(XTextTable.class, xMSF.createInstance("com.sun.star.text.TextTable"));
xTextTable.initialize(13, 2); // rows, cols
// insert table in the xText
xText.insertTextContent(xText.getEnd(), xTextTable, false);
XCellRange xCellRangeHeader = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, xTextTable);
XCell xCellHeader = null;
XText xHeaderText = null;
xCellHeader = xCellRangeHeader.getCellByPosition(0, 0); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("Records Center Total Capacity");
xCellHeader = xCellRangeHeader.getCellByPosition(1, 0); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("" + RecordCentrecapacity);
xCellHeader = xCellRangeHeader.getCellByPosition(0, 1); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("Current Inventory For Week Ending");
xCellHeader = xCellRangeHeader.getCellByPosition(1, 1); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("" + currentTotalInventory);
xCellHeader = xCellRangeHeader.getCellByPosition(0, 2); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("Open Space / 1.1 Cu. Ft.");
xCellHeader = xCellRangeHeader.getCellByPosition(1, 2); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("" + CurrentAvailableSpaceS);
xCellHeader = xCellRangeHeader.getCellByPosition(0, 3); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("Open Space / 2.2 Cu. Ft.");
xCellHeader = xCellRangeHeader.getCellByPosition(1, 3); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("" + CurrentAvailableSpaceL);
xCellHeader = xCellRangeHeader.getCellByPosition(0, 4); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("Open Space / 1.1 Cold Room");
xCellHeader = xCellRangeHeader.getCellByPosition(1, 4); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("" + CurrentAvailableSpaceC);
xCellHeader = xCellRangeHeader.getCellByPosition(0, 5); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("Boxes Received For Storage/ Cu. Ft.");
xCellHeader = xCellRangeHeader.getCellByPosition(1, 5); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("" + totalBoxesReceivedforStorage);
xCellHeader = xCellRangeHeader.getCellByPosition(0, 6); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("Boxes Destroyed From Storage/ Cu. Ft.");
xCellHeader = xCellRangeHeader.getCellByPosition(1, 6); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("" + totalBoxesDestroyedfromStorage);
xCellHeader = xCellRangeHeader.getCellByPosition(0, 7); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("Boxes Received For Destruction Only/ Cu. Ft.");
xCellHeader = xCellRangeHeader.getCellByPosition(1, 7); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("" + BoxesInForDestructionTotalCuFt);
xCellHeader = xCellRangeHeader.getCellByPosition(0, 8); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("Retrievals");
xCellHeader = xCellRangeHeader.getCellByPosition(1, 8); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("");
xCellHeader = xCellRangeHeader.getCellByPosition(0, 9); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("Re-Files");
xCellHeader = xCellRangeHeader.getCellByPosition(1, 9); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("");
xCellHeader = xCellRangeHeader.getCellByPosition(0, 10); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("Customer Inquiries");
xCellHeader = xCellRangeHeader.getCellByPosition(1, 10); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("");
xCellHeader = xCellRangeHeader.getCellByPosition(0, 11); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("Microfilm Filed (Roll Canister)");
xCellHeader = xCellRangeHeader.getCellByPosition(1, 11); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("");
xCellHeader = xCellRangeHeader.getCellByPosition(0, 12); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("Boxes Returned To Departments /Cu. Ft.");
xCellHeader = xCellRangeHeader.getCellByPosition(1, 12); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("" + BoxesReturnedToDepartmentSTotalCuFt);
//close the document
XCloseable xcloseable = (XCloseable) UnoRuntime.queryInterface(XCloseable.class, xdocument);
xcloseable.close(false);
%>
转换代码是
byte[] pdf = baos.toByteArray();
dir = new File(System.getProperty("user.dir")+File.separator+folderName);
if(!dir.exists())
{
dir.mkdir();
}
fos = new FileOutputStream(System.getProperty("user.dir")+File.separator+folderName+File.separator+"Records Centre Statistics Weekly Report"+".pdf");
fos.write(pdf);
fos.close();
response.setContentType ("application/pdf");
//set the header and also the Name by which user will be prompted to save
response.setHeader ("Content-Disposition", "attachment;filename="+"Records Centre Statistics Weekly Report"+".pdf");
File f = new File (System.getProperty("user.dir")+File.separator+folderName+File.separator+"Records Centre Statistics Weekly Report"+".pdf");
InputStream inputStream = new FileInputStream(f);
ServletOutputStream servletOutputStream = response.getOutputStream();
int bit = 256;
int i = 0;
try
{
while ((bit) >= 0)
{
bit = inputStream.read();
servletOutputStream.write(bit);
}
System.out.println("bit:" +bit);
}
catch (Exception ioe)
{
ioe.printStackTrace(System.out);
}
servletOutputStream.flush();
inputStream.close();
}catch (Exception ex)
{
System.out.println("exception : "+ex.getMessage());
}
finally
{
System.out.println("directory delete");
FileUtils.deleteDirectory(dir);
}
%>
如果你能帮助我,因为我是这个主题的新手。
最佳答案
哇!!! jsp
中的 Scriptlet...多么古老的学校!!
通常,您会在 Servlet
中执行此操作,而不是在 jsp
中执行此操作。 Jsp 通常用于响应 html,在本例中您希望将二进制写入响应输出流。
您可以在 jsp
的 scriptlet 中执行此操作
<%
response.getOutputStream().write(...);
%>
但我建议您改用Servlet
。
或者更好的是,停止使用 15 年前的技术,选择一个 Web 框架并停止使用 jsp、scriptlet 和 servlet
关于Java、OpenOffice、创建获取文档作为 jsp 响应作为 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45836099/
我需要您在以下方面提供帮助。近一个月来,我一直在阅读有关任务和异步的内容。 我想尝试在一个简单的 wep api 项目中实现我新获得的知识。我有以下方法,并且它们都按预期工作: public Htt
我的可执行 jar 中有一个模板文件 (.xls)。不需要在运行时我需要为这个文件创建 100 多个副本(稍后将唯一地附加)。用于获取 jar 文件中的资源 (template.xls)。我正在使用
我在查看网站的模型代码时对原型(prototype)有疑问。我知道这对 Javascript 中的继承很有用。 在这个例子中... define([], function () { "use
影响我性能的前三项操作是: 获取滚动条 获取偏移高度 Ext.getStyle 为了解释我的应用程序中发生了什么:我有一个网格,其中有一列在每个单元格中呈现网格。当我几乎对网格的内容做任何事情时,它运
我正在使用以下函数来获取 URL 参数。 function gup(name, url) { name = name.replace(/[\[]/, '\\\[').replace(/[\]]/,
我最近一直在使用 sysctl 来做很多事情,现在我使用 HW_MACHINE_ARCH 变量。我正在使用以下代码。请注意,当我尝试获取其他变量 HW_MACHINE 时,此代码可以完美运行。我还认为
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 9 年前。 要求提供代码的问题必须表现出对所解决问题的最低限度的理解。包括尝试过的解决方案、为什么
由于使用 main-bower-files 作为使用 Gulp 的编译任务的一部分,我无法使用 node_modules 中的 webpack 来require 模块code> dir 因为我会弄乱当
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我使用 Gridlayout 在一行中放置 4 个元素。首先,我有一个 JPanel,一切正常。对于行数变大并且我必须能够向下滚动的情况,我对其进行了一些更改。现在我的 JPanel 上添加了一个 J
由于以下原因,我想将 VolumeId 的值保存在变量中: #!/usr/bin/env python import boto3 import json import argparse import
我正在将 MSAL 版本 1.x 更新为 MSAL-browser 的 Angular 。所以我正在尝试从版本 1.x 迁移到 2.X.I 能够成功替换代码并且工作正常。但是我遇到了 acquireT
我知道有很多关于此的问题,例如 Getting daily averages with pandas和 How get monthly mean in pandas using groupby但我遇到
This is the query string that I am receiving in URL. Output url: /demo/analysis/test?startDate=Sat+
我正在尝试使用 javascript 中的以下代码访问 Geoserver 层 var gkvrtWmsSource =new ol.source.ImageWMS({ u
API 需要一个包含授权代码的 header 。这就是我到目前为止所拥有的: var fullUrl = 'https://api.ecobee.com/1/thermostat?json=\{"s
如何获取文件中的最后一个字符,如果是某个字符,则删除它而不将整个文件加载到内存中? 这就是我目前所拥有的。 using (var fileStream = new FileStream("file.t
我是这个社区的新手,想出了我的第一个问题。 我正在使用 JSP,我成功地创建了 JSP-Sites,它正在使用jsp:setParameter 和 jsp:getParameter 具有单个字符串。
在回答 StoreStore reordering happens when compiling C++ for x86 @Peter Cordes 写过 For Acquire/Release se
我有一个函数,我们将其命名为 X1,它返回变量 Y。该函数在操作 .on("focusout", X1) 中使用。如何获取变量Y?执行.on后X1的结果? 最佳答案 您可以更改 Y 的范围以使其位于函
我是一名优秀的程序员,十分优秀!