Java, Pdf

  • Автор темы Azrael
  • Дата начала
A

Azrael

Гость
#1
> создание Pdf из Lotus Notes

Не получается :( , может я что-то не так делаю. Скачал i-text, переименовал в com.jar, затем вставил текст, получил ошибку, что major.minor version 0.48 is too recent, ошибку поборол тем, что скачал с того же сайта toolbox.jar, bcmail-jdk 14-135.jar, bcprov-jdk 14-135.jar, но теперь выдает ошибки: Class com.lowagie.Document not found in import + такие же ошибки на остальные import com...
Как лечить? Может это из-за того, что в lotus\notes\Notes.jar тоже внутри есть com - и он ищет там?

Ошибочка вышла. Все равно получаю ошибку Invalid class format in ... The major.minor version '48.0' is too recent for this tool to understand.

Как побороть? :(
 

alb

Well-Known Member
13.07.2005
212
0
#4
а как на LS создать PDF?
с java еще не умею работать
 

alb

Well-Known Member
13.07.2005
212
0
#5
//создаем экземпляр объекта
Document document = new Document();
это Document имеет отношение к доминошному документу.
когда пытаюсь создать переменную doc типа(класс) Document компилятор сообщает об ошибке. imcompatible types
я плохо знаю ява. но мне кажется тут два типа конфликтует.

хочется взятьданные из доминошного документа потом передать в пдф.
 
A

Azrael

Гость
#6
//создаем экземпляр объекта
Document document = new Document();
класс Document объявлен в 2 местах:
1) lotus.domino.Document
2) com.lowagie.text.Document

соответственно, конкретно указываешь:
<!--shcode--><pre><code class='java'>com.lowagie.text.Document document = new Document();[/CODE]
Да, и, кстати, не забудь в import указать <!--shcode--><pre><code class='java'>import com.lowagie.text.Document;[/CODE]
а как на LS создать PDF?
с java еще не умею работать
Только руками напрямую в файл через NotesStream в соответствии со спецификацией (само-убийство!) :o

будут вопросы, пиши лучше сразу на alex [дог] f9(точка)avtograd.ru
У меня до начала сентября инет по времени, к тому же диал-ап, здесь бываю не часто.

Предвижу много вопросов, типа, а как создавать PDF с русскими символами, насчет таблиц и проч. ;)
хочется взятьданные из доминошного документа потом передать в пдф.
Самый простой способ (если в документе нет таблиц, или таблицы с фиксированным числом строк)
1. Создаешь в Open Office документ с текстовыми полями (задаешь имена, не используй только знаки подчеркивания и проч.)
2. Документ сначала сохраняешь, затем в сессионную переменную передаешь его UNID, потом вызываешь
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">ява-агент</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'>import lotus.domino.*;

import java.io.FileOutputStream;

import com.lowagie.text.pdf.AcroFields;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;

public class JavaAgent extends AgentBase {

public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();

Session s = NotesFactory.createSession();
String stUNID = s.getEnvironmentString("UNID");
Database db = agentContext.getCurrentDatabase();

lotus.domino.Document Ldoc = db.getDocumentByUNID(stUNID);

System.out.println("Filling in a form");
try {
// we create a reader for a certain document
PdfReader reader = new PdfReader("C:\\Temp\\itext\\CN23templatewithFields.pdf");
// filling in the form
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream("C:\\Temp\\itext\\registered.pdf"));
AcroFields form = stamp.getAcroFields();
String stFieldValue = Ldoc.getItemValueString("<имя поля>");
// здесь одно НО: если тип поля не String, то лучше используй s.evaluate("<формула, возвращающая результатом @Text(что-либо)>",Ldoc) - подробнее смотри в справке как организовать
form.setField("PostCode", "456211");
stamp.setFormFlattening(true); // это используешь только в случае, если в твоих полях нету русских символов.
stamp.close();
}
catch (Exception de) {
de.printStackTrace();
}
System.out.println("Completed");
}
catch (Exception e) {
e.printStackTrace();
}
}
}[/CODE]
Если русские символы все равно не отображаются, то в Acrobate в редактируемом поле попробуй повводить русские символы. Он должен сообразить и попросить из инета скачать пакет доп.шрифтов (около 4 мб)
Кстати, можно использовать профиль, в нем Rich text поле (туда складываешь шаблон), и считывать PDFReader'ом напрямую оттуда! Java вещь отличная! i-text - ОЧЕНЬ мощная штука!
 

alb

Well-Known Member
13.07.2005
212
0
#7
не мог заниматься пдф из за других проблем вот вроде пока тишина, не подскажете где можно найти документацю IText. c описаниями класов. как можно например создать колонтитулы, таблицу.оформление ячеек.
 
