使用inputstream通过pdfbox创建pdf

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

我正在尝试将字节数组添加到 pdfbox 框中,但无法实现。请在下面找到代码

 import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    import org.apache.pdfbox.Loader;
    import org.apache.pdfbox.pdmodel.PDDocument;
    import org.apache.pdfbox.pdmodel.PDPage;
    import org.apache.pdfbox.pdmodel.PDPageContentStream;
    import org.apache.pdfbox.pdmodel.font.PDType1Font;
    import org.apache.pdfbox.pdmodel.font.Standard14Fonts;
    
    public class App 
    {
    
    public static String getPDF(Blob l_bContent) throws IOException {
    
    InputStream stream = l_bContent.getBinaryStream();
        byte[] buffer = new byte[8192];
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        int bytesRead;//enter code here
        while ((bytesRead = stream.read(buffer)) != -1) {
            baos.write(buffer, 0, bytesRead);
        }
        byte[] buffer1= baos.toByteArray();
        PDDocument doc = Loader.loadPDF(buffer1);
        PDPage page = new PDPage();
        
        doc.addPage(page);
        
        String fileName = "C:\\Users\\dhamijas\\new.pdf";
        doc.save(fileName);    
    
       stream.close();    
        
         return fileName;
        
    }

    public static void main( String[] args )
    {
       Blob l_bContent =managerservice.getblobcontent();
        App test1 = new App();
        try {
            test1.getPDF(l_bContent);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println( "Hello World!" );
    }
}

错误

java.io.IOException:错误:文件结束,预期行位于偏移量 5 处 你好世界! 在 org.apache.pdfbox.pdfparser.BaseParser.readLine(BaseParser.java:1092) 在org.apache.pdfbox.pdfparser.COSParser.parseHeader(COSParser.java:1609) 在org.apache.pdfbox.pdfparser.COSParser.parsePDFHeader(COSParser.java:1588) 在org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:157) 在org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:136) 在 org.apache.pdfbox.Loader.loadPDF(Loader.java:224) 在 org.apache.pdfbox.Loader.loadPDF(Loader.java:196) 在 org.apache.pdfbox.Loader.loadPDF(Loader.java:176) 在 org.apache.pdfbox.Loader.loadPDF(Loader.java:159) 在 pdftest.testpdf.App.getPDF(App.java:36) 在 pdftest.testpdf.App.main(App.java:85)

java pdf-generation pdfbox
1个回答
0
投票

由于这几乎肯定是由于您的源数据几乎肯定是纯文本,因此请尝试以下操作:

    public static void saveAsPdf(InputStream in, String outputPath) {
        try (PDDocument doc = new PDDocument()) {
            PDPage pdPage = new PDPage();
            doc.addPage(pdPage);

            try (PDPageContentStream contentStream = new PDPageContentStream(doc, pdPage);
                    Scanner s = new Scanner(in)) {
                contentStream.beginText();

                contentStream.setFont(PDType1Font.TIMES_ROMAN, 12);
                contentStream.setLeading(14.5f);
                contentStream.newLineAtOffset(25, 500);

                while (s.hasNextLine()) {
                    contentStream.showText(s.nextLine());
                    contentStream.newLine();
                }

                contentStream.endText();
            }

            doc.save(outputPath);
        } catch (IOException e) {
            e.printStackTrace();    
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.