Android 为什么尽管创建了pdf文件,但没有向其传递任何信息,因此在打开文件时出现错误?

Android 为什么尽管创建了pdf文件,但没有向其传递任何信息,因此在打开文件时出现错误?,android,pdf,Android,Pdf,我正在使用itextpdf库在android应用程序中生成PDF报告。我以前在一个应用程序中使用过这个,它工作得非常好。不同之处在于,之前的应用程序使用了一个带有tabhosts的主活动。在新的应用程序中,我在主活动中使用了viewpager,因此我相信当在主活动中单击“保存票证”菜单项时,将从片段中获取的信息传递到主活动中会出现一些通信问题 下面是创建pdf文件的类: package com.application.sweetiean.stlservicing; import android

我正在使用itextpdf库在android应用程序中生成PDF报告。我以前在一个应用程序中使用过这个,它工作得非常好。不同之处在于,之前的应用程序使用了一个带有tabhosts的主活动。在新的应用程序中,我在主活动中使用了viewpager,因此我相信当在主活动中单击“保存票证”菜单项时,将从片段中获取的信息传递到主活动中会出现一些通信问题

下面是创建pdf文件的类:

package com.application.sweetiean.stlservicing;

import android.os.Environment;
import android.util.Log;

import com.application.sweetiean.stlmaintenance.Utility;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * Created by sweetiean on 12/1/2015.
 */
