如何在Android上使用iText或其他一些库创建PDF文件?

Khu*_*ant 7 pdf android pdf-generation itext pdflib

如何在Android上使用iText或其他一些库创建PDF文件?

iText上有没有关于android的教程?

谢谢

小智 12

您可以使用iText创建PDF.使用最新版本(5.1.3)并在构建路径中仅包含itextpdf-5.1.3.jar.你可以使用这样的东西来完成pdf的创建.

Document document = new Document();
file = Environment.getExternalStorageDirectory().getPath() + "/Hello.pdf"
PdfWriter.getInstance(document,new FileOutputStream(file));
document.open();
Paragraph p = new Paragraph("Hello PDF");
document.add(p);
document.close();
Run Code Online (Sandbox Code Playgroud)

另外,不要忘记使用权限写入manifest.xml中的外部存储.


Dav*_*kro 9

例如,这很简单

这里的代码在我的代理中

gradle.build

compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.madgag:scpkix-jdk15on:1.47.0.1'
compile 'com.itextpdf:itextpdf:5.0.6'
Run Code Online (Sandbox Code Playgroud)

activity_main.xml中

 <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.hackro.itext.MainActivity">

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btnwrite"
        android:text="PDF"
        android:onClick="GeneratePDF"
        />
    </RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

MainActivity.java

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import com.itextpdf.text.pdf.BaseFont;
import java.io.File;

public class MainActivity extends Activity {

    private static final String LOG_TAG = "GeneratePDF";


    private BaseFont bfBold;

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



    }


    public void GeneratePDF(View view)
    {
        // TODO Auto-generated method stub
        String filename = "david";
        String filecontent = "Contenido";
        Metodos fop = new Metodos();
        if (fop.write(filename, filecontent)) {
            Toast.makeText(getApplicationContext(),
                    filename + ".pdf created", Toast.LENGTH_SHORT)
                    .show();
        } else {
            Toast.makeText(getApplicationContext(), "I/O error",
                    Toast.LENGTH_SHORT).show();
        }
    }

  }
Run Code Online (Sandbox Code Playgroud)

Metodos.java

 import android.util.Log;

    import com.itextpdf.text.BaseColor;
    import com.itextpdf.text.Document;
    import com.itextpdf.text.DocumentException;
    import com.itextpdf.text.Element;
    import com.itextpdf.text.Font;
    import com.itextpdf.text.Paragraph;
    import com.itextpdf.text.Phrase;
    import com.itextpdf.text.pdf.PdfPCell;
    import com.itextpdf.text.pdf.PdfPTable;
    import com.itextpdf.text.pdf.PdfWriter;

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

    /**
     * Created by hackro on 24/11/15.
     */
    public class Metodos {


        public Boolean write(String fname, String fcontent) {
            try {
                String fpath = "/sdcard/" + fname + ".pdf";
                File file = new File(fpath);

                if (!file.exists()) {
                    file.createNewFile();
                }

                Font bfBold12 = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.BOLD, new BaseColor(0, 0, 0));
                Font bf12 = new Font(Font.FontFamily.TIMES_ROMAN, 12);


                Document document = new Document();

                PdfWriter.getInstance(document,
                        new FileOutputStream(file.getAbsoluteFile()));
                document.open();

                document.add(new Paragraph("Sigueme en Twitter!"));

                document.add(new Paragraph("@DavidHackro"));
                document.close();

                return true;
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            } catch (DocumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return false;
            }
        }}
Run Code Online (Sandbox Code Playgroud)

结果

祝好运

  • iTextpdf v5.0.6被列为依赖项.我有两个问题.1. 5.0.6是疯了.坚持使用新版本的新应用程序.2.您使用的是iText Java而不是iTextG(Android端口).Android端口有一些小的修改.举几个例子:排除Android API(java.awt)中不存在的API的使用和防止命名空间冲突(BouncyCastle). (2认同)

小智 0

