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