Показать в формате pdf пробел размера числа, который я ввел в java в строку

#java #jasper-reports

#java #jasper-отчеты

Вопрос:

Короче говоря: перенесите из java символ UTF-8 ‘ u205F’ или ‘ u2007’ в ireport с идентификатором кодировки pdf -H и шрифтом SansSerif


Основная проблема заключается в печати древовидной структуры в Jasper. В качестве простого способа я создаю строки и печатаю их в одном текстовом поле, но проблема заключается в заполнении слева. Я бы решил это по шрифту, но это выдаст ошибку, если я выберу другой, а затем SansSerif.

В java (Eclipse имеет кодировку UTF-8) я хочу, чтобы в левой панели был пробел размером с число ‘ u205F’ или ‘ u2007’, затем эту строку я хочу распечатать через отчет jasper (jasperreports-javaflow-4.7.1) в PDF, и я хочу иметь соответствующее левое заполнение. iReport Desing имеет идентификатор кодировки -H (Unicode с горизонтальной записью)

    7
        8
     0001
  10
 001
       10
      001
1001
    1111
  

Я использую наше ядро, поэтому я не могу контролировать использование jars.
Ошибка в itext-2.1.7 с другим шрифтом:

 com.lowagie.text.pdf.PdfXConformanceException: All the fonts must be embedded. This one isn't: Helvetica
at com.lowagie.text.pdf.internal.PdfXConformanceImp.checkPDFXConformance(Unknown Source)
at com.lowagie.text.pdf.PdfWriter.addSimple(Unknown Source)
at com.lowagie.text.pdf.PdfContentByte.setFontAndSize(Unknown Source)
at com.lowagie.text.pdf.PdfDocument.writeLineToContent(Unknown Source)
at com.lowagie.text.pdf.ColumnText.go(Unknown Source)
at com.lowagie.text.pdf.ColumnText.go(Unknown Source)
at net.sf.jasperreports.engine.export.SimplePdfTextRenderer.render(SimplePdfTextRenderer.java:125)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportText(JRPdfExporter.java:2164)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:858)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportPage(JRPdfExporter.java:818)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:695)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:396)
  

Хорошо, я добавляю тот же код samle, я могу поместить все свои. потому что он слишком огромен

