2011-07-13 50 views
20

Tôi có thể tạo tệp PDF trong ứng dụng android bằng cách sử dụng iText, do đó tài liệu PDF được tạo nhưng,
hình ảnh không được bao gồm trong tệp PDF.Làm thế nào để tạo tệp Pdf với hình ảnh trong Android?

+1

bạn có nghĩa là bạn muốn xem tập tin PDF trong android –

+1

câu hỏi lặp đi lặp lại, Dont bạn nghĩ? http://stackoverflow.com/questions/2499960/how-to-create-pdfs-in-android-sdk –

+1

Có thể là tốt đẹp để hợp nhất hai câu hỏi, vì chúng chứa mã hữu ích. –

Trả lời

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

LƯU Ý: Nhà phát triển cần mua giấy phép thương mại từ [iTextPdf] (http://itextpdf.com/terms-of-use/) để sử dụng thư viện iTextPdf trong các ứng dụng nguồn mở. –

+4

@OctavianDamiean Ok, Nhưng phải làm gì khi tôi có câu trả lời nhưng không có giải thích tốt .. bạn có thể viết nó cho tôi, vì * bạn không có câu trả lời * [OW bạn đã đăng, tôi chắc chắn] có, nhưng nhìn thấy kinh nghiệm của bạn, bạn phải có giải thích cho cùng một tôi chắc chắn .. Làm ơn hãy giúp tôi chỉnh sửa câu trả lời, –

+0

@RadheMohan subCatPart là gì? bạn có thể thêm một số chi tiết? – RobinHood

13

Đây là mã: (giải thích trong các báo cáo log)

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"); 
Các vấn đề liên quan