我在 java swing 应用程序中使用了 iText - 它可以很好地创建一些基本的 PDF 文件。代码是这样的:

    @Override public void buildPDF(List<Folder> folders) {        
    Document document = new Document();
    String fname = "";
    boolean open = false;
    try {
            // step 2:
            // we create a writer that listens to the document
            // and directs a PDF-stream to a file
            fname = filename(getName()) + "-" + filename(getDataset().getName()) + ".pdf";

            PdfWriter writer = PdfWriter.getInstance(document,
                            new FileOutputStream(fname));

            for (int i = 0; i < folders.size(); i++ ) {
                // grab the folder
                LIFolder f = (LIFolder) folders.get(i);

                if (f == null) continue;

                open = true;
                break;
            }

            // we have no valid folders
            if (folders.size() > 0 && !open) {
                // they selected an empty row
                javax.swing.JOptionPane.showMessageDialog(null, BUNDLE.getString("report-none-selected"), 
                        BUNDLE.getString("report-none-selected-title"), 
                        javax.swing.JOptionPane.ERROR_MESSAGE);
                return;
            }

            if (folders.size() == 0) {
                // get all folders from dataset
                folders = FolderFinder.findAll(getSession(), getDataset());
            }

            open = false;
            for (int i = 0; i < folders.size(); i++ ) {
                // grab the folder
                LIFolder f = (LIFolder) folders.get(i);

                if (f == null) continue;

                if (!open) {
                    open = true;
                    document.open();
                }

                Paragraph p = new Paragraph(BUNDLE.getString("report-heading-summary-main"), getPageHeadingFont());
                p.setAlignment("center");
                document.add(p);
                p = new Paragraph(BUNDLE.getString("report-heading-summary-main-sub"), this.pageHeadingFont1);
                p.setAlignment("center");
                document.add(p);

                blankLine(document);
                drawLine(writer);

                ///////////////////////////////////////////////////////////////////////////////////////////////////
                // Primary Statement Details
                ///////////////////////////////////////////////////////////////////////////////////////////////////                    
                p = new Paragraph("Primary Statement Details", this.pageHeadingFont2);
                p.setAlignment("center");
                document.add(p);

                blankLine(document);
                PdfPTable table = new PdfPTable(4);

                table.addCell(new BorderlessCell(new Paragraph("Dataset:", getFieldHeadingFont())));
                BorderlessCell cell = new BorderlessCell(new Paragraph(getDataset().getName(), getTextFont()));
                cell.setColspan(3);
                table.addCell(cell);

                table.addCell(new BorderlessCell(new Paragraph("Data Entry Clerk:", getFieldHeadingFont())));
                cell = new BorderlessCell(new Paragraph(
                        (f.getDataEntryClerk() != null ? f.getDataEntryClerk().toDescriptionPathString() : emptyIfNull(null)), 
                        getTextFont()));
                cell.setColspan(3);
                table.addCell(cell);

                table.setWidthPercentage(100);
                cell = new BorderlessCell(new Paragraph("Statement Number:", getFieldHeadingFont()));
                table.addCell(cell);
                table.addCell(new BorderlessCell(new Paragraph(f.getReferenceId(), getTextFont())));

                table.addCell(new BorderlessCell(new Paragraph("Statement Date:", getFieldHeadingFont())));

                String strDate = "";
                java.util.Date date = f.getStatementDate();
                if (date != null) {
                    SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); 
                    strDate = formatter.format(date);
                }
                table.addCell(new BorderlessCell(new Paragraph(strDate, getTextFont())));

                table.addCell(new BorderlessCell(new Paragraph("Statement Location:", getFieldHeadingFont())));
                cell = new BorderlessCell(new Paragraph(emptyIfNull(f.getTakerLocation()), getTextFont()));
                cell.setColspan(3);
                table.addCell(cell);

                table.addCell(new BorderlessCell(new Paragraph("Statement keywords:", getFieldHeadingFont())));
                cell = new BorderlessCell(new Paragraph(emptyIfNull(f.getKeywords()), getTextFont()));
                cell.setColspan(3);
                table.addCell(cell);

                document.add(table);
                ///////////////////////////////////////////////////////////////////////////////////////////////////


                ///////////////////////////////////////////////////////////////////////////////////////////////////
                // Statement Giver's Details
                ///////////////////////////////////////////////////////////////////////////////////////////////////                    
                LIPerson p01 = null;
                Set<Actor> actors = f.getActors();
                Iterator iter = actors.iterator();
                while (iter.hasNext()) {
                    Actor actor = (Actor) iter.next();
                    if (actor instanceof LIPerson) {
                        LIPerson person = (LIPerson) actor;
                        if (person.getReferenceId().toString().equalsIgnoreCase("p01") ) {
                            p01 = person;
                            break;
                        }
                    }
                }

                blankLine(document);
                drawLine(writer);
                p = new Paragraph(new Chunk("Statement Giver's Details", this.pageHeadingFont2));
                p.setAlignment("center");                        
                document.add(p);

                java.util.ArrayList giver = new java.util.ArrayList();
                if (p01 != null)
                    giver.add(p01);

                table = new PdfPTable(2);
                table.setWidthPercentage(100f);
                table.addCell(new BorderlessCell(new Paragraph("Name of Statement Giver:", getFieldHeadingFont())));
                table.addCell(new BorderlessCell(new Paragraph(ActorsToString(giver), getTextFont())));

                table.addCell(new BorderlessCell(new Paragraph("Sex:", getFieldHeadingFont())));
                if (p01 == null)
                    table.addCell(new BorderlessCell(new Paragraph(emptyIfNull("TBD"), getTextFont())));
                else
                    table.addCell(new BorderlessCell(new Paragraph((p01.getSex() != null ? p01.getSex().toString() : ""), getTextFont())));

                table.addCell(new BorderlessCell(new Paragraph("Tribe:", getFieldHeadingFont())));
                if (p01 == null)
                    table.addCell(new BorderlessCell(new Paragraph(emptyIfNull(null), getTextFont())));
                else
                    table.addCell(new BorderlessCell(
                            new Paragraph((p01.getEthnicityOrTribe() != null ? p01.getEthnicityOrTribe().toDescriptionPathString() : emptyIfNull(null)), 
                            getTextFont())));

                table.addCell(new BorderlessCell(new Paragraph("Nationality:", getFieldHeadingFont())));
                if (p01 == null)
                    table.addCell(new BorderlessCell(new Paragraph(emptyIfNull(null), getTextFont())));
                else
                    table.addCell(new BorderlessCell(
                            new Paragraph((p01.getNationality() != null ? p01.getNationality().toDescriptionPathString() : emptyIfNull(null)), 
                            getTextFont())));

                table.addCell(new BorderlessCell(new Paragraph("Marital Status:", getFieldHeadingFont())));
                table.addCell(new BorderlessCell(new Paragraph(emptyIfNull(f.getMaritalStatus()), getTextFont())));

                table.addCell(new BorderlessCell(new Paragraph("Education Level:", getFieldHeadingFont())));
                table.addCell(new BorderlessCell(new Paragraph(emptyIfNull(f.getEducationLevel()), getTextFont())));

                table.addCell(new BorderlessCell(new Paragraph("County of Origin:", getFieldHeadingFont())));
                table.addCell(new BorderlessCell(new Paragraph(emptyIfNull(f.getCountyOfOrigin()), getTextFont())));

                table.addCell(new BorderlessCell(new Paragraph("Mother's Name:", getFieldHeadingFont())));
                table.addCell(new BorderlessCell(new Paragraph(emptyIfNull(f.getMothersName()), getTextFont())));

                table.addCell(new BorderlessCell(new Paragraph("Father's Name:", getFieldHeadingFont())));
                table.addCell(new BorderlessCell(new Paragraph(emptyIfNull(f.getFathersName()), getTextFont())));

                table.addCell(new BorderlessCell(new Paragraph("# of Dependents:", getFieldHeadingFont())));
                table.addCell(new BorderlessCell(new Paragraph(Integer.toString(f.getNumDependents()), getTextFont())));

                table.addCell(new BorderlessCell(new Paragraph("Phone Number:", getFieldHeadingFont())));
                table.addCell(new BorderlessCell(new Paragraph(emptyIfNull(f.getPhoneNumber()), getTextFont())));

                document.add(table);

                ///////////////////////////////////////////////////////////////////////////////////////////////////
                // Summary
                ///////////////////////////////////////////////////////////////////////////////////////////////////                    
                blankLine(document);
                drawLine(writer);
                p = new Paragraph(new Chunk("Summary", this.pageHeadingFont2));
                p.setAlignment("center");                        
                document.add(p);
                p = new Paragraph(new Chunk(emptyIfNull(f.getSourceSummary()), getTextFont()));
                document.add(p);

                ///////////////////////////////////////////////////////////////////////////////////////////////////
                // Incident(s)
                ///////////////////////////////////////////////////////////////////////////////////////////////////                                        
                Set<Act> acts = f.getActs();

                if (acts.size() > 0) {
                    // sort them by id
                    Hashtable map = new Hashtable();
                    Iterator it = acts.iterator();
                    String[] ids = new String[acts.size()];
                    int x = 0;
                    while (it.hasNext()) {
                        LIAct act = (LIAct) it.next();
                        String index = Integer.toString(act.getId());
                        map.put(index, act);

                        ids[x++] = index;
                    }
                    java.util.Arrays.sort(ids);

                    blankLine(document);
                    drawLine(writer);
                    p = new Paragraph(new Chunk("Act(s)", this.pageHeadingFont2));
                    p.setAlignment("center");                        
                    document.add(p);

                    blankLine(document);
                    table = new PdfPTable(4);
                    table.setWidthPercentage(100);

                    for (int y = 0; y < ids.length; y++) {
                        LIAct act = (LIAct) map.get(ids[y]);

                        table.addCell(new BorderlessCell(new Paragraph("Act ID:", getFieldHeadingFont())));
                        cell = new BorderlessCell(new Paragraph(act.getReferenceId(), getTextFont()));
                        cell.setColspan(3);
                        table.addCell(cell);

                        table.addCell(new BorderlessCell(new Paragraph("Start Date:", getFieldHeadingFont())));
                        table.addCell(new BorderlessCell(new Paragraph((act.getWhen() != null ? act.getWhen().toString():""), getTextFont())));

                        table.addCell(new BorderlessCell(new Paragraph("End Date:", getFieldHeadingFont())));
                        table.addCell(new BorderlessCell(new Paragraph((act.getUntil() != null?act.getUntil().toString():""), getTextFont())));

                        table.addCell(new BorderlessCell(new Paragraph("Location of act:", getFieldHeadingFont())));                            
                        p = new Paragraph(emptyIfNull(act.getWhere().toString()), getTextFont());
                        p.setAlignment(Paragraph.ALIGN_LEFT);
                        cell = new BorderlessCell(p);
                        cell.setColspan(3);                            
                        table.addCell(cell);

                        table.addCell(new BorderlessCell(new Paragraph("Precise Location:", getFieldHeadingFont())));                            
                        p = new Paragraph(emptyIfNull(act.getPreciseLocation()), getTextFont());
                        p.setAlignment(Paragraph.ALIGN_LEFT);
                        cell = new BorderlessCell(p);
                        cell.setColspan(3);                            
                        table.addCell(cell);

                        table.addCell(new BorderlessCell(new Paragraph("Violation:", getFieldHeadingFont())));                            
                        p = new Paragraph(emptyIfNull(act.getViolation().toDescriptionPathString()), getTextFont());
                        p.setAlignment(Paragraph.ALIGN_LEFT);
                        cell = new BorderlessCell(p);
                        cell.setColspan(3);                            
                        table.addCell(cell);

                        table.addCell(new BorderlessCell(new Paragraph("Description:", getFieldHeadingFont())));                                         
                        p = new Paragraph(emptyIfNull(act.getDescriptionLocation()), getTextFont());
                        p.setAlignment(Paragraph.ALIGN_LEFT);
                        cell = new BorderlessCell(p);
                        cell.setColspan(3);                            
                        table.addCell(cell);

                        // add empty cell
                        cell = new BorderlessCell(new Paragraph(""));
                        cell.setColspan(4);
                        table.addCell(cell);                            
                        cell = new BorderlessCell(new Paragraph(""));
                        cell.setColspan(4);
                        table.addCell(cell);                            
                    }

                    document.add(table);
                }                    

                /////////////////////////////////////////////////////////////////////////////////////////////////
                // Victims
                /////////////////////////////////////////////////////////////////////////////////////////////////
                List<Actor> victims = this.getAllVictims(f);

                if (!victims.isEmpty()) {
                    blankLine(document);
                    drawLine(writer);
                    String strVictims = ActorsToString(victims);
                    p = new Paragraph(new Chunk("Victim(s)", this.pageHeadingFont2));
                    p.setAlignment("center");                        
                    document.add(p);

                    p = new Paragraph(new Chunk("Name(s) of Victim(s): ", getFieldHeadingFont()));
                    p.add(new Chunk(strVictims, getTextFont()));
                    document.add(p);

                    String gender = ActorsToGender(victims);
                    p = new Paragraph(new Chunk("Gender: ", getFieldHeadingFont()));
                    p.add(new Chunk(gender, getTextFont()));
                    document.add(p);
                }

                /////////////////////////////////////////////////////////////////////////////////////////////////

                /////////////////////////////////////////////////////////////////////////////////////////////////
                // Perps
                /////////////////////////////////////////////////////////////////////////////////////////////////
                List<Actor> perps = this.getAllPerpetrators(f);
                if (!perps.isEmpty()) {
                    blankLine(document);
                    drawLine(writer);
                    p = new Paragraph(new Chunk("Perpetrator(s)", this.pageHeadingFont2));
                    p.setAlignment("center");                        
                    document.add(p);

                    String strPerps = ActorsToString(perps);
                    p = new Paragraph(new Chunk("Name(s) of alleged perpetrator(s): ", getFieldHeadingFont()));
                    p.add(new Chunk(strPerps, getTextFont()));
                    document.add(p);
                }
                /////////////////////////////////////////////////////////////////////////////////////////////////

                document.newPage();
            }

    } catch (DocumentException de) {
            System.err.println(de.getMessage());
    } catch (java.io.IOException ioe) {
            System.err.println(ioe.getMessage());
    }

    // step 5: we close the document
    if (open) {
        document.close();

        if (!fname.equals("")) {
            // launch it
            Reports.LaunchPDF(fname);        
        }
    }        

}
Run Code Online (Sandbox Code Playgroud)

如果您需要更多信息,请告诉我。祝你好运!