Как создать PDF-файл с помощью iText или какой-либо другой библиотеки на Android? - PullRequest
7 голосов
/ 08 декабря 2011

Как создать PDF-файл, используя iText или другую библиотеку на Android?

Есть ли учебник по iText для Android?

Спасибо

Ответы [ 5 ]

10 голосов
/ 21 января 2012

Вы можете использовать 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();

Также не забудьте использовать разрешение на запись во внешнее хранилище в manifest.xml.

9 голосов
/ 24 ноября 2015

Это просто, например

Здесь Код в моем репозитории

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'

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>

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();
        }
    }

  }

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;
            }
        }}

Результат

Удачи

2 голосов
/ 17 сентября 2013

Это мой пример кода для создания PDF-файла с текстом и изображением содержание с использованием библиотеки Itext и для хранения файла PDF во внешнем Место хранения. Единственное, вам нужно скачать itext библиотеки и добавьте его в свой проект.

private void createPdf() {
                // TODO Auto-generated method stub
                com.itextpdf.text.Document document = new com.itextpdf.text.Document();

                 try {
                        String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/vindroid";

                        File dir = new File(path);
                            if(!dir.exists())
                                dir.mkdirs();

                        Log.d("PDFCreator", "PDF Path: " + path);


                        File file = new File(dir, "sample.pdf");
                        FileOutputStream fOut = new FileOutputStream(file);

                        PdfWriter.getInstance(document, fOut);

                        //open the document
                        document.open();


                        Paragraph p1 = new Paragraph("Sample PDF CREATION USING IText");
                        Font paraFont= new Font(Font.FontFamily.COURIER);
                        p1.setAlignment(Paragraph.ALIGN_CENTER);
                        p1.setFont(paraFont);

                         //add paragraph to document    
                         document.add(p1);

                         Paragraph p2 = new Paragraph("This is an example of a simple paragraph");
                         Font paraFont2= new Font(Font.FontFamily.COURIER,14.0f,0, CMYKColor.GREEN);
                         p2.setAlignment(Paragraph.ALIGN_CENTER);
                         p2.setFont(paraFont2);

                         document.add(p2);

                         ByteArrayOutputStream stream = new ByteArrayOutputStream();
                         Bitmap bitmap = BitmapFactory.decodeResource(getBaseContext().getResources(), R.drawable.ic_launcher);
                         bitmap.compress(Bitmap.CompressFormat.JPEG, 100 , stream);
                         Image myImg = Image.getInstance(stream.toByteArray());
                         myImg.setAlignment(Image.MIDDLE);

                         //add image to document
                         document.add(myImg);




                 } catch (DocumentException de) {
                         Log.e("PDFCreator", "DocumentException:" + de);
                 } catch (IOException e) {
                         Log.e("PDFCreator", "ioException:" + e);
                 } 
                 finally
                 {
                         document.close();
                 }

            }      
0 голосов
/ 03 марта 2015
package com.cete.androidexamples.dynamicpdf.helloworld;

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();
        }
    }
}

добавить DynamicPDF в файлы libs Вы можете загрузить его из ссылка

0 голосов
/ 08 декабря 2011

Я использовал iText в Java-приложении Swing - он хорошо работал для создания некоторых базовых 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);        
        }
    }        

}

Если вам нужна дополнительная информация, дайте мне знать.Удачи!

...