2017-10-10 7 views
1

Mac에서 바코드를 인쇄하는 데 이상한 문제가 발생했습니다. 모든 Mac에서, 그러나, Windows에서 잘 작동 :Jasperreports가 Mac OS X에서 바코드를 인쇄하지 않음

  • 재스퍼 미리 잘 바코드를 보여줍니다
  • 벽옥을 통해
  • 저장 PDF 바코드 벌금과 PDF 인쇄가 제대로
  • 인쇄 보고서는 바코드를
  • 저장 PDF를 통해 제외 보여줍니다 Mac 프린터 대화 상자에서 바코드 제외

이 보고서에는 Mac에서 잘 인쇄되는 필드의 두 번째 이미지가 직접 포함됩니다. 바코드는 zxing을 통해 생성되고 ByteArrayOutputStream에 png로 기록됩니다. 보고서에 이미지 개체로 추가됩니다. 또한 성공하지 않고 다른 이미지 형식을 시도했습니다.

이 문제는 다양한 프린터와 최신 재스퍼 라이브러리 (6.4.1)에서 재현되었습니다. 로그에 오류 메시지가보고되지 않습니다. 또한 경계 영역보다 약간 작은 바코드를 생성하여 잘리지 않는지 확인했습니다.

나의 Mac으로 현재 8

감사 자바와 10.12.6를 실행 중입니다. 아래

테스트 케이스 (BarcodeTest.java) :

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(); 
      } 
     }); 
    } 
} 

이 jrxml (BarcodeTest.jrxml)와 :

<?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

내가 보고서를 실행하고 단지처럼 보이는 오류 메시지를 받았습니다 하나는 JDK-8038142입니다. 따라서 발생할 수있는 문제는 동일한 Java 버그 (최신 버전에서 수정해야하지만 어떤 이유로 든 여전히 저에게 적합하지 않음) 때문입니다.

간단한 문제 해결 방법은 createBarcode 메서드를 PNG 이미지 데이터 대신 BufferedImage을 반환하도록 변경하는 것입니다. 그게 필요한 것은

return MatrixToImageWriter.toBufferedImage(bm); 
입니다.