Java, PDF

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 980
611
BIT
426
Что не получилось:
- кириллица
- таблицы вне RT-поля. Но думаю это не реально. Придется наверное перегонять весь документ в RT-поле и с ним работать
- чтоб все это работало под Lotus smile.gif
-кириллица - обратить внимание на путь к шрифтам (а также на имена файлов)
-таблицы вне РТ - тогда надо поднимать ДХЛ формы и его парсить
Чего хотелось бы:
- разбор вложений doc и xls
- стили таблицы и текста
- масштабирование изображения
-разбор вложений - по минимуму - это POI -> FOP, здесь уже приводил для ворда, для хухеля не знаю
-стили - ну вот здесь основная "засада" потому как FOP не содержит ссылок, а именно они есть в ДХЛ, т.о. надо переходить от ссылочной модели к прямой врезке (по ИД), я как-то это копал (в два прохода) хслт (одна меняла, др. генерила резалт)
-масштабирование - да вродить там работает (у "той" базе)
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
-таблицы вне РТ - тогда надо поднимать ДХЛ формы и его парсить
Ну в принципе решается методом Rendertoitem документа, а дальше разбор результата.
Стили таблиц уже на подходе. До конца дня наверное доделаю.. по возможности :)
Ну так же есть косяки, если в таблице применяется стиль к тексту.
В общем сделаю - выложу
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 980
611
BIT
426
с масштабированием м.б. засада для случаев с "неправильными" имеджами, к от отсут. инфа о DPI, в проекте я link removed об этом

Добавлено: в базе есть link removed название - checkResolution (агент)
выкладывает инфу на диск С: (в винде) и пишет в дебаг консоль java
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Так... перепилил малость Посмотреть вложение RTdxl2fo.rar
Работает не плохо. Результат более/менее не плохой. Условие применения - предварительный рендер документа в RT-поле временного документа, далее коду скармливаю DXL этого самого временного документа.
Не работает со встроенными видами. Плохо работает с приатаченными файлами
Стили текста не делал.

Оригинал документа
originDoc.PNG

Вот что в итоге получилось
testpdf.PNG
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Поправил стиль текста в таблыцы
Дописал общий стиль для текста
- цвет
- жирный
- курсив

Из некоторых соображений убрал отображение приатаченных файлов. На их месте будет отображаться (см. файл <название файла>)
Аттачи придется куда-то складировать. В моем случае я буду цеплять их в почтовое сообщение
Посмотреть вложение RTdxl2fo_v2.rar
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable"> JAVA-код</div></div><div class="sp-body"><div class="sp-content">
Код:
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* 
*	 http://www.apache.org/licenses/LICENSE-2.0
* 
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/* $Id: ExampleXML2PDF.java 426576 2006-07-28 15:44:37Z jeremias $ */

//Java
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;

//JAXP
import javax.swing.JOptionPane;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Source;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.sax.SAXResult;

//FOP
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory;
import org.apache.fop.apps.MimeConstants;

//Configuration
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
import org.w3c.dom.Document;


