2011-07-13 42 views
20

使用iText可以在android应用程序生成PDF文件,PDF文件被生成,但是,
图像不包含在PDF文件中如何在Android中生成带有图像的PDF文件?

+1

你的意思是你想查看的Android –

+1

重复的问题PDF文件,你不觉得? http://stackoverflow.com/questions/2499960/how-to-create-pdfs-in-android-sdk –

+1

可能很高兴合并这两个问题,因为它们包含有用的代码。 –

回答

24
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.net.URL; 
import java.util.Date; 

import com.itextpdf.text.Anchor; 
import com.itextpdf.text.BadElementException; 
import com.itextpdf.text.BaseColor; 
import com.itextpdf.text.Chapter; 
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.List; 
import com.itextpdf.text.ListItem; 
import com.itextpdf.text.Paragraph; 
import com.itextpdf.text.Phrase; 
import com.itextpdf.text.Section; 
import com.itextpdf.text.pdf.PdfImportedPage; 
import com.itextpdf.text.pdf.PdfPCell; 
import com.itextpdf.text.pdf.PdfPTable; 
import com.itextpdf.text.pdf.PdfReader; 
import com.itextpdf.text.pdf.PdfWriter; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Environment; 
import android.widget.TextView; 

public class Main extends Activity { 

    private static String FILE = Environment.getExternalStorageDirectory()+File.separator+"firstPdf.pdf"; 
    private static Font catFont = new Font(Font.FontFamily.TIMES_ROMAN, 18, 
      Font.BOLD); 
    private static Font redFont = new Font(Font.FontFamily.TIMES_ROMAN, 12, 
      Font.NORMAL, BaseColor.RED); 
    private static Font subFont = new Font(Font.FontFamily.TIMES_ROMAN, 16, 
      Font.BOLD); 
    private static Font smallBold = new Font(Font.FontFamily.TIMES_ROMAN, 12, 
      Font.BOLD); 
    TextView txt1; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     txt1=(TextView) findViewById(R.id.textView1); 

