2017-10-10 18 views
1

Macからバーコードを印刷する際に奇妙な問題が発生しています。すべてがMac上で、しかし、Windows上で正常に動作します:JasperreportsがMac OS Xでバーコードを印刷しない

  • ジャスパープレビューが細かいバーコードを示し
  • 碧玉経由
  • 保存するPDFは、バーコードの罰金とPDFプリントが正しく
  • 印刷レポートは、バーコードに
  • の保存PDF経由を除く示しMac Printerダイアログでバーコードが除外されています

このレポートには、Mac上で正常に印刷されるフィールドからの2番目の画像も含まれています。バーコードはzxingによって生成され、pngとしてByteArrayOutputStreamに書き込まれます。これは、イメージオブジェクトとしてレポートに追加されます。私はまた、成功していない他の画像フォーマットを試しました。

この問題は、さまざまなプリンタと最新のジャスパーライブラリ(6.4.1)で再現されています。ログにエラーメッセージは報告されません。また、境界領域よりもわずかに小さいバーコードを生成して、クリップされないようにしてみました。

どこでもMy Macは、現在のJavaと10.12.6 8.

感謝を実行しています。 (BarcodeTest.java)以下

テストケース:このjrxml(BarcodeTest.jrxml)と

public class BarcodeTest 
{ 
    public static java.io.ByteArrayInputStream createBarcode(String aBarcodeStr, int aAlignmentX, int rotate, int sizeX, int sizeY) 
     throws IOException, WriterException, NotFoundException 
    { 
     Code39Writer c39 = new Code39Writer(); 
     BitMatrix bm = c39.encode(aBarcodeStr.trim(), BarcodeFormat.CODE_39, sizeX, sizeY); 
     ByteArrayOutputStream out = new ByteArrayOutputStream(); 
     MatrixToImageWriter.writeToStream(bm, "PNG", out); 
     return new java.io.ByteArrayInputStream(out.toByteArray()); 
    } 

    public static void main(String[] args) 
    { 
     SwingUtilities.invokeLater(() -> 
     { 
      String thisFile = "BarcodeTest.jrxml"; 
      try 
      { 
       JasperReport jasperReport = JasperCompileManager.compileReport(thisFile); 
       HashMap hm = new HashMap(); 
       JasperPrint jasperPrint = JasperFillManager.fillReport(
        jasperReport, 
        hm, 
        new JREmptyDataSource()); 

       JRViewer jrv = new JRViewer(jasperPrint); 
       JFrame jf = new JFrame("Barcode test"); 
       jf.setSize(800, 600); 
       jf.add(jrv); 
       jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       jf.getContentPane().add(jrv); 
       jf.setLocationRelativeTo(null); 
       jf.setVisible(true); 
      } 
      catch(HeadlessException | JRException e) 
      { 
       e.printStackTrace(); 
      } 
     }); 
    } 
} 

<?xml version="1.0" encoding="Cp1252"?> 
<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="AdvancedReports" columnCount="3" printOrder="Horizontal" pageWidth="595" pageHeight="842" columnWidth="185" columnSpacing="9" leftMargin="9" rightMargin="9" topMargin="62" bottomMargin="6" uuid="7c881f22-0368-4f79-8e3f-8ca0a36dfe37"> 
    <pageHeader> 
     <band height="72"> 
      <textField isBlankWhenNull="true"> 
       <reportElement positionType="Float" x="4" y="35" width="176" height="30" forecolor="#000000" backcolor="#FFFFFF" uuid="1a38a9fe-2887-498f-be6f-758397d57175"/> 
       <textElement textAlignment="Left" verticalAlignment="Middle" rotation="None"/> 
       <textFieldExpression><![CDATA["123456"]]></textFieldExpression> 
      </textField> 
      <image hAlign="Left"> 
       <reportElement x="4" y="4" width="176" height="30" uuid="508b033d-e71c-419d-843f-c23255294533"/> 
       <imageExpression><![CDATA[BarcodeTest.createBarcode("123456",2,0,176,30)]]></imageExpression> 
      </image> 
     </band> 
    </pageHeader> 
</jasperReport> 

答えて

0

私はあなたのレポートを実行し、同じようなエラーメッセージが表示されました1つはJDK-8038142です。したがって、あなたが経験している問題は、同じJavaバグ(最新バージョンで修正する必要がありますが、なんらかの理由でまだ私にとってはうまくいかない)が原因です。

JDKの問題を回避する簡単な方法の1つは、createBarcodeメソッドをPNGイメージデータの代わりにBufferedImageを返すように変更することです。そのために必要なのは

return MatrixToImageWriter.toBufferedImage(bm); 
です
関連する問題