Android中生成PDF
来源:互联网 发布:2016软件学院排名 编辑:程序博客网 时间:2024/05/29 11:19
iText 是java和C#中的一个处理PDF的开源类库,国外的大牛已经把它移植到Android上了,但是直接拿来用还是需要花费一点功夫,下面就用一个简单的demo来测试一下。
iText项目地址:https://code.google.com/p/droidtext/
首先用过svn把代码check下来,终端运行
svn checkout http://droidtext.googlecode.com/svn/trunk/ droidtext-read-only
得到三个文件夹,droidText是一个android的库工程,droidTextTest是测试工程。
在eclipse中导入droidText项目。这是个library project,后面创建的项目需要引用到。
然后创建一个Android工程-iTextTest
在工程中引用droidText:
Project->properties->Android->LIbrary:ADD
链接好之后就像上图。
主界面就一个Button,按下之后就开始生产PDF。
- package com.example.itexttest;
- import java.io.ByteArrayOutputStream;
- import java.io.File;
- import java.io.PrintStream;
- import java.lang.reflect.Method;
- import android.os.Bundle;
- import android.os.Environment;
- import android.app.Activity;
- import android.view.Menu;
- import android.view.View;
- import android.widget.Button;
- import android.widget.Toast;
- public class ITextActivity extends Activity {
- private Button mButton;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_itext);
- mButton = (Button)findViewById(R.id.button1);
- mButton.setOnClickListener(new OnClickListenerImpl());
- }
- private class OnClickListenerImpl implements View.OnClickListener
- {
- @Override
- public void onClick(View arg0) {
- // TODO Auto-generated method stub
- //Toast.makeText(getApplicationContext(), "Run", Toast.LENGTH_SHORT).show();
- // Create droidtext directory for storing results
- File file = new File(
- android.os.Environment.getExternalStorageDirectory()
- + File.separator + "iTextTest");
- if (!file.exists()) {
- file.mkdir();
- }
- System.out.println("Click!");
- Thread t = new Thread() {
- public void run() {
- int success = 0;
- int count = 1;
- String className = "com.example.itexttest.HelloWprld";
- String result = null;
- try {
- // Set output streams to bytearray streams so we can
- // display the output of examples
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- PrintStream errorStream = new PrintStream(bos, true);
- System.setErr(errorStream);
- ByteArrayOutputStream bos2 = new ByteArrayOutputStream();
- PrintStream outStream = new PrintStream(bos2, true);
- System.setOut(outStream);
- // Find the main method
- Class<?> c = Class.forName(className);
- Method main = c.getDeclaredMethod("main",String[].class);
- System.out.println("GetMain"+main.getName());
- // Emulate CLI parameters if necessary
- String[] params = null;
- if (className
- .equals("com.lowagie.examples.objects.tables.pdfptable.FragmentTable")) {
- params = new String[] { "3" };
- } else if (className
- .equals("com.lowagie.examples.objects.images.tiff.OddEven")) {
- params = new String[] { "odd.tif", "even.tif",
- "odd_even.tiff" };
- } else if (className
- .equals("com.lowagie.examples.objects.images.tiff.Tiff2Pdf")) {
- params = new String[] { "tif_12.tif" };
- } else if (className
- .equals("com.lowagie.examples.objects.images.DvdCover")) {
- params = new String[] { "dvdcover.pdf", "Title",
- "0xff0000", "hitchcock.png" };
- } else if (className
- .equals("com.lowagie.examples.forms.ListFields")) {
- params = new String[] {};
- } else if (className
- .equals("com.lowagie.examples.general.read.Info")) {
- params = new String[] { "RomeoJuliet.pdf" };
- } else if (className
- .equals("com.lowagie.examples.objects.anchors.OpenApplication")) {
- params = new String[] { "" };
- }
- main.invoke(null, (Object) params);
- // Parse results
- String string = new String(bos.toByteArray());
- String string2 = new String(bos2.toByteArray());
- if (string.length() > 0) {
- result = "Failed: " + string;
- } else if (string2.contains("Exception")) {
- result = "Failed: " + string2;
- } else if ("Images.pdf" != null) {
- File pdf = new File(
- Environment.getExternalStorageDirectory()
- + File.separator + "iTextTest"
- + File.separator
- + "Images.pdf");
- System.out.println("Create Pdf@");
- if (!pdf.exists()) {
- result = "Failed: Resulting pdf didn't get created";
- } else if (pdf.length() <= 0) {
- result = "Failed: Resulting pdf is empty";
- } else {
- success++;
- result = "Successful";
- }
- } else {
- success++;
- result = "Successful";
- }
- } catch (Exception e) {
- result = "Failed with exception: "
- + e.getClass().getName() + ": "
- + e.getMessage();
- System.out.println(result);
- }
- if (result.startsWith("Failed")) {
- System.out.println("Failed!");
- } else {
- System.out.println("Success!");
- }
- System.out.println(result);
- }
- };
- t.start();
- }
- }
- }
OnClick里面的代码有点小复杂,要用的的话直接粘就可以了,注意修改相应的变量名,classname对应对就是操作itext生产pdf的类。
在包里面再创建两个测试类:
HelloWorld.java
- package com.example.itexttest;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import com.lowagie.text.Document;
- import com.lowagie.text.DocumentException;
- import com.lowagie.text.Paragraph;
- import com.lowagie.text.pdf.PdfWriter;
- /**
- * Generates a simple 'Hello World' PDF file.
- *
- * @author blowagie
- */
- public class HelloWorld {
- /**
- * Generates a PDF file with the text 'Hello World'
- *
- * @param args
- * no arguments needed here
- */
- public static void main(String[] args) {
- System.out.println("Hello World");
- // step 1: creation of a document-object
- Document document = new Document();
- try {
- // step 2:
- // we create a writer that listens to the document
- // and directs a PDF-stream to a file
- PdfWriter.getInstance(document, new FileOutputStream(android.os.Environment.getExternalStorageDirectory() + java.io.File.separator + "iTextTest" + java.io.File.separator + "HelloWorld.pdf"));
- // step 3: we open the document
- document.open();
- // step 4: we add a paragraph to the document
- document.add(new Paragraph("Hello World"));
- } catch (DocumentException de) {
- System.err.println(de.getMessage());
- } catch (IOException ioe) {
- System.err.println(ioe.getMessage());
- }
- // step 5: we close the document
- document.close();
- }
- }
生产Pdf如下:
Rotating.java(创建图片,并旋转)
注意再sdcard的根目录里面放一张图片,改名jxk_run.png。
- /*
- * $Id: Rotating.java 3373 2008-05-12 16:21:24Z xlv $
- *
- * This code is part of the 'iText Tutorial'.
- * You can find the complete tutorial at the following address:
- * http://itextdocs.lowagie.com/tutorial/
- *
- * This code is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * itext-questions@lists.sourceforge.net
- */
- package com.example.itexttest;
- import java.io.ByteArrayOutputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import com.example.itexttest.R;
- import com.example.itexttest.ITextActivity;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import com.lowagie.text.Document;
- import com.lowagie.text.DocumentException;
- import com.lowagie.text.Image;
- import com.lowagie.text.Paragraph;
- import com.lowagie.text.pdf.PdfWriter;
- /**
- * Rotating images.
- */
- public class Rotating {
- /**
- * Rotating images.
- *
- * @param args
- * No arguments needed
- */
- public static void main(String[] args) {
- System.out.println("Rotating an Image");
- // step 1: creation of a document-object
- Document document = new Document();
- try {
- // step 2:
- // we create a writer that listens to the document
- // and directs a PDF-stream to a file
- PdfWriter.getInstance(document, new FileOutputStream(android.os.Environment.getExternalStorageDirectory() + java.io.File.separator + "iTextTest" + java.io.File.separator + "rotating.pdf"));
- // step 3: we open the document
- document.open();
- // step 4: we add content
- //Can't use filename => use byte[] instead
- // Image jpg4 = Image.getInstance("otsoe.jpg");
- ByteArrayOutputStream stream = new ByteArrayOutputStream();
- //Bitmap bitmap = BitmapFactory.decodeResource(ITextActivity.getActivity().getResources(), R.drawable.otsoe);
- Bitmap bitmap = BitmapFactory.decodeFile("/mnt/sdcard/jxk_run.png");
- bitmap.compress(Bitmap.CompressFormat.JPEG /* FileType */,100 /* Ratio */, stream);
- Image jpg = Image.getInstance(stream.toByteArray());
- jpg.setAlignment(Image.MIDDLE);
- jpg.setRotation((float) Math.PI / 6);
- document.add(new Paragraph("rotate 30 degrees"));
- document.add(jpg);
- document.newPage();
- jpg.setRotation((float) Math.PI / 4);
- document.add(new Paragraph("rotate 45 degrees"));
- document.add(jpg);
- document.newPage();
- jpg.setRotation((float) Math.PI / 2);
- document.add(new Paragraph("rotate pi/2 radians"));
- document.add(jpg);
- document.newPage();
- jpg.setRotation((float) (Math.PI * 0.75));
- document.add(new Paragraph("rotate 135 degrees"));
- document.add(jpg);
- document.newPage();
- jpg.setRotation((float) Math.PI);
- document.add(new Paragraph("rotate pi radians"));
- document.add(jpg);
- document.newPage();
- jpg.setRotation((float) (2.0 * Math.PI));
- document.add(new Paragraph("rotate 2 x pi radians"));
- document.add(jpg);
- } catch (DocumentException de) {
- System.err.println(de.getMessage());
- } catch (IOException ioe) {
- System.err.println(ioe.getMessage());
- }
- // step 5: we close the document
- document.close();
- }
- }
生产PDF如下:
1 0
- Android中生成PDF
- Android中生成PDF
- 在Android中利用iText生成PDF
- android 生成pdf文件
- android网络打印 生成pdf
- Android使用iText生成pdf文件并读取pdf内容
- 从inputstream中读pdf生成pdf文件
- android 文字或者图片生成.pdf文件
- Android下生成pdf并显示中文
- android 文字或者图片生成.pdf文件
- Android环境下生成PDF文件
- Android环境下生成PDF文件
- pb9中Fop生成PDF试用手记
- asp.net 2.0 中生成PDF
- 在struts中生成Pdf报表
- asp.net 2.0 中生成PDF
- asp.net 2.0 中生成PDF
- 生成PDF文件方案--学习中
- JdbcTemplate调用存储过程
- 移动APP如何保存用户密码
- MySql时间处理
- Qt之美(一):D指针/私有实现
- Strcpy与strncpy的区别
- Android中生成PDF
- myeclipse2013配置maven环境
- Inten 大全
- 通用型Dao层简单化查询通用方法
- JAVA基础知识: 流程控制习题答案
- UIAlierView方法
- Android 扩大view点击范围
- 用指针方法对10个整数按由大到小的顺序排序
- springMVC 自定义拦截器