Java, Pdf

Тема в разделе "Lotus + Java + LS2J", создана пользователем Azrael, 11 июл 2007.

  1. Azrael

    Azrael Гость

    > создание 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.

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

    v2v Гость

    а какая у тебя версия Лотус Домино?
     
  3. Azrael

    Azrael Гость

    Lotus Notes 6.5.3
     
  4. alb

    alb Well-Known Member

    Регистрация:
    13 июл 2005
    Сообщения:
    212
    Симпатии:
    0
    а как на LS создать PDF?
    с java еще не умею работать
     
  5. alb

    alb Well-Known Member

    Регистрация:
    13 июл 2005
    Сообщения:
    212
    Симпатии:
    0
    это Document имеет отношение к доминошному документу.
    когда пытаюсь создать переменную doc типа(класс) Document компилятор сообщает об ошибке. imcompatible types
    я плохо знаю ява. но мне кажется тут два типа конфликтует.

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

    Azrael Гость

    класс 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]
    Только руками напрямую в файл через NotesStream в соответствии со спецификацией (само-убийство!) :eek:

    будут вопросы, пиши лучше сразу на 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 - ОЧЕНЬ мощная штука!
     
  7. alb

    alb Well-Known Member

    Регистрация:
    13 июл 2005
    Сообщения:
    212
    Симпатии:
    0
    не мог заниматься пдф из за других проблем вот вроде пока тишина, не подскажете где можно найти документацю IText. c описаниями класов. как можно например создать колонтитулы, таблицу.оформление ячеек.
     
  8. Azrael

    Azrael Гость

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

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    хочу добавить абстрактную модель :crash:...
    на самом деле нужно будет создать XSLT и подсунуть FOP
    ФОП нужен (желательно) 0.95 (иначе со шрифтами будете морочиться - генерить описалово)
    http://gogs.info/2009/05/from-docbook-to-p...ing-apache-fop/
    хотя там написано docbook - это детали, просто для этого типа ХМЛ есть готовый XSLT (превращения в ПДФ)
    чтобы не указывать в параметрах (ФОПу) фонты и размер, можно сделать обертывающий XSL:
    Код (Text):
    <?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
     
  10. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    ну вот проект, правда недореализованный: https://sites.google.com/site/lmiketonetwoodproject/
    осталась сделать часть XSLT (но здесь может зависеть от задачи)
    сложного ничего нет - время нужно ;):
    -смапить параграфы ДХЛ - в ФОП
    -смапить таблицы ДХЛ - в ФОП
    -смапить атрибуты тескста в ФОП
     
  11. NetWood

    NetWood Lotus team
    Lotus team

    Регистрация:
    17 апр 2008
    Сообщения:
    308
    Симпатии:
    0
    По проекту https://sites.google.com/site/lmiketonetwoodproject
    Содержимое документа "о базе данных" 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
     

    Вложения:

    • LNDtoPDF.jpg
      LNDtoPDF.jpg
      Размер файла:
      260,3 КБ
      Просмотров:
      464
  12. allex

    allex Гость

    import com.itextpdf.text.Document;

    Document document = new Document();

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

    xKlonx Lotus team
    Lotus team

    Регистрация:
    10 сен 2009
    Сообщения:
    412
    Симпатии:
    0
    посмотрите тут
     
  14. allex

    allex Гость

    Благодарю
     
  15. allex

    allex Гость

    А добавить текст каким образом ?
     
  16. xKlonx

    xKlonx Lotus team
    Lotus team

    Регистрация:
    10 сен 2009
    Сообщения:
    412
    Симпатии:
    0
    The PdfContentByte object has methods for adding all kinds of content to a PDF including text, graphics, images etc.

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

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

    allex Гость

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

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

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



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

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

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    а может не изобретать велик ?
     
  19. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Тема 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.
     
  20. Gandliar

    Gandliar Well-Known Member

    Регистрация:
    16 фев 2004
    Сообщения:
    222
    Симпатии:
    0
    Привет!
    Пытаюсь скрестить 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: http://itextpdf.com/examples/
    * 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]
     
Загрузка...
Похожие Темы - Java Pdf
  1. Andrey Kha
    Ответов:
    0
    Просмотров:
    28
  2. gosteev
    Ответов:
    0
    Просмотров:
    37
  3. Polina
    Ответов:
    0
    Просмотров:
    39
  4. ApplePen
    Ответов:
    0
    Просмотров:
    58
  5. Andrey Kha
    Ответов:
    0
    Просмотров:
    69

Поделиться этой страницей