使用 PDFdocument 从具有可选文本的位图创建 pdf 文件

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

我正在将 pdf 页面转换为位图,以便能够在我的应用程序中对其进行更改,然后我正在使用 pdfdocument 类创建带有位图的 pdf 文件,但当我在其他 pdf 编辑器应用程序上打开它时,最终的 pdf 文件没有可选择的文本

有没有办法在这些位图上应用文本数据,以便在创建 pdf 文件时可以选择它们

  public void createpdf() throws IOException {
       
        PdfDocument document = new PdfDocument();
            
        for (int i = 0; i < pdfBitmaps.size(); i++) {
            Bitmap bitmap = pdfBitmaps.get(i);


        
            PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(1080, 1920, i+ 1).create();
            PdfDocument.Page page = document.startPage(pageInfo);


            // Draw the bitmap onto the page
            Canvas canvas = page.getCanvas();
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.PNG, 0, bos);
            Bitmap decoded = BitmapFactory.decodeStream(new     ByteArrayInputStream(bos.toByteArray()));

            canvas.drawBitmap(decoded, 0f, 0f, null);
            document.finishPage(page);
        
        }

        
        ContentResolver contentResolver = getContentResolver();
        ContentValues values = new ContentValues();
        values.put(MediaStore.Files.FileColumns.DISPLAY_NAME, "fınal_pdf_deneme");
        values.put(MediaStore.Files.FileColumns.MIME_TYPE, "application/pdf");
        values.put(MediaStore.Files.FileColumns.RELATIVE_PATH,Environment.DIRECTORY_DOCUMENTS);


        Uri uri = ontentResolver.insert(MediaStore.Files.getContentUri("external"),values);
        if (uri != null) {
            try (OutputStream outputStream = contentResolver.openOutputStream(uri)) {
                document.writeTo(outputStream);
                Toast.makeText(this, "File saved successfully", Toast.LENGTH_SHORT).show();
                Log.d("PDF Directory", uri.toString());
            } catch (IOException e) {
                e.printStackTrace();
                Toast.makeText(this, "Failed to save file", Toast.LENGTH_SHORT).show();
            } finally {
                document.close();
            }
        } else {
            Toast.makeText(this, "Failed to create document", Toast.LENGTH_SHORT).show();
        }
    }
android pdf android-recyclerview pdf-generation
1个回答
0
投票

实际上不可能用

PdfDocument
类做你想做的事情,因为它无法编辑现有的 PDF,它只能创建新的 PDF。

一旦将现有 PDF 渲染为位图,您就会失去所有结构和选择性,它只是变成 pdf 中所有元素的图片。

如果您使用

PdfDocument
类及其画布将位图绘制到 PDF,那么您只是将所有元素的图片添加到 PDF,这是不可选择的。

如果您在

drawText
画布上使用画布
PdfDocument
方法,那么这将转换为可选择的本机 PDF 文本元素。

你确实需要使用一个可以编辑 PDF 结构的类,比如 Apache PdfBox,它是 Android 版本

这样,您可以加载文档并将其渲染为位图来显示,但是当您想要添加文本时,您可以将文本添加到内容流中您想要的位置(示例)并重新渲染以显示包含您所做更改的原始文档。

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