/**
* This class demonstrates the conversion of an XML file to PDF using 
* JAXP (XSLT) and FOP (XSL-FO).
*/
public class ExampleXML2PDF {

/**
* Main method.
* @param args command-line arguments
*/
public static void main(String[] args) {
try {
System.out.println("FOP ExampleXML2PDF\n");
System.out.println("Preparing...");

// Setup directories
File baseDir = new File("d:/lotus/domino/data/");
File outDir = new File(baseDir, "");

// Setup input and output files			
File xmlfile = new File(baseDir, "names.dxl");
//File xsltfile = new File(baseDir, "dxl2fo.xsl");
File xsltfile = new File(baseDir, "RTdxl2fo_v2.xsl");			

File pdffile = new File(outDir, "ResultXML2PDF.pdf");
//File conffile = new File(baseDir, "userconfig.xml");


//=================================================================
convertXML2FO(xmlfile, xsltfile, foFile );
//=================================================================

System.out.println("Input: XML (" + xmlfile + ")");
System.out.println("Stylesheet: " + xsltfile);
System.out.println("Output: PDF (" + pdffile + ")");
System.out.println();
System.out.println("Transforming...");

// configure fopFactory as desired
FopFactory fopFactory = FopFactory.newInstance();

FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
// configure foUserAgent as desired

// Setup output
OutputStream out = new java.io.FileOutputStream(pdffile);
out = new java.io.BufferedOutputStream(out);

try {
// Construct fop with desired output format
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);

// Setup XSLT
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(new StreamSource(xsltfile));

// Set the value of a <param> in the stylesheet
transformer.setParameter("versionParam", "2.0");

// Setup input for XSLT transformation
Source src = new StreamSource(xmlfile);

// Resulting SAX events (the generated FO) must be piped through to FOP
Result res = new SAXResult(fop.getDefaultHandler());

// Start XSLT transformation and FOP processing
transformer.transform(src, res);
} finally {
out.close();
}

System.out.println("Success!");
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
e.printStackTrace(System.err);
System.exit(-1);
}
}

public static void convertXML2FO(File xml, File xslt, File fo)
throws IOException, TransformerException {

//Setup output
OutputStream out = new java.io.FileOutputStream(fo);
try {
//Setup XSLT
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(new StreamSource(xslt));

//Setup input for XSLT transformation
Source src = new StreamSource(xml);

//Resulting SAX events (the generated FO) must be piped through to FOP
Result res = new StreamResult(out);

//Start XSLT transformation and FOP processing
transformer.transform(src, res);
} finally {
out.close();
}
}

}
Ну и собственно результат:
testpdf.PNG

VladSh, такого фидбэка достаточно?

Дополнение. Шаблон для ячейки лучше заменить на это.
Добавил объединение ячеек и столбцов.
Код:
<xsl:template match="ldn:tablecell">
<fo:table-cell >

<xsl:attribute name="border">
<xsl:value-of select="concat('solid ', @borderwidth, ' ', ../../@cellbordercolor)" />
</xsl:attribute>		

<xsl:attribute name="background-color">
<xsl:value-of select="@bgcolor" />
</xsl:attribute>		

<xsl:attribute name="number-rows-spanned">
<xsl:value-of select="@rowspan" />
</xsl:attribute>		

<xsl:attribute name="number-columns-spanned">
<xsl:value-of select="@columnspan" />
</xsl:attribute>		

<fo:block>			
<xsl:apply-templates/>			
</fo:block>

</fo:table-cell>
</xsl:template>
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Пытаюсь разобраться с кириллицей. Не получается :)
FOP 1.0
Конфигурацию подключаю так
<!--shcode--><pre><code class='java'>fopFactory.setUserConfig(conffile);[/CODE]

Файлы метрик есть. Лежат с фонтами тут file:/d://lotus//domino//data
<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='xml'><?xml version="1.0"?>

<!-- NOTE: This is the version of the configuration -->
<fop version="1.0">

<!-- Base URL for resolving relative URLs -->
<base>file:/d://lotus//domino</base>

<!-- Font Base URL for resolving relative font URLs -->
<font-base>file:/d://lotus//domino//data</font-base>

<!--hyphenation-base>c:/MyWay/hyph/</hyphenation-base -->

<!-- Source resolution in dpi (dots/pixels per inch) for determining the size of pixels in SVG and bitmap images, default: 72dpi -->
<source-resolution>300</source-resolution>
<!-- Target resolution in dpi (dots/pixels per inch) for specifying the target resolution for generated bitmaps, default: 72dpi -->
<target-resolution>300</target-resolution>

<strict-validation>false</strict-validation>


<!-- Default page-height and page-width, in case
value is specified as auto -->
<default-page-settings height="297mm" width="210mm"/>

<!-- Information for specific renderers -->
<!-- Uses renderer mime type for renderers -->
<renderers>
<renderer mime="application/pdf">
<filterList>
<!-- provides compression using zlib flate (default is on) -->
<value>flate</value>