A

Azrael

Гость
#8
где можно найти документацю IText
http://itext.ugent.be/library/api/ - здесь описание классов
http://www.lowagie.com/iText/ - здесь много информации, вроде бы архив с API отсюда скачал, там же можно найти ссылки на архив с той же информацией как в 1 ссылке. На первом сайте тоже немало всего есть.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 484
360
#9
хочу добавить абстрактную модель :crash:...
на самом деле нужно будет создать XSLT и подсунуть FOP
ФОП нужен (желательно) 0.95 (иначе со шрифтами будете морочиться - генерить описалово)
http://gogs.info/2009/05/from-docbook-to-p...ing-apache-fop/
хотя там написано docbook - это детали, просто для этого типа ХМЛ есть готовый XSLT (превращения в ПДФ)
чтобы не указывать в параметрах (ФОПу) фонты и размер, можно сделать обертывающий XSL:
Код:
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version='1.0'
xmlns="http://www.w3.org/TR/xhtml1/transitional"
exclude-result-prefixes="#default">

<xsl:import href="здесь д.б. путь к вашему XSL-FO"/>

<xsl:param name="paper.type" select="'A4'"/>
<xsl:param name="body.font.family">TimesNewRoman</xsl:param>
<xsl:param name="title.font.family">Arial</xsl:param>
<xsl:param name="monospace.font.family">CourierNew</xsl:param>
<xsl:param name="sans.font.family">Arial</xsl:param>
<xsl:param name="dingbat.font.family">TimesNewRoman</xsl:param>
<xsl:param name="body.font.master">8</xsl:param>
</xsl:stylesheet>
параметры xsl выше специфичны docbook XSLT - показан принцип
читать про ФОП здесь: http://xmlgraphics.apache.org/fop/0.95/emb...#ExampleXML2PDF
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 484
360
#10
ну вот проект, правда недореализованный:
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться

осталась сделать часть XSLT (но здесь может зависеть от задачи)
сложного ничего нет - время нужно ;):
-смапить параграфы ДХЛ - в ФОП
-смапить таблицы ДХЛ - в ФОП
-смапить атрибуты тескста в ФОП
 

NetWood

Well-Known Member
Lotus team
17.04.2008
371
16
#11
По проекту
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться

Содержимое документа "о базе данных" itext_pdf.nsf

Проект создавался как пример работы под WEB с различными библиотеками JavaScript
1. Подключена в базу jQuery с примером работы с картинками.
2. Пример работы с prototype для валидации полей на форме.
3. Простейшая математическая капча.

Дальнейшее развтие проекта - примеры создания PDF в Notes на основе библиотек JavaScript
4. Пример работы itext с русскими шрифтами.
Файл itext java находится внутри агента и работает без настроек java среды Notes.
Во вью запустить агент CreatePDFcyrUI кнопкой
Файл создается в корне С:\CreatePDFInlotus.pdf и приаттачивается в новый док pdf-itext
5. Пример создания PDF с помощью FOP. http://xmlgraphics.apache.org/fop/
Идея: NetWood
Реализация: Imike

Этап 1: Настройка среды
1. Необходимо скачать FOP вот тут: http://archive.apache.org/dist/xmlgraphics/fop/binaries/
Мы брали самую свежую на это время версию fop-0.95-bin.zip
Создать C:\examples и в нее переписать все содержимое \fop-0.95\examples
2. Из архива поместить библу fop.jar (\fop-0.95\build) в папку C:\Lotus\Notes\jvm\lib\ext (для win)
На всякий случай все либы из папки \fop-0.95\lib поместить туда же в C:\Lotus\Notes\jvm\lib\ext
и перезапустить Notes.
Все, среда создана.

Далее работаем с агентом FOPbased. В нем подключаются русские фонты.
Док Notes выгружается через DXL в файл. Далее с помощью настроечного дока dxl2fo парсится в нужный нам формат.
Создается PDF и аттачится в новый док.

По состоянию на 6 июня 2010 из дока вытаскиваются данные в XML и далее парсятся через настроечный документ dxl2fo.xsl в PDF:
- неформатированный текст RTF поля
- ембеднутая из Excel таблица имедж
- приаттаченные в док имеджи jpg
Док создается под именем pdf-fo

Агент checkResolution. Информационный. Проверяет разрешение приаттаченных имеджей. Результать работы в консоли java (и в файле с расирением .log в каталоге c:\files)