     try { 
      Document document = new Document(); 
      PdfWriter.getInstance(document, new FileOutputStream(FILE)); 
      document.open(); 
      addMetaData(document); 
      addTitlePage(document); 
      addContent(document); 
      //createImage(); 
      document.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    private static void addMetaData(Document document) { 
     document.addTitle("My first PDF"); 
     document.addSubject("Using iText"); 
     document.addKeywords("Java, PDF, iText"); 
     document.addAuthor("Lars Vogel"); 
     document.addCreator("Lars Vogel"); 
    } 

    private static void addTitlePage(Document document) 
      throws DocumentException { 
     Paragraph preface = new Paragraph(); 
     // We add one empty line 
     addEmptyLine(preface, 1); 
     // Lets write a big header 
     preface.add(new Paragraph("Title of the document", catFont)); 

     addEmptyLine(preface, 1); 
     // Will create: Report generated by: _name, _date 
     preface.add(new Paragraph(
       "Report generated by: " + System.getProperty("user.name") + ", " + new Date(), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 
       smallBold)); 
     addEmptyLine(preface, 3); 
     preface.add(new Paragraph(
       "This document describes something which is very important ", 
       smallBold)); 

     addEmptyLine(preface, 8); 

     preface.add(new Paragraph(
       "This document is a preliminary version and not subject to your license agreement or any other agreement with vogella.de ;-).", 
       redFont)); 

     document.add(preface); 
     // Start a new page 
     document.newPage(); 
    } 

    private static void addContent(Document document) throws DocumentException { 
     Anchor anchor = new Anchor("ESTIMATING APP", catFont); 
     anchor.setName("ESTIMATING APP"); 

     // Second parameter is the number of the chapter 
     Chapter catPart = new Chapter(new Paragraph(anchor), 1); 

     Paragraph subPara = new Paragraph("Subcategory 1", subFont); 
     Section subCatPart = catPart.addSection(subPara); 
     subCatPart.add(new Paragraph("Hello")); 

     subPara = new Paragraph("Subcategory 2", subFont); 
     subCatPart = catPart.addSection(subPara); 
     subCatPart.add(new Paragraph("Paragraph 1")); 
     subCatPart.add(new Paragraph("Paragraph 2")); 
     subCatPart.add(new Paragraph("Paragraph 3")); 

     // Add a list 
     createList(subCatPart); 
     Paragraph paragraph = new Paragraph(); 
     addEmptyLine(paragraph, 5); 
     subCatPart.add(paragraph); 

     // Add a table 
     createTable(subCatPart); 

     // Now add all this to the document 
     document.add(catPart); 

     // Next section 
     anchor = new Anchor("Second Chapter", catFont); 
     anchor.setName("Second Chapter"); 

     // Second parameter is the number of the chapter 
     catPart = new Chapter(new Paragraph(anchor), 1); 

     subPara = new Paragraph("Subcategory", subFont); 
     subCatPart = catPart.addSection(subPara); 
     subCatPart.add(new Paragraph("This is a very important message")); 

     // Now add all this to the document 
     document.add(catPart); 

    } 

    private static void createTable(Section subCatPart) 
      throws BadElementException { 
     PdfPTable table = new PdfPTable(3); 

     // t.setBorderColor(BaseColor.GRAY); 
     // t.setPadding(4); 
     // t.setSpacing(4); 
     // t.setBorderWidth(1); 

     PdfPCell c1 = new PdfPCell(new Phrase("Job Name:")); 
     c1.setHorizontalAlignment(Element.ALIGN_CENTER); 
     table.addCell(c1); 

     c1 = new PdfPCell(new Phrase("Test 001")); 
     c1.setHorizontalAlignment(Element.ALIGN_CENTER); 
     table.addCell(c1); 

     c1 = new PdfPCell(new Phrase("")); 
     c1.setHorizontalAlignment(Element.ALIGN_CENTER); 
     table.addCell(c1); 
     table.setHeaderRows(1); 

     table.addCell("Date:"); 
     table.addCell("1.1"); 
     table.addCell(""); 
     table.addCell("Labor Rate:"); 
     table.addCell("2.2"); 
     table.addCell(""); 
     table.addCell("Labor Cost:"); 
     table.addCell("3.2"); 
     table.addCell("3.3"); 

     subCatPart.add(table); 

    } 

    private static void createList(Section subCatPart) { 
     List list = new List(true, false, 10); 
     list.add(new ListItem("First point")); 
     list.add(new ListItem("Second point")); 
     list.add(new ListItem("Third point")); 
     subCatPart.add(list); 
    } 

    private static void addEmptyLine(Paragraph paragraph, int number) { 
     for (int i = 0; i < number; i++) { 
      paragraph.add(new Paragraph(" ")); 
     } 
    } 
+8

注意:开发人员需要从[iTextPdf](http://itextpdf.com/terms-of-use/)购买商业许可证,以便在非开放源代码应用程序中使用iTextPdf库。 –

+4

@OctavianDamiean好的,但是当我有答案时该怎么办,但是没有很好的解释..你可以请写给我看,因为*你没有答案* [你肯定会发布我确定]是的,但是作为看到你的经验,你必须得到相同的解释我相信...所以请帮我编辑答案, –

+0

@RadheMohan什么是subCatPart?你能添加一些细节吗? – RobinHood

13

下面是代码:(日志报表解释)

String path = null ; 

File file=new File("/mnt/sdcard/PDFfiles"); 

File f = new File(file, "MyPDFFILE.pdf"); 

Log.v("stage 1","store the pdf in sd card"); 

Document document = new Document(PageSize.A4, 38, 38, 50, 38); 

Log.v("stage 2","Document Created"); 

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

Log.v("Stage 3", "Pdf writer"); 

document.open(); 

Log.v("Stage 4", "Document opened"); 

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

Log.v("Stage 5", "Creating Paragraph"); 

Image image = Image.getInstance ("/mnt/sdcard/images/3_5_9_0001.jpg"); 

Log.v("Stage 6", "Image path adding"); 

image.setAlignment(Image.MIDDLE| Image.TEXTWRAP); 

Log.v("Stage 7", "Image Alignments"); 

image.setBorder(Image.BOX); 

image.setBorderWidth(15); 

document.add(image); 

Log.v("Stage 8", "Image adding"); 

document.close(); 

Log.v("Stage 7", "Document Closed"); 
相关问题