【问题标题】:Creating a pdf file by using a string value使用字符串值创建 pdf 文件
【发布时间】:2018-11-07 12:53:41
【问题描述】:

我正在我的 android 应用程序中生成以下字符串,我想知道是否有一种简单的方法可以从中创建 pdf 或 doc(x) 文件?我尝试过 PDFDocument 类,但对我没有用。抱歉,如果有已知的解决方案,我是 android 和 java 新手。

String s = "build:              some build name\r\n" + 
                "Version:            25\r\n" + 
                "Specification:      wtx 26.1\r\n" + 
                "\r\n" + 
                "Files to edit:\r\n" + 
                "doc1.doc\r\n" + 
                "doc2.doc\r\n" + 
                "\r\n" + 
                "Notes:\r\n" + 
                "some notes ...";

【问题讨论】:

    标签: java android file pdf


    【解决方案1】:

    在这里你可以轻松创建一个pdf文件

    private void createALlPdf(String str){
        PdfDocument document = new PdfDocument();
        // crate a page description
        PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(600, 1000, 1).create();
        // start a page
        PdfDocument.Page page = document.startPage(pageInfo);
        Canvas canvas = page.getCanvas();
        Paint paint = new Paint();
        //  paint.setColor(Color.RED);
        // canvas.drawCircle(50, 50, 30, paint);
        Date currentTime = Calendar.getInstance().getTime();
    
        paint.setColor(Color.BLACK);
        // canvas.drawText(wise, 60, 50, paint);
        int y=50;
    
    
        canvas.drawText(str, 80, 50, paint);
    
        canvas = page.getCanvas();
        paint = new Paint();
        // paint.setColor(Color.BLUE);
        // canvas.drawCircle(100, 100, 100, paint);
        document.finishPage(page);
        // write the document content
        String directory_path = Environment.getExternalStorageDirectory().getPath() + "/P-ALLPDF/";
        File file = new File(directory_path);
        if (!file.exists()) {
            file.mkdirs();
        }
        String targetPdf = directory_path+"All record"+currentTime+".pdf";
        File filePath = new File(targetPdf);
        try {
            document.writeTo(new FileOutputStream(filePath));
            Toast.makeText(this, "Pdf file generated in your internal storage under P-ALLPDF directory.Please check!!", Toast.LENGTH_LONG).show();
        } catch (IOException e) {
            Log.e("main", "error "+e.toString());
            Toast.makeText(this, "Something wrong: " + e.toString(),  Toast.LENGTH_LONG).show();
        }
        // close the document
        document.close();
    }
    

    通过传递你的字符串调用函数

    createALlPdf(s);
    

    【讨论】:

      【解决方案2】:

      有一个非常简单的代码块here 可以做类似的事情。检查library page 以查看完整功能和示例使用。

      您只需将 Hello World 部分替换为您正在编写的内容。请注意,您需要在应用程序中授予 STORAGE 权限才能实际保存像这样将文件保存到手机存储中:

      <manifest ...>
          <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
          ...
      </manifest>
      

      那么就可以使用下面的代码了:

      import com.cete.dynamicpdf.*;
      import com.cete.dynamicpdf.pageelements.Label;
      
      import android.app.Activity;
      import android.os.Bundle;
      import android.os.Environment;
      import android.widget.Toast;
      
      public class DynamicPDFHelloWorld extends Activity {
          private static String FILE = Environment.getExternalStorageDirectory()
                  + "/HelloWorld.pdf";
      
          /** Called when the activity is first created. */
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.main);
      
              // Create a document and set it's properties
              Document objDocument = new Document();
              objDocument.setCreator("DynamicPDFHelloWorld.java");
              objDocument.setAuthor("Your Name");
              objDocument.setTitle("Hello World");
      
              // Create a page to add to the document
              Page objPage = new Page(PageSize.LETTER, PageOrientation.PORTRAIT,
                      54.0f);
      
              // Create a Label to add to the page
              String strText = "Hello World...\nFrom DynamicPDF Generator "
                      + "for Java\nDynamicPDF.com";
              Label objLabel = new Label(strText, 0, 0, 504, 100,
                      Font.getHelvetica(), 18, TextAlign.CENTER);
      
              // Add label to page
              objPage.getElements().add(objLabel);
      
              // Add page to document
              objDocument.getPages().add(objPage);
      
              try {
                  // Outputs the document to file
                  objDocument.draw(FILE);
                  Toast.makeText(this, "File has been written to :" + FILE,
                          Toast.LENGTH_LONG).show();
              } catch (Exception e) {
                  Toast.makeText(this,
                          "Error, unable to write to file\n" + e.getMessage(),
                          Toast.LENGTH_LONG).show();
              }
          }
      }
      

      【讨论】:

      • 谢谢。我一定会试一试的。我还遇到过 iText 和 Android PDF Writer (APW)。后者似乎比 DynamicPDF 更轻。您会推荐使用这 3 个中的哪一个?我只想有基本的功能,把格式化的文本写成pdf,没有图片,表格等。
      猜你喜欢
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      • 2022-11-22
      • 2014-04-12
      • 1970-01-01
      • 2020-01-18
      • 2019-07-01
      • 2017-08-21
      相关资源
      最近更新 更多