Дальнейшие задачи (по состоянию на 24 июня 2010):
минимум
- "вытащить" в PDF картинку вставленную в RTF поле
- "вытащить" в PDF таблицу с данными из RTF поля
максимум
- сейчас формат выходного PDF задается форматированием вручную настроечного документа dxl2fo. Для наглядности
задать в качестве выходного формата PDF документ из Notes (расположение полей, картинки, текст и пр.) или исходную форму из файла PDF как шаблон или другие варианты...

Желающим присоединиться для развития LND to PDF (добавлять файлы, добавлять код в основную базу itext_pdf.nsf.zip ) необходимо бить челобитную администратору Imike
 

Вложения

A

allex

Гость
#12
import com.itextpdf.text.Document;

Document document = new Document();

Надо использовать уже имеющийся документ, а не создавать новый. Как?
 

xKlonx

Well-Known Member
Lotus team
10.09.2009
410
0
#16
The PdfContentByte object has methods for adding all kinds of content to a PDF including text, graphics, images etc.

Код:
PdfContentByte content = pdfStamper.getUnderContent(i);

content.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, false), 20);
content.beginText();
content.showText("hvsdihsdihdihudihusdfihusdf");
content.endText();
content.stroke();;
 
A

allex

Гость
#17
Да, это я уже нашел, спасиб за помощь.
А для использования кирилици нужен специальный БУБН, всмысле шрифт ?

Получается так что все буквы одна под одной, а как в строчку их поставить

есть такая вещь BaseFont.IDENTITY_H, а как ее применить ?



Вопрос решен с подключением шрифта.

BaseFont bf1 = BaseFont.createFont( "c:\\windows\\fonts\\arial.ttf" , "windows-1251" , true);
 

savl

Well-Known Member
Lotus team
28.10.2011
2 126
163
#19
Тема PDF всегда будет актуальная, пока что-то новое не придумают...
Мне надо было в редактируемые поля pdf записать текст, даже если полю присвоить шрифт не работало, ну никак русские символы не отображались, только латиница.
Наткнулся на решение с русскими шрифтами:
C++:
final BaseFont bf = BaseFont.createFont("c:\\TEMP\\MyriadPro-Regular.otf", "Cp1251", BaseFont.EMBEDDED);//BaseFont.IDENTITY_H
AcroFields form = stamper.getAcroFields();
form.addSubstitutionFont(bf);
Не смотрите, что файлик шрифта прописан на прямую, пробный вариант.
Шрифт можно выгружать программно и программно же подтянуть, главное, чтобы он содержал в себе символы кириллицы.
Win7 работает, на Mac только предстоит проверить (у нас их мало)

Если надо добавлять текст, то можно использовать второй параметр для:
C++:
 document.add(new Paragraph ("Create PDF In lotus ", BaseFont ));
Указываем объект BaseFont вторым параметром и текст добавляется нашим шрифтом.

Еще добавлю, только узнал сам:
addSubstitutionFont дообавляет шрифт в PDF, то есть он будет использоваться если основной шрифт не может отобразить символы.
C++:
form.setFieldProperty(fldName, "textfont", BaseFont, null);
А вот это строчка для каждого интерактивного поля fldName, изменит его шрифт на наш BaseFont.
 

Gandliar

Well-Known Member
Lotus team
16.02.2004
328
6
#20
Привет!
Пытаюсь скрестить lotus и itext.
В отладчике явы работает, в ява агенте работает, а через ls2j выдает ошибку the.document.has.no.pages
И как победить такое?

Пример с http://itextpdf.com/examples/iia.php?id=12:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'>/*
* This class is part of the book "iText in Action - 2nd Edition"
* written by Bruno Lowagie (ISBN: 9781935182610)
* For more info, go to:
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться

* This example only works with the AGPL version of iText.
*/

package part1.chapter01;

import java.io.FileOutputStream;
import java.io.IOException;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;

/**
* First iText example: Hello World.
*/
public class HelloWorld {
/** Path to the resulting PDF file. */
public static final String RESULT = "results/part1/chapter01/hello.pdf";

/**
* Creates a PDF file: hello.pdf
*/
public static void main() throws DocumentException, IOException {
new HelloWorld().createPdf(RESULT);
}

/**
* Creates a PDF document.
* @param filename the path to the new PDF document
* @throws DocumentException
* @throws IOException
*/
public void createPdf(String filename) throws DocumentException, IOException {
// step 1
Document document = new Document();
// step 2
PdfWriter.getInstance(document, new FileOutputStream(filename));
// step 3
document.open();
// step 4
document.add(new Paragraph("Hello World!"));
// step 5
document.close();
}
}[/CODE]