使用JAI在JAVA中将二进制文本转换为Tiff图像/ PDF

问题描述 投票:3回答:1

我有不同的要求。我正在接收TIFF图像作为二进制文本。我不知道是否可以调用该二进制文本。文本包含非ASCII字符,如下所示

0ÎÀi7°®èý¯Â£ôîÀk1 ü"»£ð‚£Ê£ðü»£ö¿
ŒGÓº?¬hÄr€kðŠîÂ
ŒG*Àkð
¸z «ÿ*ëÿ¢^˾6‚¢êZÒáÿì)eì"‚("¿ÿ€jPšÄ0?<À@Ã\=>P€ª ê¨Eý5?J†¤=oöÃ|(0Ã6ª™P†!*¯Ä0ÿ*¢uÝ¡0Š­jþ &&—ÿ
+§¾È°Ã¡-s§‚2“³˜©Î{é¾pªXp%&ì;PËæ™4ºfŒ˜Îÿ Éû½)¨ŽV“þp¦IÇG˜bþñÿÿi•¼

所以,我厌倦了使用以下代码使用imageIO来阅读此文本,但是会引发错误。

String str = "Binary Mentioned Above";
byte[] b = str.getBytes();
ByteArrayInputStream in = new ByteArrayInputStream(b);
BufferedImage bImageFromConvert = ImageIO.read(in);

TIFFEncodeParam params = new TIFFEncodeParam();
File myNewTIFF_File =  new File("C:\\Projects\\test\\combined.tif");  
ImageIO.write(bImageFromConvert, "TIFF", myNewTIFF_File);

我收到的错误消息是>

Exception in thread "main" java.lang.IllegalArgumentException: image == null!

现在浏览这些帖子,我发现并不是所有的TIF都可以使用ImageIO读取。因此,我在线使用了一个代码,该代码基本上将TIFF转换为PDF。

public static String ImageToPDF(byte[] bytes, String pathFile) {
            String fileName= pathFile + ".pdf";
            Document document = null;

                document = new Document();

            try {
                FileOutputStream fos = new FileOutputStream(fileName);
                PdfWriter writer = PdfWriter.getInstance(document, fos);

                writer.open();
                document.open();

                // Array of bytes we have read from the Binary file
                RandomAccessFileOrArray ra = new RandomAccessFileOrArray(bytes);
                System.out.println("ra ---- "+ra);

                // Get the number of pages the the binary file have inside
                int numberOfPages = TiffImage.getNumberOfPages(ra);
                System.out.println("numberOfPages ------------ "+numberOfPages);

                // Loop through numberOfPages and add them on the document 
                // one by one
                for(int page = 1; page <= numberOfPages; page ++){
                    Image image = TiffImage.getTiffImage(new RandomAccessFileOrArray(bytes),page);
                    image.scaleAbsolute(500, 500);
                    document.add(image);
                }                   

                document.close();
                writer.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return fileName;
             }

    public static void main(String[] args) throws IOException{


        File imgFront = new File("C:\\Projects\\newtest.txt");
        byte[] fileContent =  Files.readAllBytes(imgFront.toPath());
        //fileContent = File

        ImageToPDF(fileContent,"C:\\Projects\\pdfWithImage");

}

我得到的错误为Bad endianness tag (not 0x4949 or 0x4d4d)。当我尝试读取Tiff中的页面时,此错误出现在此行TiffImage.getNumberOfPages(ra);中。我已验证使用Mirth工具创建了tiff的二进制文本,并且tiff有效。我没有足够的方法来解决此问题。非常感谢您的帮助。

我有不同的要求。我正在接收TIFF图像作为二进制文本。我不知道是否可以调用该二进制文本。文本包含如下所示的非ascii字符,如下所示:0Âi7°®èý¯£ôîÀk1ü“»£ð,£... >>

java binary javax.imageio mirth jai
1个回答
0
投票

此问题已解决。发生此问题是因为二进制文本未正确生成,并且它导致了问题。

向客户端发出了以Base64编码格式发送数据的请求。而且现在工作正常。二进制字符集会发生一个问题,即所有非字符都已正确写入文件。这就是任何程序语言都无法正确转换它的原因。

© www.soinside.com 2019 - 2024. All rights reserved.