【问题标题】:Is it possible to convert text into PDF in Android?是否可以在 Android 中将文本转换为 PDF?
【发布时间】:2019-10-16 13:51:14
【问题描述】:

我想通过我的应用程序创建一个 PDF 文件,并希望通过电子邮件将 PDF 文件作为附件发送。在安卓中可以吗?如果是,请说明如何。

【问题讨论】:

  • @simplepi 如果/当您编辑帖子时,请花时间解决所有问题,而不仅仅是琐碎的问题。

标签: android


【解决方案1】:

这里是代码

    Document doc = new Document();
    PdfWriter.getInstance(doc, new FileOutputStream("urgentz.pdf"));
    doc.open();
    Image image = Image.getInstance ("urgentzImageahslkdhaosd.jpg");
    doc.add(new Paragraph("Your text blah bleh"));
    doc.add(image);               
    doc.close();

在您的 android 项目中使用 iText

【讨论】:

  • 嘿,它在“Image image = Image.getInstance ("urgentzImageahslkdhaosd.jpg");”行显示错误显示配置路径
【解决方案2】:
  1. 在 gradle.build 文件中写入以下依赖项implementation 'com.itextpdf:itextg:5.5.10'
  2. 在 AndroidManifest 中 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  3. 在 MainActivity 中编写以下代码