<!-- encodes binary data into printable ascii characters (default off)
This provides about a 4:5 expansion of data size -->
<!-- <value>ascii-85</value> -->

<!-- encodes binary data with hex representation (default off)
This filter is not recommended as it doubles the data size -->
<!-- <value>ascii-hex</value> -->
</filterList>

<fonts>

<font metrics-url="arial.xml" kerning="yes" embed-url="arial.ttf">
<font-triplet name="Arial" style="normal" weight="normal"/>
<font-triplet name="ArialMT" style="normal" weight="normal"/>
</font>

<font metrics-url="arialbd.xml" kerning="yes" embed-url="arialbd.ttf">
<font-triplet name="Arial" style="normal" weight="bold"/>
<font-triplet name="ArialMT" style="normal" weight="bold"/>
</font>

<font metrics-url="ariali.xml" kerning="yes" embed-url="ariali.ttf">
<font-triplet name="Arial" style="italic" weight="normal"/>
<font-triplet name="ArialMT" style="italic" weight="normal"/>
</font>

<font metrics-url="arialbi.xml" kerning="yes" embed-url="arialbi.ttf">
<font-triplet name="Arial" style="italic" weight="bold"/>
<font-triplet name="ArialMT" style="italic" weight="bold"/>
</font>

</fonts>

<!-- This option lets you specify additional options on an XML handler -->
<!--xml-handler namespace="http://www.w3.org/2000/svg">
<stroke-text>false</stroke-text>
</xml-handler-->

</renderer>

<renderer mime="application/postscript">
<!-- This option forces the PS renderer to rotate landscape pages -->
<!--auto-rotate-landscape>true</auto-rotate-landscape-->

<!-- This option lets you specify additional options on an XML handler -->
<!--xml-handler namespace="http://www.w3.org/2000/svg">
<stroke-text>false</stroke-text>
</xml-handler-->
</renderer>

<renderer mime="application/vnd.hp-PCL">
</renderer>

<!-- MIF does not have a renderer
<renderer mime="application/vnd.mif">
</renderer>
-->

<renderer mime="image/svg+xml">
<format type="paginated"/>
<link value="true"/>
<strokeText value="false"/>
</renderer>

<renderer mime="application/awt">
</renderer>

<renderer mime="text/xml">
</renderer>

<!-- RTF does not have a renderer
<renderer mime="text/rtf">
</renderer>
-->

<renderer mime="text/plain">
<pageSize columns="80"/>
</renderer>

</renderers>

</fop>[/CODE]

