2013-05-20 16 views
0

С помощью SSJS я успешно создал PDF-файл с использованием простого анализатора HTML, который поставляется с iText, но простой парсер HTML не уважает CSS и очень ограничен. Я загрузил класс XMLWorker с сайта iText и попытался использовать его, но мои знания о том, как вызывать пакеты Java, слишком ограничены. Все примеры, которые я могу найти, используют Java и относятся к классам напрямую, например.Xpages Создание PDF с использованием класса XMLWorker

Document newPDF = new Document();

Но в SSJS мы должны использовать точечную нотацию, например.

var newPDF:com.itextpdf.text.Document = new com.itextpdf.text.Document();

Это - я думаю - где я спотыкаюсь. Мой код выглядит следующим образом:

function createLPO2(pReqDoc:NotesDocument) { 

importPackage(com.itextpdf); 
//importPackage(com.itextpdf.tool.xml.XMLWorkerHelper); 
importPackage(java.io); 

var con = facesContext.getExternalContext(); 
var response:com.ibm.xsp.webapp.XspHttpServletResponse = con.getResponse(); 

response.setContentType("application/pdf"); 
response.setHeader("Cache-Control", "no-cache"); 
response.setDateHeader("Expires", -1); 
response.setHeader("Content-Disposition","attachment; filename=\"LPO_" + pReqDoc.getItemValueString("RequisitionNo") + ".pdf\""); 

var newPDF:com.itextpdf.text.Document = new com.itextpdf.text.Document(); 
var writer = com.itextpdf.text.pdf.PdfWriter.getInstance(newPDF,response.getOutputStream()); 
var xmlWorkerHelper = com.itextpdf.tool.xml.XMLWorkerHelper.getInstance(); 

var strHTML = getTestHTML(); //this is the HTML used in the examples on the iText site 

xmlWorkerHelper.parseXHtml(writer, newPDF, new java.io.StringReader(strHTML)); 

newPDF.close(); 
writer.close(); 

facesContext.responseComplete(); 
} 

Если я запускаю этот сценарий, как это я получаю ошибку сценария на консоли Domino. Если я удалю комментарий по строке importPackage(com.itextpdf.tool.xml.XMLWorkerHelper);, это даст совершенно другую ошибку. Я подозреваю, что мне нужно импортировать пакет XMLWorkerHelper, а не только пакет com.itextpdf. Я подумал, что если бы я открыл файл jar с помощью инструмента, такого как 7-zip, я мог бы проработать путь, каким образом я пришел в com.itextpdf.tool.xml.XMLWorkerHelper

Это правильно? Если да, то почему мой скрипт терпит неудачу?

+0

Какая ошибка скрипта вы получаете? –

+0

Вам нужно импортировать пакет, а не класс: * importPackage (com.itextpdf.tool.xml) * –

+0

Спасибо Свену - я этого не знал. Я совершенно новичок в Java, хотя я много лет работаю с Notes. Я хорошо разбираюсь в javascript на стороне клиента и нашел, что легко подобрать серверный javascript, но Java по-прежнему остается загадкой. –

ответ

1

Rob, серьезно, не пытайтесь это сделать в SSJS. iText - это все Java, если вы пытаетесь калечить его на другом языке, он будет вас огорчать. Создайте класс-оболочку, который имеет метод, который принимает OutputStream и любые данные (Document, View и т. Д.), Которые вам нужны. Получите OutputStream в своем SSJS и вызовите функцию. Ищите XAgent XSnippet на OpenNTF и мою серию блога (последние две отсутствуют - несут меня) в создании PDF. Одно слово предостережения: iText - это GPL, так что вы либо используете GPL, либо приобретаете коммерческую лицензию iText, либо ищете альтернативы, такие как Apache PDFBox или Apache FOP. Ах, вторая предосторожность: HTML в PDF - это лаваш. Вы можете посмотреть коммерческий инструмент, например, например. от программного обеспечения Swing (или изменить подход)

+0

Следите за предстоящим разговором о Wrappers на NotesIn9 – stwissel

+0

Спасибо за ваш ответ. Я признаю, что ты прав, но я все еще потерян. Я просмотрел ваш блог и нашел статьи о XML и XSL: FO и XSLT. Я понимаю принципы, но детали того, как я создаю «класс-оболочку, который принимает OutputStream», по-прежнему остается для меня полной загадкой. Я слишком долго потратил Googling на руководство для новичков по внедрению Java в Xpages без успеха. Например, я нашел много вещей о «управляемых бобах» и о том, как указать на них в «faces-config.xml», но нечего сказать, где хранить управляемый компонент в nsf. Я думаю, что «класс-оболочка» - управляемый компонент? –

+0

Hi Rob, Чтобы добавить класс Java в XPage, просто введите код в элемент дизайна Code/Java (в пред 8.5.3 вы поместите его в webcontent/web-inf/src и добавьте это в путь сборки). Оболочка - это просто простой Java-класс, который принимает все необходимые параметры. Следуйте [этому примеру] (http://www.wissel.net/blog/d6plinks/SHWL-8SLCVR) com.notessensei.tools.PDFFormatter - это класс-оболочка , Все Java, кроме создания экземпляра класса, находится внутри, поэтому ваш SSJS становится скудным и средним – stwissel

Смежные вопросы