Foros de discusión

Crear un fichero en mi portlet

Inma Moram, modificado hace 8 años.

Crear un fichero en mi portlet

New Member Mensajes: 5 Fecha de incorporación: 16/12/15 Mensajes recientes
Buenas tardes,
necesito crear un fichero pdf en mi portlet para posteriormente abrirlo con un href de html.
Hago lo siguiente:

En el action creo un fichero con una ruta absoluta a una carpeta que yo he creado en mi portlet que se llama pdf:

File file = new File ("C:\\liferay-developer-studio\\liferay-portal-6.2-ee-sp9\\tomcat-7.0.42\\webapps\\Formulario-portlet\\pdf\\ejemplo.pdf");

posteriormente añado información al pdf con la librería itextpdf
Luego en el html:

<a href="<%= request.getContextPath() %>/pdf/ejemplo.pdf" target="_blank">abrir</a>

Y me abre el pdf.
El problema es que es una ruta absoluta y necesitaría una ruta relativa. ¿cómo podría hacerlo?
Muchas gracias de antemano.
Saludos.
thumbnail
Juan Gonzalez, modificado hace 8 años.

RE: Crear un fichero en mi portlet

Liferay Legend Mensajes: 3089 Fecha de incorporación: 28/10/08 Mensajes recientes
Inma Moram:
Buenas tardes,
necesito crear un fichero pdf en mi portlet para posteriormente abrirlo con un href de html.
Hago lo siguiente:

En el action creo un fichero con una ruta absoluta a una carpeta que yo he creado en mi portlet que se llama pdf:

File file = new File ("C:\\liferay-developer-studio\\liferay-portal-6.2-ee-sp9\\tomcat-7.0.42\\webapps\\Formulario-portlet\\pdf\\ejemplo.pdf");

posteriormente añado información al pdf con la librería itextpdf
Luego en el html:

<a href="<%= request.getContextPath() %>/pdf/ejemplo.pdf" target="_blank">abrir</a>

Y me abre el pdf.
El problema es que es una ruta absoluta y necesitaría una ruta relativa. ¿cómo podría hacerlo?
Muchas gracias de antemano.
Saludos.


Simplemente hacerlo de otra forma. ¿Por qué no usas la DL y así despues obtener la URL mediante la API (DLUtil)?

En caso contrario tendrías que hacer un portlet implementando el metodo serveResource para obtener ese fichero y enviarlo al cliente.
Inma Moram, modificado hace 8 años.

RE: Crear un fichero en mi portlet

New Member Mensajes: 5 Fecha de incorporación: 16/12/15 Mensajes recientes
Gracias Juan por la pronta respuesta. Al leerla me puse con ello pero no lo he conseguido, hago lo siguiente:

public void anadirAlaDL (RenderRequest renderRequest, RenderResponse renderResponse, ActionRequest actionRequest){

ThemeDisplay themeDisplay = (ThemeDisplay) renderRequest.getAttribute(WebKeys.THEME_DISPLAY);
Document documento = new Document();
File file = new File ("nuevo.pdf");
FileOutputStream ficheroPdf = new FileOutputStream(file);

try {
PdfWriter.getInstance(documento,ficheroPdf).setInitialLeading(20);

} catch (DocumentException e1) {
e1.printStackTrace();
}

documento.open();

Paragraph parrafo = new Paragraph("hola este es mi pdf nuevo");
parrafo.setIndentationLeft(150);

documento.close();

//Aquí está mi duda: tengo que, de alguna manera, leer mi pdf y volcarlo pero en mi caso no tengo un file sino un FileOutputStream y no encuentro la forma de hacerlo, sería algo así...

byte[] pdf = FileUtil.getBytes(ficheroPdf);
InputStream is = new ByteArrayInputStream(pdf);

Después sólo tendría que añadirlo:

DLFolder dlFolder = DLFolderLocalServiceUtil.getFolder(themeDisplay.getScopeGroupId(), 0, "CarpetaPdf");
ServiceContext serviceContext = ServiceContextFactory.getInstance(DLFileEntry.class.getName(), renderRequest);
String title= "pdf nuevo";
DLFileEntry fileEntry = DLFileEntryLocalServiceUtil.addFileEntry(themeDisplay.getUserId(),
themeDisplay.getScopeGroupId(),
themeDisplay.getScopeGroupId(),
dlFolder.getFolderId(),
file.getName(),
MimeTypesUtil.getContentType(file),
title,
renderRequest.getParameter("name"),
"",
0,
null,
file,
is,
file.getTotalSpace(),
serviceContext);
}

No sé si estoy en buena dirección.
Muchas gracias de antemano.
Saludos!
Inma Moram, modificado hace 8 años.

RE: Crear un fichero en mi portlet

New Member Mensajes: 5 Fecha de incorporación: 16/12/15 Mensajes recientes
Al final lo he hecho de esa forma:

ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);

// creo el pdf.

Document documento = new Document();
File file = new File("mipdf.pdf");

FileOutputStream ficheroPdf = new FileOutputStream(file);

try {
PdfWriter.getInstance(documento,ficheroPdf).setInitialLeading(20);

} catch (DocumentException e1) {
e1.printStackTrace();
}

documento.open();

Paragraph parrafo = new Paragraph("este es mi pdf");
documento.add(parrafo);

documento.close();

File file2 = new File (file.getAbsolutePath());
byte[] imageBytes = FileUtil.getBytes(file2);
InputStream is = new ByteArrayInputStream(imageBytes);

// creo el pdf en la dl
DLFolder dlFolder = DLFolderLocalServiceUtil.getFolder(themeDisplay.getScopeGroupId(), 0, "carpetaPdf");
ServiceContext serviceContext = ServiceContextFactory.getInstance(DLFileEntry.class.getName(), actionRequest);
String title= "mipdf.pdf";


DLFileEntry fileEntry = DLFileEntryLocalServiceUtil.addFileEntry(themeDisplay.getUserId(),
themeDisplay.getScopeGroupId(),
themeDisplay.getScopeGroupId(),
dlFolder.getFolderId(),
file.getName(),
MimeTypesUtil.getContentType(file),
title,
"",
"",
0,
null,
file2,
is,
file.length(),
serviceContext);



DLFileEntry pdf = DLFileEntryLocalServiceUtil.getDLFileEntry(fileEntry.getFileEntryId());

String url = ("/"+"documents"+ "/" + pdf.getRepositoryId() + "/" + pdf.getFolderId() + "/" + pdf.getTitle() + "/" + pdf.getUuid() ); //genero la url.

Lo genero correctamente.
Muchas gracias.
Saludos.