И получаю ошибку
<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">
Код:
Failed to read font metrics file arial.xml
org.apache.fop.apps.FOPException: Missing metrics-version attribute - please regenerate the font metrics file with a more recent version of FOP.
org.xml.sax.SAXException: Missing metrics-version attribute - please regenerate the font metrics file with a more recent version of FOP.
at org.apache.fop.fonts.FontReader.createFont(FontReader.java:93)
at org.apache.fop.fonts.FontReader.<init>(FontReader.java:140)
at org.apache.fop.fonts.LazyFont.load(LazyFont.java:119)
at org.apache.fop.fonts.LazyFont.getAscender(LazyFont.java:241)
at org.apache.fop.fonts.Font.getAscender(Font.java:106)
at org.apache.fop.layoutmgr.BlockLayoutManager.initialize(BlockLayoutManager.java:87)
at org.apache.fop.layoutmgr.AbstractLayoutManager.getChildLM(AbstractLayoutManager.java:120)
at org.apache.fop.layoutmgr.FlowLayoutManager.getNextKnuthElements(FlowLayoutManager.java:69)
at org.apache.fop.layoutmgr.PageBreaker.getNextKnuthElements(PageBreaker.java:216)
at org.apache.fop.layoutmgr.AbstractBreaker.getNextBlockList(AbstractBreaker.java:692)
at org.apache.fop.layoutmgr.PageBreaker.getNextBlockList(PageBreaker.java:149)
at org.apache.fop.layoutmgr.PageBreaker.getNextBlockList(PageBreaker.java:132)
at org.apache.fop.layoutmgr.AbstractBreaker.doLayout(AbstractBreaker.java:337)
at org.apache.fop.layoutmgr.PageBreaker.doLayout(PageBreaker.java:85)
at org.apache.fop.layoutmgr.PageSequenceLayoutManager.activateLayout(PageSequenceLayoutManager.java:107)
at org.apache.fop.area.AreaTreeHandler.endPageSequence(AreaTreeHandler.java:238)
at org.apache.fop.fo.pagination.PageSequence.endOfNode(PageSequence.java:120)
at org.apache.fop.fo.FOTreeBuilder$MainFOHandler.endElement(FOTreeBuilder.java:349)
at org.apache.fop.fo.FOTreeBuilder.endElement(FOTreeBuilder.java:177)
at org.apache.xml.serializer.ToXMLSAXHandler.endElement(ToXMLSAXHandler.java:261)
at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1399)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411)
at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1374)
at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:393)
at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:176)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411)
at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2281)
at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1367)
at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:709)
at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1284)
at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1262)
at ExampleXML2PDF.main(ExampleXML2PDF.java:121)
Caused by: org.xml.sax.SAXException: Missing metrics-version attribute - please regenerate the font metrics file with a more recent version of FOP.
at org.apache.fop.fonts.apps.TTFReader.checkMetricsVersion(TTFReader.java:495)
at org.apache.fop.fonts.FontReader.startElement(FontReader.java:166)
at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.apache.fop.fonts.FontReader.createFont(FontReader.java:91)
... 31 more

---------