public class Serv_CreatePDF {
public Serv_CreatePDF(){}

public Boolean writepdf(String sysaid) {
    try {
        String fpath = Environment.getExternalStorageDirectory().getPath() + "/" + sysaid + ".pdf";
        File file = new File(fpath);
        // If file does not exists, then create it
        if (!file.exists()) {
            file.createNewFile();
        }



        // step 1
        Document document = new Document();
        // step 2
        PdfWriter.getInstance(document,new FileOutputStream(file.getAbsoluteFile()));

        Font font1 = new Font(Font.FontFamily.TIMES_ROMAN, 16, Font.NORMAL);
        Font font2 = new Font(Font.FontFamily.TIMES_ROMAN, 20, Font.BOLDITALIC|Font.UNDERLINE);

        // step 3
        document.open();

        // step 4
        Paragraph paragraph1 = new Paragraph("SERVICE REPORT", font2);
        paragraph1.setSpacingBefore(25);
        paragraph1.setAlignment(Element.ALIGN_CENTER);
        paragraph1.setIndentationLeft(50);
        paragraph1.setIndentationRight(50);

        Paragraph paragraph2 = new Paragraph(Utility.getTodaysDate(), font2);
        paragraph2.setSpacingAfter(25);
        //paragraph2.setSpacingBefore(25);
        paragraph2.setAlignment(Element.ALIGN_CENTER);
        paragraph2.setIndentationLeft(50);
        paragraph2.setIndentationRight(50);

        Paragraph paragraph3 = new Paragraph("SERVICING", font2);
        paragraph1.setSpacingBefore(25);
        paragraph1.setAlignment(Element.ALIGN_CENTER);
        paragraph1.setIndentationLeft(50);
        paragraph1.setIndentationRight(50);

        Paragraph paragraph4 = new Paragraph("REPLACEMENT", font2);
        paragraph1.setSpacingBefore(25);
        paragraph1.setAlignment(Element.ALIGN_CENTER);
        paragraph1.setIndentationLeft(50);
        paragraph1.setIndentationRight(50);

        document.add(paragraph1);
        document.add(paragraph2);
        document.add(new Paragraph("Sysaid ID: " + Serv_BaseDataFragment.sysaid.getText().toString(), font1));
        document.add(new Paragraph("Task Type: " + Serv_BaseDataFragment.taskSpinner.getSelectedItem().toString(), font1));
        document.add(new Paragraph("Customer: " + Serv_BaseDataFragment.customer.getText().toString(), font1));
        document.add(new Paragraph("Site ID: " + Serv_BaseDataFragment.siteId.getText().toString(), font1));
        document.add(new Paragraph("Address: " + Serv_BaseDataFragment.address.getText().toString(), font1));
        document.add(new Paragraph("Region: " + Serv_BaseDataFragment.regionSpinner.getSelectedItem().toString(), font1));
        document.add(new Paragraph("Location Coordinates: " + Serv_BaseDataFragment.locationCoordinates.getText().toString(), font1));

        document.add(new Paragraph(" "));
        document.add(paragraph3);

        document.add(new Paragraph("DVR Firmware Update: " + ((ServicingFragment.dvrFirmware.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("Firmware Version: " + ServicingFragment.firmwareVersion.getText().toString(), font1));
        document.add(new Paragraph("Workstation: " + ((ServicingFragment.workstation.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("Test Computer Performance: " + ((ServicingFragment.testCP.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("Clean Computer: " + ((ServicingFragment.cleanPC.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("Serial Number: " + ServicingFragment.workstationSerial.getText().toString(), font1));
        document.add(new Paragraph("Remarks: " + ServicingFragment.remarks.getText().toString(), font1));
        document.add(new Paragraph("DVR: " + ((ServicingFragment.dvr.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("Serial Number: " + ServicingFragment.dvrSerial.getText().toString(), font1));
        document.add(new Paragraph("Service and Clean Cameras: " + ((ServicingFragment.cleanCam.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("Check UPS Backup Status: " + ((ServicingFragment.checkUPS.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("UPS: " + ServicingFragment.UPSSpinner.getSelectedItem().toString(), font1));
        document.add(new Paragraph("Serial Number: " + ServicingFragment.UPSSerial.getText().toString(), font1));
        document.add(new Paragraph("Status: " + ServicingFragment.statusSpinner.getSelectedItem().toString(), font1));

        document.add(new Paragraph(" "));
        document.add(paragraph4);

        document.add(new Paragraph("UPS: " + ((ReplacementFragment.UPS.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("UPS Type: " + ReplacementFragment.UPSSpinner.getSelectedItem().toString(), font1));
        document.add(new Paragraph("Serial Number: " + ReplacementFragment.UPSSerial.getText().toString(), font1));
        document.add(new Paragraph("Workstation: " + ((ReplacementFragment.workstation.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("Serial Number: " + ReplacementFragment.workstationSerial.getText().toString(), font1));
        document.add(new Paragraph("Hard Disk Drive: " + ((ReplacementFragment.hdd.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("500GB: " + ((ReplacementFragment._500GB.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("1TB: " + ((ReplacementFragment._1TB.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("2TB: " + ((ReplacementFragment._2TB.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("Serial Number: " + ReplacementFragment.hddSerial.getText().toString(), font1));
        document.add(new Paragraph("DVR: " + ((ReplacementFragment.dvr.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("DVR Type: " + ReplacementFragment.dvrType.getText().toString(), font1));
        document.add(new Paragraph("Serial Number: " + ReplacementFragment.dvrSerial.getText().toString(), font1));
        document.add(new Paragraph("Cameras: " + ((ReplacementFragment.cameras.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("Fix Box: " + ((ReplacementFragment.fixBox.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("Quantity: " + ReplacementFragment.fixBoxQty.getText().toString(), font1));
        document.add(new Paragraph("Serial Number: " + ReplacementFragment.fixBoxSerial.getText().toString(), font1));
        document.add(new Paragraph("Dome IR: " + ((ReplacementFragment.domeIR.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("Quantity: " + ReplacementFragment.domeOty.getText().toString(), font1));
        document.add(new Paragraph("Serial Number: " + ReplacementFragment.domeSerial.getText().toString(), font1));
        document.add(new Paragraph("Bullet IR: " + ((ReplacementFragment.bulletIR.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("Quantity: " + ReplacementFragment.bulletQty.getText().toString(), font1));
        document.add(new Paragraph("Serial Number: " + ReplacementFragment.bulletSerial.getText().toString(), font1));
        document.add(new Paragraph("Housing: " + ((ReplacementFragment.housing.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("Quantity: " + ReplacementFragment.housingQty.getText().toString(), font1));
        document.add(new Paragraph("Serial Number: " + ReplacementFragment.housingSerial.getText().toString(), font1));
        document.add(new Paragraph("Power Supply: " + ((ReplacementFragment.powerSupply.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("12V DC Power Supply: " + ((ReplacementFragment._12vPwrSupply.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("12V DC Power Box: " + ((ReplacementFragment._12vPwrBox.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("Monitor: " + ((ReplacementFragment.monitor.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("Serial Number: " + ReplacementFragment.monitorSerial.getText().toString(), font1));
        document.add(new Paragraph("Other Issues: " + ((ReplacementFragment.otherIssues.isChecked()) ? "Checked" : "Not Checked"), font1));
        document.add(new Paragraph("Issues: " + ReplacementFragment.issues.getText().toString(), font1));

        document.add(new Paragraph(" "));
        document.add(new Paragraph("STL Rep Name: " + Serv_BaseDataFragment.stl_rep_name, font1));
        document.add(new Paragraph("STL Rep Position: " + Serv_BaseDataFragment.stl_rep_post, font1));
        document.add(new Paragraph("STL Rep Signature: ", font1));
        String stl_filePathSign = STLSignatureActivity.tempDir +
                Serv_BaseDataFragment.stl_rep_sign;
        Image stl_imgSign = Image.getInstance(stl_filePathSign);
        stl_imgSign.scaleToFit(150, 150);
        document.add(stl_imgSign);

        document.add(new Paragraph(" "));
        document.add(new Paragraph("Client Rep Name: " + Serv_BaseDataFragment.client_rep_name, font1));
        document.add(new Paragraph("Client Rep Position: " + Serv_BaseDataFragment.client_rep_post, font1));
        document.add(new Paragraph("Client Rep Signature: ", font1));
        String client_filePathSign = STLSignatureActivity.tempDir +
                Serv_BaseDataFragment.client_rep_sign;
        Image client_imgSign = Image.getInstance(client_filePathSign);
        client_imgSign.scaleToFit(150, 150);
        document.add(client_imgSign);

        // step 5
        document.close();

        Log.d("Success", "Success");
        return true;
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    } catch (DocumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return false;
    }
}


}
下面是我尝试调用pdf类的活动:

public class ServicingActivity extends AppCompatActivity {

public static String url;
SharedPreferences settings;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_servicing);

    init();

}

public void init(){

    Toolbar toolbar;
    TabLayout tabLayout;
    ViewPager viewPager;

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);

}


private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new Serv_OverviewFragment(), "Overview");
    adapter.addFragment(new Serv_BaseDataFragment(), "Base Data");
    adapter.addFragment(new ServicingFragment(), "Servicing");
    adapter.addFragment(new ReplacementFragment(), "Replacement");
    viewPager.setAdapter(adapter);
}

class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}




/*public void save_final(){

    Serv_BaseDataFragment baseFragment = (Serv_BaseDataFragment)getSupportFragmentManager().findFragmentById(R.id.baseDataTab);
    baseFragment.serv_insertToBaseData_db();

    ServicingFragment serviceFragment = (ServicingFragment)getSupportFragmentManager().findFragmentById(R.id.servicingTab);
    serviceFragment.insertToServicing_db();

    ReplacementFragment replaceFragment = (ReplacementFragment)getSupportFragmentManager().findFragmentById(R.id.baseDataTab);
    replaceFragment.insertToReplacement_db();

    Toast.makeText(this, "ALL DATA STORED SUCCESSFULLY", Toast.LENGTH_LONG).show();
    Intent intent = getIntent();
    finish();
    startActivity(intent);


}*/

public void writePdf(){
    String filename = Serv_BaseDataFragment.sysaid.getText().toString();

    Serv_CreatePDF fop = new Serv_CreatePDF();

    if (fop.writepdf(filename)) {
        Toast.makeText(getApplicationContext(), filename +  ".pdf created", Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(getApplicationContext(), "I/O error", Toast.LENGTH_SHORT).show();
    }
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_maintenance, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        Intent intent = new Intent(this, Serv_SettingsActivity.class);
        startActivity(intent);
        return true;
    }
    if (id == R.id.save_tickets) {
        //save_final();
        writePdf();
        return true;
    }

    return super.onOptionsItemSelected(item);
}
}
公共类服务活动扩展了AppCompatActivity{
公共静态字符串url;
共享引用设置;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u服务);
init();
}
公共void init(){
工具栏;
表格布局;
查看页面查看页面;
toolbar=(toolbar)findviewbyd(R.id.toolbar);
设置支持操作栏(工具栏);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
viewPager=(viewPager)findViewById(R.id.viewPager);
设置viewPager(viewPager);
tabLayout=(tabLayout)findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
}
专用无效设置ViewPager(ViewPager ViewPager){
ViewPagerAdapter适配器=新的ViewPagerAdapter(getSupportFragmentManager());
addFragment(新的Serv_OverviewFragment(),“Overview”);
addFragment(新的Serv_BaseDataFragment(),“Base Data”);
addFragment(新服务片段(),“服务”);
addFragment(new ReplacementFragment(),“Replacement”);
viewPager.setAdapter(适配器);
}
类ViewPagerAdapter扩展了FragmentPagerAdapter{
私有最终列表MFFragmentList=new ArrayList();
私有最终列表MFFragmentTitleList=new ArrayList();
公共视图页面编辑器(碎片管理器){
高级经理;
}
@凌驾
公共片段getItem(int位置){
返回MFFragmentList.get(位置);
}
@凌驾
public int getCount(){
返回MFFragmentList.size();
}
public void addFragment(片段片段,字符串标题){
添加(片段);
MFFragmentTitleList.add(标题);
}
@凌驾
公共字符序列getPageTitle(int位置){
返回MFFragmentTitleList.get(位置);
}
}
/*公共无效保存_final(){
Serv_BaseDataFragment baseFragment=(Serv_BaseDataFragment)getSupportFragmentManager().findFragmentById(R.id.baseDataTab);
baseFragment.serv_inserta_db();
ServicingFragment serviceFragment=(ServicingFragment)getSupportFragmentManager().findFragmentById(R.id.servicingTab);
serviceFragment.InsertToService_db();
ReplacementFragment replaceFragment=(ReplacementFragment)getSupportFragmentManager().findFragmentById(R.id.baseDataTab);
replaceFragment.insertoreplacement_db();
Toast.makeText(这是“所有数据存储成功”,Toast.LENGTH_LONG.show();
Intent=getIntent();
完成();
星触觉(意向);
}*/
public void writepf(){
字符串filename=Serv_BaseDataFragment.sysaid.getText().toString();
Serv_CreatePDF fop=new Serv_CreatePDF();
if(fop.writepdf(文件名)){
Toast.makeText(getApplicationContext(),filename+“.pdf已创建”,Toast.LENGTH\u SHORT.show();
}否则{
Toast.makeText(getApplicationContext(),“I/O错误”,Toast.LENGTH_SHORT.show();
}
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.menu\u维护,菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
//noinspection SimplifiableIf语句
if(id==R.id.action\u设置){
Intent Intent=新Intent(这是Serv_SettingsActivity.class);
星触觉(意向);
返回true;
}
if(id==R.id.save_票证){
//保存_final();
writePdf();
返回true;
}
返回super.onOptionsItemSelected(项目);
}
}
toast一直给我一个I/O错误。调试时,会创建文件,但不会向其中写入任何数据。当我从设备上的文件管理器进行检查时,我可以确认创建的文件


任何帮助都将不胜感激。谢谢。

我遇到的问题是我试图添加到文档中的签名图像造成的<代码>字符串客户端\u filePathSign=STLSignatureActivity.tempDir+
Serv_BaseDataFragment.client_rep_sign我重复了与初始签名图像相同的活动
STLSignatureActivity
应该是
ClientSignatureActivity
。这是一个复制粘贴错误。

我面临的问题是我试图添加到文档中的签名图像造成的<代码>字符串客户端\u filePathSign=STLSignatureActivity.tempDir+
Serv_BaseDataFragment.client_rep_sign我重复了与初始签名图像相同的活动
STLSignatureActivity
应该是
ClientSignatureActivity
。复制粘贴出错。

您使用哪个itext版本?@mkl版本是5.5.3,只是为了确保。。。你在GAE和Android上使用了itextg库的变体,不是吗?@mkl老实说,我不知道那是什么。有一个针对Google App Engine和Android的iText特别版,名为。这个版本没有对Java类和包的引用