2016-12-07 7 views
2

データベースからのHTMLがあり、このHTMLでWordレポートを作成したいと考えています。このHTMLはユーザーからのもので、フォーマットされたテキスト(太字、イタリック...)、またはテキスト+埋め込みイメージのみがbase64形式でエンコードされている場合があります。htmlcomponentを使用して埋め込まれたイメージ(base64、data uri)でHTMLテキストをエクスポートするには?

例:

<b>My photo :</b> 
<img src="data:image/png;base64,iVBORw0K... " /> 

我々はtextFieldmarkup="html"と、それはimg HTMLタグでは動作しないことを知っています。 Jasper Studio 6.3.1では、<hc:html/>で試してみましたが、ハードドライブのイメージで動作しますが、埋め込みイメージでは動作しません。つまり、base64暗号化に構文エラーがあると言います。

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="StylesReport" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="30" bottomMargin="30" uuid="53f914b8-f951-4433-971d-6b1819430c56"> 
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/> 
    <property name="net.sf.jasperreports.export.html.embed.image" value="true"/> 
    <import value="org.apache.commons.codec.binar.*"/> 
    <title> 
     <band height="742"> 
      <textField hyperlinkType="Reference" hyperlinkTarget="Blank"> 
       <reportElement x="0" y="30" width="515" height="30" uuid="c2015c9b-9130-4f39-a09e-c341c91d3794"/> 
       <textElement textAlignment="Center"> 
        <font size="18"/> 
       </textElement> 
       <textFieldExpression><![CDATA["HTML Element Report"]]></textFieldExpression> 
      </textField> 
      <componentElement> 
       <reportElement x="0" y="100" width="230" height="110" backcolor="#ADD8E6" uuid="332dd551-e8cd-4cb0-a11f-7325f481017b"/> 
       <hc:html xmlns:hc="http://jasperreports.sourceforge.net/htmlcomponent" xsi:schemaLocation="http://jasperreports.sourceforge.net/htmlcomponent http://jasperreports.sourceforge.net/xsd/htmlcomponent.xsd" scaleType="RetainShape" horizontalAlign="Left" verticalAlign="Middle"> 
        <hc:htmlContentExpression><![CDATA["<p style='background-color:yellow;font-family:verdana;font-size:50px;'>Hi, I am through HTML CODE using HTML Component</p><br><br><img src='data:image/gif;base64,/9j/dkjdkdkdkddk(INSERTIMAGEHEREITSTOOLONG!!!)' alt='Japser Architecture' height='1000' width='1800'>"]]></hc:htmlContentExpression> 
       </hc:html> 
      </componentElement> 
     </band> 
    </title> 
</jasperReport> 

はそれがジャスパーでこれを行うことは可能ですか?私たちは、データベースからHTMLを解析して、たくさんのことを行うのは嫌いです。実際にHTMLをそのままレポートに書いて欲しいと思います。

答えて

6

これは素晴らしいチャレンジです。問題は、サポートされていないことですが、実行できないということではありません。

HTMLコンポーネントは、イメージとしてHTMLをレンダリングするためにJEditorPaneを使用して、ためデフォルトのプロトコルハンドラが存在しない「データ:」Joop Eggenによって

しかし、この優れたanswerあなたは1を追加する方法を示しています。

jrxml(htmlComponentBase64.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="StylesReport" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="30" bottomMargin="30" uuid="53f914b8-f951-4433-971d-6b1819430c56"> 
    <title> 
     <band height="742"> 
      <textField hyperlinkType="Reference" hyperlinkTarget="Blank"> 
       <reportElement x="0" y="30" width="515" height="30" uuid="c2015c9b-9130-4f39-a09e-c341c91d3794"/> 
       <textElement textAlignment="Center"> 
        <font size="18"/> 
       </textElement> 
       <textFieldExpression><![CDATA["HTML Element Report"]]></textFieldExpression> 
      </textField> 
      <componentElement> 
       <reportElement x="0" y="100" width="230" height="110" backcolor="#ADD8E6" uuid="332dd551-e8cd-4cb0-a11f-7325f481017b"/> 
       <hc:html xmlns:hc="http://jasperreports.sourceforge.net/htmlcomponent" xsi:schemaLocation="http://jasperreports.sourceforge.net/htmlcomponent http://jasperreports.sourceforge.net/xsd/htmlcomponent.xsd" scaleType="RetainShape" horizontalAlign="Left" verticalAlign="Middle"> 
        <hc:htmlContentExpression><![CDATA["<p style='background-color:yellow;font-family:verdana;font-size:50px;'>Hi, I am through HTML CODE using HTML Component</p><br><br><img src='data:image/gif;base64,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' alt='Japser Architecture' height='1000' width='1800'>"]]></hc:htmlContentExpression> 
       </hc:html> 
      </componentElement> 
     </band> 
    </title> 
</jasperReport> 

javaの

ジョープEggenのプロトコルハンドラを追加します(も多分素敵upvote彼を属性とすることを忘れないでください)と実行このJavaコードは、この場合、pdfにエクスポートする

public class TestReport { 
    public static void main(String[] args) throws JRException { 

     Handler.install(); //Install Joop's protocol handler 

     //Compile report and fill, no datasource needed 
     JasperReport report = JasperCompileManager.compileReport("htmlComponentBase64.jrxml"); 
     JasperPrint jasperPrint = JasperFillManager.fillReport(report, new HashMap<String, Object>()); 

     //Export to pdf 
     JRPdfExporter exporter = new JRPdfExporter(); 
     exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); 
     exporter.setExporterOutput(new SimpleOutputStreamExporterOutput("pdf/htmlcomponentbase64.pdf")); 
     SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration(); 
     exporter.setConfiguration(configuration); 
     exporter.exportReport(); 

    } 
} 

は、私が含まれるように、ジャスパー・レポートコミュニティでfeature requestを追加した

output

ない素敵なレポート結果を楽しみますが、画像は

を表示されます将来のリリースでのデータプロトコルハンドラ

+1

私は明日仕事でそれをテストします:)ありがとうございます – Guillaume

+0

私たちはテストしていますが、PDFが作成されましたが、イメージは表示されません: '(Joopのプロトコルハンドラとコードを使用しました。バージョンは何ですか? – Guillaume

+0

ハンドラから 'getInputStream()'を経由せず、 'java.protocol.handler.pkgs'システムプロパティにすでに存在しているので、ハンドラはインストールされていないようです。 – Guillaume

関連する問題