Java:PDF 转换器在 Mac 中工作,但在 Windows 中,生成空的 PDF 文件

标签 java file pdf byte agents-jade

我的 PDF 转换器程序需要一点帮助。

所以,我正在使用 JADE 框架做这个移动代理 PDF 转换器。但是,我面临的问题更多地与我将文本文件转换为 PDF、将其作为二进制文件通过网络发送并恢复 PDF 文件的方式有关。

我编写的程序在我的 MacBook 上运行正常。 但是,在 Windows 上,它将我的 PDF 文件恢复为空 PDF。

这是我用于发送 PDF 文件的代码。

private void sendPDF(File f, String recipient) {
    String content = "";

    if(f != null) {
        try {
            FileInputStream fis = new FileInputStream(f);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();

            int noBytesRead = 0;
            byte[] buffer = new byte[1024];

            while((noBytesRead = fis.read(buffer)) != -1) {
                baos.write(buffer, 0, noBytesRead);
            }

            content = baos.toString();
            fis.close();
            baos.close();

            System.out.println("Successful PDF-to-byte conversion.");
        } catch (Exception e) {
            System.out.println("Exception while converting PDF-to-byte.");
            content = "failed";
            e.printStackTrace();
        }
    } else {
        System.out.println("PDF-to-file conversion failed.");
        content = "failed";
    }

    ACLMessage message = new ACLMessage(ACLMessage.INFORM);
    message.addReceiver(new AID(recipient, AID.ISLOCALNAME));
    message.setContent(content);

    myAgent.send(message);
    System.out.println("PDF document has been sent to requesting client.");
}

而且,这是我用来恢复 PDF 的代码。

private File restorePDF(String content) {
    String dirPDF = dirBuffer + "/" + new Date().getTime() + ".pdf";
    File f = new File(dirPDF);

    try {
        if(!f.exists()) f.createNewFile();

        byte[] buffer = new byte[1024];
        ByteArrayInputStream bais = new ByteArrayInputStream(content.getBytes());
            FileOutputStream fos = new FileOutputStream(f);

        int noBytesRead = 0;
        while((noBytesRead = bais.read(buffer)) != -1) {
                fos.write(buffer, 0, noBytesRead);
    }

        fos.flush();
        fos.close();
        bais.close();
    } catch (Exception e) {
        e.printStackTrace();
        f = null;
    }

    return f;
}

如有任何帮助,我们将不胜感激! :)

最佳答案

问题有点令人困惑,因为没有关于 PDF 内容的具体信息。

我假设你真的想发送字节,实际上发送一个字符串,并且字符串编码在客户端和服务器上是不同的。

这通常是问题发生的地方:

 content = baos.toString();

和:

 content.getBytes()

关于Java:PDF 转换器在 Mac 中工作,但在 Windows 中,生成空的 PDF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7225388/

相关文章:

Java 机器人类 KeyEvent

java - 如何在Java中更改一个文件,同时保持另一个硬链接(hard link)中的内容不变?

java - 将文件从目录复制到另一个,具有文件和目录的路径

java - 将 PDF 与 iText 2.1.7 合并会导致它们缩小

html - 从 HTML 生成的 PDF 第一页中删除页眉 - CSS

java - iText - 将内容添加到现有的 PDF 文件

java - 组布局中的 JLabel - 卡住大小

java - 由于外键约束,数据库插入失败

java - 如何使用 System.out.println 在控制台中打印颜色?

android - textToSpeech.synthetizeToFile 创建损坏的文件?