public class MainActivity extends AppCompatActivity { 
Button save;
EditText text;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    save=(Button)findViewById(R.id.save);
    text=(EditText)findViewById(R.id.text);
    save.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(Build.VERSION.SDK_INT> Build.VERSION_CODES.M)
            {
                if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)== PackageManager.PERMISSION_DENIED)
                {
                    String[] parmission={Manifest.permission.WRITE_EXTERNAL_STORAGE};
                    requestPermissions(parmission,1000);
                }
                else savepdf();
            }
            else savepdf();
        }
    });
}
private  void savepdf()
{
    Document doc=new Document();
    String mfile=new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(System.currentTimeMillis());
    String mfilepath= Environment.getExternalStorageDirectory()+"/"+mfile+".pdf";
    Font smallBold=new Font(Font.FontFamily.TIMES_ROMAN,12,Font.BOLD);
    try{
        PdfWriter.getInstance(doc,new FileOutputStream(mfilepath));
        doc.open();
        String mtext=text.getText().toString();
        doc.addAuthor("harikesh");
        doc.add(new Paragraph(mtext,smallBold));
        doc.close();
        Toast.makeText(this, ""+mfile+".pdf"+" is saved to "+mfilepath, Toast.LENGTH_SHORT).show();
    }
    catch (Exception e)
    {
        Toast.makeText(this,"This is Error msg : " +e.getMessage(), Toast.LENGTH_SHORT).show();
    }

}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode)
    {
        case  1000:
            if(grantResults.length>0 && grantResults[0]== PackageManager.PERMISSION_GRANTED)
            {
                savepdf();
            }
            else Toast.makeText(this, "parmission denied..", Toast.LENGTH_SHORT).show();
    }
}
}`

【讨论】:

    【解决方案3】:

    iText 库使用。 请参考答案Here

    iText 示例很多。下面参考网站。 http://www.geek-tutorials.com/java/itext/insert_control_text.php

    【讨论】:

    • 是的,我试过那个代码,我在我的应用程序的任何地方都没有找到 pdf 文件。
    【解决方案4】:

    创建pdf就是这么简单

    如果您使用的是android studio,首先下载droidText.0.2.jar 并添加gradle 文件和libs 文件夹。然后为 PDF 编写此代码

    public void createPDF() {
            Document doc = new Document();
    
    
            try {
                path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/ADUREC";
    
                File dir = new File(path);
                if (!dir.exists())
                    dir.mkdirs();
    
                Log.d("PDFCreator", "PDF Path: " + path);
    
                //This is for random name
                number = new ArrayList<Integer>();
                for (int i = 1; i <= 10; ++i) number.add(i);
                Collections.shuffle(number);
    
                File file = new File(dir, "Document" + number + ".pdf");
                FileOutputStream fOut = new FileOutputStream(file);
                PdfWriter.getInstance(doc, fOut);
    
                //open the document
                doc.open();
    
                Paragraph p1 = new Paragraph("TENANTS : " + tenants.getText().toString());
                Font paraFont = new Font(Font.COURIER);
                p1.setAlignment(Paragraph.ALIGN_CENTER);
                p1.setFont(paraFont);
    
                //add paragraph to document
                doc.add(p1);
    
                Paragraph p2 = new Paragraph("OFFFER NUMBER : " + offer_number.getText().toString());
                Font paraFont2 = new Font(Font.COURIER, 14.0f, Color.GREEN);
                p2.setAlignment(Paragraph.ALIGN_CENTER);
                p2.setFont(paraFont2);
    
                doc.add(p2);
    
                Paragraph p3 = new Paragraph("OFFFER NUMBER : " + offer_number.getText().toString());
                Font paraFont3 = new Font(Font.COURIER, 14.0f, Color.GREEN);
                p3.setAlignment(Paragraph.ALIGN_CENTER);
                p3.setFont(paraFont2);
    
                doc.add(p3);
    
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                Bitmap bitmap = BitmapFactory.decodeResource(getBaseContext().getResources(), R.drawable.logo);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
                Image myImg = Image.getInstance(stream.toByteArray());
                myImg.setAlignment(Image.MIDDLE);
    
    //            add image to document
                doc.add(myImg);
    
                //set footer
                Phrase footerText = new Phrase("ADUREC DOCUMENT");
                HeaderFooter pdfFooter = new HeaderFooter(footerText, true);
                doc.setFooter(pdfFooter);
    
    //            Toast.makeText(getApplicationContext(), "success pdf", Toast
    //                    .LENGTH_LONG).show();
    
            } catch (DocumentException de) {
                Log.e("PDFCreator", "DocumentException:" + de);
            } catch (IOException e) {
                Log.e("PDFCreator", "ioException:" + e);
            } finally {
                doc.close();
            }
    
        }
    

    【讨论】:

      【解决方案5】:

      Kotlin 示例代码:

      您可以使用以下代码创建 pdf 页面并在画布中绘制任何内容。

      fun createPdf(textToPdf: String) {
      
          // create a new document
          val document = PdfDocument()
      
          // crate a page description
          var pageInfo: PdfDocument.PageInfo = PdfDocument.PageInfo.Builder(300, 600, 1).create()
      
          // start a page
          var page: PdfDocument.Page = document.startPage(pageInfo)
          var canvas = page.canvas
          var paint = Paint()
          paint.color = Color.RED
          canvas.drawCircle(50F, 50F, 30F, paint)
          paint.color = Color.BLACK
          canvas.drawText(textToPdf, 80F, 50F, paint)
          //canvas.drawt
          // finish the page
          document.finishPage(page)
          // draw text on the graphics object of the page
      
          // Create Page 2
          pageInfo = PdfDocument.PageInfo.Builder(300, 600, 2).create()
          page = document.startPage(pageInfo)
          canvas = page.canvas
          paint = Paint()
          paint.color = Color.BLUE
          canvas.drawCircle(100F, 100F, 100F, paint)
          document.finishPage(page)
      
          // write the document content
          val directory_path = Environment.getExternalStorageDirectory().path + "/mypdf/"
          val file = File(directory_path)
          if (!file.exists()) {
              file.mkdirs()
          }
          val targetPdf = directory_path + "test-2.pdf"
          val filePath = File(targetPdf)
          try {
              document.writeTo(FileOutputStream(filePath))
              Toast.makeText(mContext, "Done", Toast.LENGTH_LONG).show()
          } catch (e: IOException) {
              Log.e("main", "error " + e.toString())
              Toast.makeText(mContext, "Something wrong: " + e.toString(), Toast.LENGTH_LONG).show()
          }
      
          // close the document
          document.close()
          //isPrinting = false
      }
      

      注意:

      别忘了加external storage write permission

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-06
        • 1970-01-01
        • 1970-01-01
        • 2021-04-20
        • 2011-07-08
        • 2019-10-25
        • 1970-01-01
        相关资源
        最近更新 更多