Jrxml:

 <?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="RU1" pageWidth="595" pageHeight="695" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="0" bottomMargin="0" uuid="4923ab94-9bda-4a2a-98a1-f3924aaf44ef">
    <property name="ireport.zoom" value="2.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <field name="name" class="java.lang.String"/>
    <field name="_THIS" class="my.SimpleClass"/>
    <sortField name="sortCode" type="Variable"/>
    <variable name="listToSubreport_V" class="java.util.List">
        <initialValueExpression><![CDATA[new ArrayList()]]></initialValueExpression>
    </variable>
    <variable name="sortCode" class="java.lang.String" resetType="None">
        <variableExpression><![CDATA[$F{_THIS}.getCompleteCode().replaceAll(" ", "__")]]></variableExpression>
        <initialValueExpression><![CDATA[]]></initialValueExpression>
    </variable>
    <variable name="code" class="java.lang.String" resetType="None">
        <variableExpression><![CDATA[$F{_THIS}.getPaddedCode()]]></variableExpression>
        <initialValueExpression><![CDATA[]]></initialValueExpression>
    </variable>
    <variable name="name" class="java.lang.String" resetType="None">
        <variableExpression><![CDATA[$F{_THIS}.getPadedName()]]></variableExpression>
        <initialValueExpression><![CDATA[]]></initialValueExpression>
    </variable>
    <columnHeader>
        <band height="36" splitType="Stretch">
            <staticText>
                <reportElement uuid="7d799d57-6438-4d88-b111-8dbdef2e7cb4" x="20" y="0" width="96" height="30"/>
                <textElement textAlignment="Left" verticalAlignment="Bottom">
                    <font size="7"/>
                </textElement>
                <text><![CDATA[Code]]></text>
            </staticText>
            <staticText>
                <reportElement uuid="bac26704-4ea8-410a-8fac-eb67f1481791" x="121" y="0" width="259" height="30"/>
                <textElement verticalAlignment="Bottom">
                    <font size="7"/>
                </textElement>
                <text><![CDATA[Name]]></text>
            </staticText>
            <line>
                <reportElement uuid="be781202-5f0a-4652-9ba4-943b7bda9a11" x="0" y="32" width="555" height="1"/>
                <graphicElement>
                    <pen lineWidth="0.5"/>
                </graphicElement>
            </line>
        </band>
    </columnHeader>
    <detail>
        <band height="9" splitType="Stretch">
            <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                <reportElement uuid="8eabcf7a-be05-424e-9f63-e58819f0aeca" x="20" y="0" width="96" height="9"/>
                <textElement textAlignment="Left" markup="none">
                    <font fontName="SansSerif" size="7" pdfEncoding="Identity-H" isPdfEmbedded="false"/>
                </textElement>
                <textFieldExpression><![CDATA[$V{code}]]></textFieldExpression>
            </textField>
            <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                <reportElement uuid="3256d49c-b4e7-44ab-988c-29134977e55a" x="121" y="0" width="259" height="9"/>
                <textElement>
                    <font size="7"/>
                </textElement>
                <textFieldExpression><![CDATA[$V{name}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>
  

Класс:

 public class SimpleClass implements HasId, Serializable {

    @NotNull
    private int id;

    @NotNull
    @Length(min = 4, max = 4)
    private String code;

    @NotNull
    private String name;

    private SimpleClass parent;

    private List<SimpleClass> children = new ArrayList<>();

    public int getId() {
        return id;
    }

    public void setId( int id ) {
        this.id = id;
    }

    public String getCode() {
        return this.code;
    }

    public void setCode( String code ) {
        this.code = code;
    }

    public String getName() {
        return this.name;
    }

    public void setName( String name ) {
        this.name = name;
    }

    public SimpleClass getParent() {
        return this.parent;
    }

    public void setParent( SimpleClass parent ) {
        this.parent = parent;
    }

    public List<SimpleClass> getChildren() {
        return this.children;
    }

    public List<String> getParentsCode() {
        if ( getParent() == null )
            return Collections.emptyList();

        List<String> result = new ArrayList<>();
        SimpleClass simCls = this;
        while ( ( simCls = simCls.getParent() ) != null )
            result.add( simCls.getCode() );
        return resu<
    }

    public String getCompleteCode() {
        StringBuilder sb = new StringBuilder();
        for ( String code : getParentsCode() )
            sb.append( code );
        sb.append( code );
        return sb.toString();
    }

    public String getPaddedCode() {
        StringBuilder sb = new StringBuilder();
        for ( String code : getParentsCode() )
            for ( int i = 0; i < code.length(); i   )
                sb.append( "  " ); // should be u2007
        sb.append( code );
        return sb.toString();
    }

    public String getPaddedName() {
        StringBuilder sb = new StringBuilder();
        for ( String code : getParentsCode() )
            for ( int i = 0; i < code.length(); i   )
                sb.append( "  " ); // should be u2007
        sb.append( name );
        return sb.toString();
    }
}
  

Reportddatasource:

 // IBeanCollectionReportDataSource is our core interface
public class SimpleClassReportDataSource implements IBeanCollectionReportDataSource {

    // ReportDataContext is our class
    public List<HasId> getData( ReportDataContext context, Map<String, Object> jasperParameters ) {
        // ibatis read list from database by where clause  
        List<SimpleClass> list = simpleClassDao.getGetList( Filtr myFiltr );

        // Our class to create map by record id
        Map<Integer, SimpleClass> map = EntityUtil.createIdMap( list );

        // Fill all parents, and get max code length
        int maxCodeLength = 0;
        for ( SimpleClass sc : list ) {
            if ( sc.getCode().length() > maxCodeLength )
                maxCodeLength = sc.getCode().length();

            Integer rodicId = ( sc.getParent() == null ) ? null : sc.getParent().getId();
            if ( rodicId != null )
                sc.setParent( map.get( rodicId ) );
            else
                sc.setParent( null );
        }

        // Fill code to same length
        for ( SimpleClass sc : list ) {
            if ( sc.getCode().length() < maxCodeLength )
                sc.setCode( leftPad( sc.getCode(), maxCodeLength, ' ' ) ); // should be u2007

            SimpleClass parent = sc.getParent();
            while ( parent != null ) {
                parent = parent.getParent();
            }
        }

        return new ArrayList<>( list );
    }
}
  

Но, возможно, отчет jasper может обрабатывать дерево самостоятельно, но я пока не знаю, как

Комментарии:

1. В чем ваш вопрос?

2. Я хочу напечатать символ utf8 ‘ u2007’ в отчете pdf, теперь он не работает. Работает только с базовым пространством и табулятором. Или, если есть какой-нибудь простой способ печати дерева, я буду рад этому

3. Вы должны опубликовать свой код (Java jrxml ). Что такое u2007 символ?

4. Код опубликован, и вам следует использовать Google 😉 graphemica.com/