Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PDFBox-嵌入RTF内容_Java_Pdf_Rtf_Pdfbox - Fatal编程技术网

Java PDFBox-嵌入RTF内容

Java PDFBox-嵌入RTF内容,java,pdf,rtf,pdfbox,Java,Pdf,Rtf,Pdfbox,我正在使用我的java代码中的PDFBox创建PDF文件。在此期间,我需要在这个新PDF文件之间嵌入一个RTF(富文本格式)文件。我无法通过谷歌找到任何方法来做到这一点 我确信,我无法将正在读取的RTF内容直接写入PDF。尽管我尝试了以下代码,但打开PDF时出现错误。错误表示PDF已损坏 注意:类似的事情可以在C#和VB中完成。因此,我乐观地认为java中肯定也有类似的东西 我正在使用PDFBox 1.8.10 示例代码: public static void main(String arg[]

我正在使用我的java代码中的PDFBox创建PDF文件。在此期间,我需要在这个新PDF文件之间嵌入一个RTF(富文本格式)文件。我无法通过谷歌找到任何方法来做到这一点

我确信,我无法将正在读取的RTF内容直接写入PDF。尽管我尝试了以下代码,但打开PDF时出现错误。错误表示PDF已损坏

注意:类似的事情可以在C#和VB中完成。因此,我乐观地认为java中肯定也有类似的东西

我正在使用PDFBox 1.8.10

示例代码:

public static void main(String arg[])  throws IOException, COSVisitorException
{
    final PDFont font = PDType1Font.HELVETICA_OBLIQUE;
    final int font_size = 8;

    PDDocument document = new PDDocument();
    PDPage page = new PDPage(PDPage.PAGE_SIZE_LETTER);
    document.addPage(page);
    PDPageContentStream contents = new PDPageContentStream(document, page, true, true);
    float x = 10f;
    float y = page.getMediaBox().getHeight();  
    float yOffset = 15f;
    float yCurrent = y - yOffset;  

    contents.beginText();
    contents.moveTextPositionByAmount(x, yCurrent);
    contents.setFont(font, font_size);
    contents.drawString("Start Text before RTF"); 
    contents.endText();

    yCurrent = yCurrent - yOffset;

    FileInputStream fi = new FileInputStream("C:\\Test.rtf");
    StringBuffer sb = new StringBuffer();
    BufferedReader br= new BufferedReader(new InputStreamReader(fi));
    int c;
    try {
        while((c=br.read()) != -1){
            sb.append((char)c);
        }
    } catch (IOException e) {
        throw e;
    }
    br.close();
    String rtfContent = sb.toString();

    contents.beginText();
    contents.moveTextPositionByAmount(x, yCurrent);
    contents.setFont(font, font_size);
    contents.drawString(rtfContent); 
    contents.endText();
    yCurrent = yCurrent - yOffset;

    contents.beginText();
    contents.moveTextPositionByAmount(x, yCurrent);
    contents.setFont(font, font_size);
    contents.drawString("End Text after RTF"); 
    contents.endText();

    contents.close();


    File file = new File("C:\\pdf\\RTF\\RRFSample1.pdf");
    System.out.println("Sample file saved at : " + file.getAbsolutePath());
    document.save(file);
    document.close();
}

:(为什么-1?如果需要的话,请帮助我改进问题。我已对此进行了升级以消除它。有人向下投票速度有点太快,这已经不是第一次了。不过,您有一个误解。RTF是一种复杂的格式,您不能仅通过调用“contents.drawString(rtfContent);”来绘制它。该synfusion代码是一个商业库,可能会解释rtf格式。长话短说:你不能用PDFBox实现这一点。用PDFBox编写PDF是非常低级的。也许itext可以帮助你:谢谢你,Tilman,它很有帮助。尽管有人清楚地提到,使用PDFBox是不可行的。我需要的是,我正在抓住最后一次机会:)。我已使用将RTF转换为PDF。现在是内存中字节数组中的PDF内容。是否可以将此内容附加到使用PDFBox生成的主PDF文件中。有人知道吗?