org.xml.sax.SAXException: Missing metrics-version attribute - please regenerate the font metrics file with a more recent version of FOP.
at org.apache.fop.fonts.apps.TTFReader.checkMetricsVersion(TTFReader.java:495)
at org.apache.fop.fonts.FontReader.startElement(FontReader.java:166)
at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.apache.fop.fonts.FontReader.createFont(FontReader.java:91)
at org.apache.fop.fonts.FontReader.<init>(FontReader.java:140)
at org.apache.fop.fonts.LazyFont.load(LazyFont.java:119)
at org.apache.fop.fonts.LazyFont.getAscender(LazyFont.java:241)
at org.apache.fop.fonts.Font.getAscender(Font.java:106)
at org.apache.fop.layoutmgr.BlockLayoutManager.initialize(BlockLayoutManager.java:87)
at org.apache.fop.layoutmgr.AbstractLayoutManager.getChildLM(AbstractLayoutManager.java:120)
at org.apache.fop.layoutmgr.FlowLayoutManager.getNextKnuthElements(FlowLayoutManager.java:69)
at org.apache.fop.layoutmgr.PageBreaker.getNextKnuthElements(PageBreaker.java:216)
at org.apache.fop.layoutmgr.AbstractBreaker.getNextBlockList(AbstractBreaker.java:692)
at org.apache.fop.layoutmgr.PageBreaker.getNextBlockList(PageBreaker.java:149)
at org.apache.fop.layoutmgr.PageBreaker.getNextBlockList(PageBreaker.java:132)
at org.apache.fop.layoutmgr.AbstractBreaker.doLayout(AbstractBreaker.java:337)
at org.apache.fop.layoutmgr.PageBreaker.doLayout(PageBreaker.java:85)
at org.apache.fop.layoutmgr.PageSequenceLayoutManager.activateLayout(PageSequenceLayoutManager.java:107)
at org.apache.fop.area.AreaTreeHandler.endPageSequence(AreaTreeHandler.java:238)
at org.apache.fop.fo.pagination.PageSequence.endOfNode(PageSequence.java:120)
at org.apache.fop.fo.FOTreeBuilder$MainFOHandler.endElement(FOTreeBuilder.java:349)
at org.apache.fop.fo.FOTreeBuilder.endElement(FOTreeBuilder.java:177)
at org.apache.xml.serializer.ToXMLSAXHandler.endElement(ToXMLSAXHandler.java:261)
at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1399)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411)
at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1374)
at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:393)
at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:176)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411)
at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2281)
at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1367)
at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:709)
at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1284)
at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1262)
at ExampleXML2PDF.main(ExampleXML2PDF.java:121)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 980
611
BIT
426
у меняж в коде агенте все расписано - не надо никаких метрик:<!--shcode--><pre><code class='java'> final static String sUserConfig="<?xml version='1.0'?>"+
"<fop version='1.0'>"+
"<renderers>"+
"<renderer mime='application/pdf'>"+
"<fonts>"+
" <!-- TTF fonts -->"+
" <!-- Arial -->"+
"<font kerning='yes' embed-url='"+fontBasePath+"tahoma.ttf'>"+
" <font-triplet name='Arial' style='normal' weight='normal'/>"+
"</font>"+[/CODE]
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
у меняж в коде агенте все расписано - не надо никаких метрик:<!--shcode--><pre><code class='java'> final static String sUserConfig="<?xml version='1.0'?>"+
"<fop version='1.0'>"+
"<renderers>"+
"<renderer mime='application/pdf'>"+
"<fonts>"+
" <!-- TTF fonts -->"+
" <!-- Arial -->"+
"<font kerning='yes' embed-url='"+fontBasePath+"tahoma.ttf'>"+
" <font-triplet name='Arial' style='normal' weight='normal'/>"+
"</font>"+[/CODE]
Все победил. Работает.
Проблема была в путях к шрифтам. Но странно конечно.
Полный путь не подошел, а вот относительный по файлу userconfig - все заработало.
Сейчас буду пробовать это все в лотус тулить :(
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 980
611
BIT
426
учитывая что конфа для фонтов не шибко большая - её можно хранить как текст, в доке нотуса, и подставлять путь прям в хмл
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 980
611
BIT
426
ЗЫЖ pardef, я так понял, еще не рассматривался?!
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 980
611
BIT
426
не то чтобы не так - его нет в шаблоне ;)
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
не то чтобы не так - его нет в шаблоне ;)
А нужно? я просто еще не столкнулся с такой потребностью :)
Да и не нашел там ничего полезного :)
Кроме как данных о форматировании текста ячеек таблиц.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 980
611
BIT
426
там границы и табуляции, кот. отражаются на булетах (например)
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
рисовать PDF из XML-документа это хорошо, но много проблем особенно с вычисляемым текстом и полями :)
Такой метод хорош для статичных форм.
Наверное придется пробовать парсить HTML формы.
Пробую так (на входе html-файл)
<!--shcode--><pre><code class='java'>Tidy tidy = new Tidy();
Document xmlDoc = tidy.parseDOM(input, null);[/CODE]
Если xmlDoc сохранить в файл - то получаю фигню вместо кирилического текста:
Хотя входной файл содержит читабельный текст.
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Победил. Решается так:
<!--shcode--><pre><code class='java'>Tidy tidy = new Tidy();
tidy.setInputEncoding("UTF-8");
tidy.setOutputEncoding("UTF-8");
tidy.setWraplen(Integer.MAX_VALUE);
tidy.setPrintBodyOnly(true);
tidy.setXmlOut(true);
tidy.setSmartIndent(true);
Document xmlDoc = tidy.parseDOM(input, null);[/CODE]
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 980
611
BIT
426
в ХМЛ есть переменные {$name} кот. с успехом цепляются из пропертей (в т.ч. файла) и подсовываются процессору
не вижу сложностей с динамикой ;)
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
lmike
Пробовал ли цеплять аттачи в PDF?
Пробую как в документации... правда не совсем ясно в какое место шаблона это надо вписать ;)
<!--shcode--><pre><code class='xml'><fo:declarations>
<pdf:embedded-file filename="myfile.pdf" src="data:application/pdf;base64,<DATA>"/>
</fo:declarations>[/CODE]
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 980
611
BIT
426
нет - не пробовал...
но не понял - почему именно так, а не
вот из этого
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!